【问题标题】:How would I determine if a point is within my triangle shape?我如何确定一个点是否在我的三角形内?
【发布时间】:2020-04-01 21:34:57
【问题描述】:

我正在编写一个形状绘制函数,并想检查用户是否像点击测试一样点击了三角形内部。

这是我目前所拥有的:

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 函数不起作用吗?

【问题讨论】:

  • 从那个 PAQ 中选择你的 answer

标签: java


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    由于有关它的主题过多,您可以仔细研究以掌握公式的逻辑。 @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在显示的三角形内部或外部单击来测试它,这会在每次运行时生成随机三角形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2023-03-18
      • 2011-01-04
      • 2014-10-20
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多