首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机CGPoint

随机CGPoint
EN

Stack Overflow用户
提问于 2013-08-04 18:47:09
回答 2查看 225关注 0票数 0

如何获得屏幕边界(边框)之外的随机CGPoint?

另外,考虑到这一点,我如何在屏幕中间找到一个对称点--例如,我有一个点(width+1,height+1)。现在对称点是(-1,-1)。假设我有(-1,高度+1)-对称将是(width+1,-1)。

希望大家都明白了,谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-08-04 19:55:58

如果我没理解错你的问题,你可以使用以下方法:

代码语言:javascript
复制
- (CGPoint) randomPointIn:(CGRect)inrect outsideOf:(CGRect)outrect
{
    CGPoint p;
    do {
        p.x = inrect.origin.x + inrect.size.width * (float)arc4random()/(float)UINT32_MAX;
        p.y = inrect.origin.y + inrect.size.height * (float)arc4random()/(float)UINT32_MAX;
    } while (CGRectContainsPoint(outrect, p));
    return p;
}

它返回一个在inrect内,但在outrect外的随机点。(我假设inrectoutrect“大得多”,否则可能需要多次循环迭代才能找到有效点。)

在您的示例中,您将使用outrect = CGRectMake(0, 0, width, height),而inrect将指定允许的域。

并且相对于尺寸为(width, height)的屏幕的中间与(x, y)对称的点是(width - x, height - y)

更新:正如我刚才在这里找到的:http://openradar.appspot.com/7684419,如果您提供一个位于CGRect边界上的点,CGRectContainsPoint将返回false。这意味着上面的方法返回一个位于给定矩形outrect外部或边界上的点。如果这不是所需的,可以添加额外的检查。

票数 1
EN

Stack Overflow用户

发布于 2013-08-04 20:42:27

我相信这应该行得通。

代码语言:javascript
复制
//To get a random point
- (CGPoint)randomPointOutside:(CGRect)rect
{
    // arc4random()%(int)rect.size.width
    // This gets a random number within the width of the rectangle
    //
    // (arc4random()%2) ? rect.size.width : 0)
    // This has a 50:50 to put the point in the q1 quadrant relative to the top right point of the rect
    //
    //    q4       q1
    //   _____ +  
    //  |     |
    //  | q3  |    q2
    //  |_____|
    //
    float x = arc4random()%(int)rect.size.width + ((arc4random()%2) ? rect.size.width : 0);
    float y = arc4random()%(int)rect.size.height + ((arc4random()%2) ? rect.size.height : 0);
    return CGPointMake(x, y);
}

//To get the symmetrical point
- (CGPoint)symmetricalPoint:(CGPoint)p around:(CGRect)rect
{
    return CGPointMake((p.x-rect.size.width) * -1, (p.y-rect.size.height) * -1);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18042090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档