怎么样判断点击的坐标是在屏幕上的菱形里面,求算法

2025-05-22 11:05:08
推荐回答(3个)
回答1:

我是这样算的
-(BOOL)DiamondContainsPoint:(CGRect)rect Point:(CGPoint)point
{
CGFloat startX = rect.origin.x;
CGFloat startY = rect.origin.y;
CGFloat width = rect.size.width;
CGFloat height = rect.size.height;
CGFloat absoluteX = point.x - startX;
CGFloat absoluteY = point.y - startY;

if (absoluteY >= ((-height/width)*absoluteX+height/2) &&
absoluteY <= ((-height/width)*absoluteX+3*height/2) &&
absoluteY <= ((height/width)*absoluteX+height/2) &&
absoluteY >= ((height/width)*absoluteX-height/2))
{
return YES;
}

return NO;
}

回答2:

这样算
-(BOOL)DiamondContainsPoint:(CGRect)rect Point:(CGPoint)point
{
CGFloat startX = rect.origin.x;
CGFloat startY = rect.origin.y;
CGFloat width = rect.size.width;
CGFloat height = rect.size.height;
CGFloat absoluteX = point.x - startX;
CGFloat absoluteY = point.y - startY;

if (absoluteY >= ((-height/width)*absoluteX+height/2) &&
absoluteY <= ((-height/width)*absoluteX+3*height/2) &&
absoluteY <= ((height/width)*absoluteX+height/2) &&
absoluteY >= ((height/width)*absoluteX-height/2))
{
return YES;
}

return NO;
}

回答3:

-(BOOL)DiamondContainsPoint:(CGRect)rect Point:(CGPoint)point
{
CGFloat startX = rect.origin.x;
CGFloat startY = rect.origin.y;
CGFloat width = rect.size.width;
CGFloat height = rect.size.height;
CGFloat absoluteX = point.x - startX;
CGFloat absoluteY = point.y - startY;

if (absoluteY >= ((-height/width)*absoluteX+height/2) &&
absoluteY <= ((-height/width)*absoluteX+3*height/2) &&
absoluteY <= ((height/width)*absoluteX+height/2) &&
absoluteY >= ((height/width)*absoluteX-height/2))
{
return YES;
}

return NO;
}