Math 查找点是否在直角三角形内
我一直在想,最简单的方法是确定一个点是否位于三角形内,或者在这个例子中,是一个按对角线切成半的矩形 假设我有一个64x64像素的矩形。对于这个矩形,如果传递的点位于矩形的左上角,我希望返回一个真值,如果不在左上角,则返回FALSEMath 查找点是否在直角三角形内,math,geometry,Math,Geometry,我一直在想,最简单的方法是确定一个点是否位于三角形内,或者在这个例子中,是一个按对角线切成半的矩形 假设我有一个64x64像素的矩形。对于这个矩形,如果传递的点位于矩形的左上角,我希望返回一个真值,如果不在左上角,则返回FALSE ----- | /| | / | |<__| 但我认为,在大多数情况下,目前已经提供的答案仍然有效…一个简单的选择是使用光线投射算法。虽然对于您所需要的可能有点过分,但它的优点是它可以处理更复杂的三角形和多边形 松散地说,该算法在一个方向上取一个假想点(例如
-----
| /|
| / |
|<__|
但我认为,在大多数情况下,目前已经提供的答案仍然有效…一个简单的选择是使用光线投射算法。虽然对于您所需要的可能有点过分,但它的优点是它可以处理更复杂的三角形和多边形
松散地说,该算法在一个方向上取一个假想点(例如,无限向左),并向测试点投射光线;然后计算三角形的每条线是否与那条无限长的线相交。如果你得到奇数个交叉点,你的点在你的三角形内;即使你不在三角形中,直线的方程如下:
y = mx + b
所以,如果你把你的x和y值插入到方程中,它可能不再成立。让我们重新表述一下:
mx + b - y = 0
同样的东西,不同的外观。同样,结果可能不是零。但是,结果现在会告诉你它是在这条线的一边还是另一边
现在您只需确定点是否在矩形内。您可以用三个仿射函数表示三角形 取角位于(0,0)、(1,0)和(1,1)的单位三角形。侧面由三条线表示
x+y64
(对于大小为(w,h)的矩形,使用w*y+h*x-w*hx假设直角三角形在0,0处有一个角,对角线在a,b处 从原点开始,y=mx+c=0 m=b/a 所以y=bx/a 知道你的点(c,d)落在三角形的哪一半 如果(d(bc/a)){//点在上半部分}
我想…你也会问这个问题。有人会建议你的问题的几种解决方案,但你没有告诉你需要什么-速度、针对特定情况的优化或只是清晰的公式。只是清晰的公式。我通常可以想出一个解决方案,但它很难优雅,速度是一个问题。我喜欢看到di不同的方法可以做到这一点,这样我就可以在我已经在做的事情之外思考。它还可以帮助我记住基本的数学:[不要忘了适当地缩放x和y(以适合实际的三角形)。我假设Jeffrey不关心旋转。这只适用于直角的两侧具有相同长度的情况。假设我聚焦于左下角和右上角。那么我该如何编辑它?例如,wx+hy-w*h>0?并且,正方形将具有相同的宽度,减去总是返回错误碰撞值的异常情况e:)X谢谢你的解决方案!:)
mx + b - y = 0
h*x + w*y - w*h = 0
h*x + w*y - w*h > 0
h*x + w*y - w*h < 0
64x + 64y - 64*64 < 0
x+y < 64
h*x - w*y = 0
h*x - w*y < 0
h*x - w*y > 0
64x-64y < 0
=> x<y