我有一个直角三角形,我想检查给定的点是否在三角形的斜角处。所有点都是纯整数,而不是浮点变量。 如何检查一个点(int - 坐标)是否在三角形的斜边内
编辑: 所有的绿色方块将是对斜边,白色方块不会。我知道x,y,角的坐标和我想测试的点的坐标。 所有的坐标都是整数(y在图中有点偏离,对不起)。
我有一个直角三角形,我想检查给定的点是否在三角形的斜角处。所有点都是纯整数,而不是浮点变量。 如何检查一个点(int - 坐标)是否在三角形的斜边内
编辑: 所有的绿色方块将是对斜边,白色方块不会。我知道x,y,角的坐标和我想测试的点的坐标。 所有的坐标都是整数(y在图中有点偏离,对不起)。
这可能工作:
你知道三角形,所以只需要创建一个功能为hypothenuse,在你的例子这将是y = 5x/12
。如果你现在得到一个点,说x = 6, y = 3
,你可以使用这些变量来看看它是否正确:3 = roundup(5*6/12)
。如果确实如此,则该点在三角形上,否则 - 则不是。
完美运作。 – raphaelr 2010-02-03 19:32:29
我就开始这样做:
points = an array;
delta=y/x
acc = 0
j = 0
for (i=0;i<x;i++){
points.push(i, j)
acc+=delta
while (acc > 1){
acc-=1
j++
points.push(i,j)
}
}
然后你有斜边的所有点。有更好的绘制线的算法,但这可能是一个开始。
有两种情况需要处理:一种是斜边是垂直的,另一种是不垂直的。
对于垂直情况,您只需检查问题点在斜边范围内是否有y值。
对于非垂直情况,使用其端点推导出斜边的方程。线的方程是y = mx + b,其中m是dx/dy的斜率。那么b = y - mx。
既然你有m和b,看看候选点的x和y是否满足方程(点的y是否等于m * x + b?)。
但是,实际上,您应该检查nearness而不是精确的相等,以便检查点的y是否在(m * x + b)的某个小的三角洲内。
你是什么意思“在斜边”?从这个例子中,我会说在三角形描述的框内的任何东西都有资格。你可以添加一些不是“在斜边上”的点。 – meagar 2010-02-03 16:45:25
@raphaelr:您的图片404'd。 – kennytm 2010-02-03 17:20:42
好的,固定的。 – raphaelr 2010-02-03 18:06:18