Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定点是否在三角形形状内?_Java - Fatal编程技术网

Java 如何确定点是否在三角形形状内?

Java 如何确定点是否在三角形形状内?,java,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 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;
}
public void draw(图形g)
{
int x[]={(x1+x2)/2,x1,x2};
int y[]={y1,y2,y2};
int numberOfPoints=3;
g、 设置颜色(颜色);
g、 填充多边形(x,y,点数);
}
公共布尔hitTest(int x,int y)
{
返回x>((x1+x2)/2)和&xy1和&y

这在一定程度上适用于三角形,但其右侧仍然无法正确进行命中测试。你知道为什么这个hitTest函数不起作用吗?

不要直接绘制多边形,而是创建一个多边形。然后你可以画那个形状。你可能想让所有人看一看

首先,你需要3个点来画一个三角形,然后再检查它是否在里面,比如
(x1,y1)
(x2,y2)
(x3,y3)
。然后,在检查安全壳之前,您需要计算其面积

因为有太多关于它的话题,你可以仔细研究以掌握公式的逻辑。其中一个是来自@Idle\u Mind comment的以下内容

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 = 0.5 *(-p1y*p2x + p0y*(-p1x + p2x) + p0x*(p1y - p2y) + p1x*p2y);
可以通过单击所示三角形的内部或外部进行测试,通过该三角形在每次跑步时生成随机三角形。

从该PAQ中选择您的PAQ?