2010-02-03 90 views
1

我有一个直角三角形,我想检查给定的点是否在三角形的斜角处。所有点都是纯整数,而不是浮点变量。 https://tape.bplaced.net/dl/example2.png如何检查一个点(int - 坐标)是否在三角形的斜边内

编辑: 所有的绿色方块将是对斜边,白色方块不会。我知道x,y,角的坐标和我想测试的点的坐标。 所有的坐标都是整数(y在图中有点偏离,对不起)。

+1

你是什么意思“在斜边”?从这个例子中,我会说在三角形描述的框内的任何东西都有资格。你可以添加一些不是“在斜边上”的点。 – meagar 2010-02-03 16:45:25

+0

@raphaelr:您的图片404'd。 – kennytm 2010-02-03 17:20:42

+0

好的,固定的。 – raphaelr 2010-02-03 18:06:18

回答

1

这可能工作:

你知道三角形,所以只需要创建一个功能为hypothenuse,在你的例子这将是y = 5x/12。如果你现在得到一个点,说x = 6, y = 3,你可以使用这些变量来看看它是否正确:3 = roundup(5*6/12)。如果确实如此,则该点在三角形上,否则 - 则不是。

+1

完美运作。 – raphaelr 2010-02-03 19:32:29

0

我就开始这样做:

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) 
    } 
} 

然后你有斜边的所有点。有更好的绘制线的算法,但这可能是一个开始。

1

有两种情况需要处理:一种是斜边是垂直的,另一种是不垂直的。

对于垂直情况,您只需检查问题点在斜边范围内是否有y值。

对于非垂直情况,使用其端点推导出斜边的方程。线的方程是y = mx + b,其中m是dx/dy的斜率。那么b = y - mx。

既然你有m和b,看看候选点的x和y是否满足方程(点的y是否等于m * x + b?)。

但是,实际上,您应该检查nearness而不是精确的相等,以便检查点的y是否在(m * x + b)的某个小的三角洲内。

相关问题