Math 查找点是否在直角三角形内

Math 查找点是否在直角三角形内,math,geometry,Math,Geometry,我一直在想,最简单的方法是确定一个点是否位于三角形内,或者在这个例子中,是一个按对角线切成半的矩形 假设我有一个64x64像素的矩形。对于这个矩形,如果传递的点位于矩形的左上角,我希望返回一个真值,如果不在左上角,则返回FALSE ----- | /| | / | |<__| 但我认为,在大多数情况下,目前已经提供的答案仍然有效…一个简单的选择是使用光线投射算法。虽然对于您所需要的可能有点过分,但它的优点是它可以处理更复杂的三角形和多边形 松散地说,该算法在一个方向上取一个假想点(例如

我一直在想,最简单的方法是确定一个点是否位于三角形内,或者在这个例子中,是一个按对角线切成半的矩形

假设我有一个64x64像素的矩形。对于这个矩形,如果传递的点位于矩形的左上角,我希望返回一个真值,如果不在左上角,则返回FALSE

-----
|  /|
| / |
|<__|

但我认为,在大多数情况下,目前已经提供的答案仍然有效…

一个简单的选择是使用光线投射算法。虽然对于您所需要的可能有点过分,但它的优点是它可以处理更复杂的三角形和多边形


松散地说,该算法在一个方向上取一个假想点(例如,无限向左),并向测试点投射光线;然后计算三角形的每条线是否与那条无限长的线相交。如果你得到奇数个交叉点,你的点在你的三角形内;即使你不在三角形中,直线的方程如下:

y = mx + b
所以,如果你把你的x和y值插入到方程中,它可能不再成立。让我们重新表述一下:

mx + b - y = 0
同样的东西,不同的外观。同样,结果可能不是零。但是,结果现在会告诉你它是在这条线的一边还是另一边


现在您只需确定点是否在矩形内。

您可以用三个仿射函数表示三角形

取角位于(0,0)、(1,0)和(1,1)的单位三角形。侧面由三条线表示

  • y=0
  • x=1
  • y=x
  • 因此,三角形的内部和边界被指定为集合的交点

  • x>=1
  • y>=0

  • y左上/右下三角形:对于左上三角形中的所有点,
    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