我正在编写一个图形绘制功能,想检查用户是否单击了三角形,例如点击测试。
这是我到目前为止所拥有的:
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函数不起作用的任何想法?
答案 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在显示的三角形的内部或外部单击来进行测试,每次运行时都会创建随机的三角形。