我如何确定一个点是否在三角形内?

时间:2019-12-08 17:02:41

标签: java

我正在编写一个图形绘制功能,想检查用户是否单击了三角形,例如点击测试。

这是我到目前为止所拥有的:

public void draw(Graphics g) 
{
    int x[] = { (x1 + x2) / 2, x1, x2}; 
    int y[] = { y1, y2, y2}; 
    int numberOfPoints = 3;
    g.setColor(color);
    g.fillPolygon(x, y, numberOfPoints);
}

public boolean hitTest(int x, int y) 
{
    return x > ((x1 + x2) / 2) && x < x2 && y > y1 && y < y2;
}

这部分适用于三角形,但其右侧仍未正确进行点击测试。关于为什么这个hitTest函数不起作用的任何想法?

2 个答案:

答案 0 :(得分:0)

不要直接绘制多边形,而是创建一个Polygon。然后,您可以绘制该形状。您可能想看看About drawing a Polygon in java

答案 1 :(得分:0)

首先,在检查三角形是否在内部时,例如(x1, y1)(x2, y2)(x3, y3)之前,需要3个点有一个三角形。然后,您需要先计算其面积,然后再进行收容。

由于有太多关于它的主题,您可以进行仔​​细研究以掌握公式的逻辑。其中之一是@Idle_Mind注释中的以下内容。

s = 1/(2*Area)*(p0y*p2x - p0x*p2y + (p2y - p0y)*px + (p0x - p2x)*py);
t = 1/(2*Area)*(p0x*p1y - p0y*p1x + (p0y - p1y)*px + (p1x - p0x)*py);

其中Area是三角形的(有符号)区域:

Area = 0.5 *(-p1y*p2x + p0y*(-p1x + p2x) + p0x*(p1y - p2y) + p1x*p2y);

可以通过this link在显示的三角形的内部或外部单击来进行测试,每次运行时都会创建随机的三角形。

相关问题