我需要让程序有一个三角形,当我点击三角形消息框时会显示"在三角形"如果在外面点击,那么"在三角形之外"
有三角形代码并获得点击坐标。但我不能在上面提到那个提到的逻辑。
如果有更好的方法来绘制三角形,那么请告诉我。 或者如果这项工作在matlab中很容易,那么也建议我。
第1类绘制三角形
public class Triangle extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(new Line2D.Double (100, 100, 200, 100));
g2.draw(new Line2D.Double (100, 100, 150, 200));
g2.draw(new Line2D.Double (150, 200, 200, 100));
}
}
第2课
public class Tri_Angle extends MouseAdapter {
Tri_Angle(){
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
int x= me.getX();
int y= me.getY();
System.out.println("clicked at (" + x + ", " + y + ")");
}
});
}
public static void main(String[] args) {
Triangle component = new Triangle ();
JFrame frame = new JFrame ();
final int FRAME_WIDTH = 250;
final int FRAME_HEIGHT = 250;
frame.setSize (FRAME_WIDTH, FRAME_HEIGHT);
frame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
int x= me.getX();
int y= me.getY();
System.out.println("clicked at (" + x + ", " + y + ")");
}
});
frame.setTitle("A Test Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(component);
}
答案 0 :(得分:0)
这很简单。
Java代码:
public class Point {
public final double x;
public final double y;
...
}
// -1 - point is "below" line, 0 - point is on line, +1 - point is "above" line
private int getPointPosition(Point p, Point p1, Point p2) {
// Line equation: (p.x - p1.x) / (p1.x - p2.x) - (p.y - p1.y) / (p1.y - p2.y)) = 0
// Canonical form: F = Ax + By + C
return Double.sign((p.x - p1.x) * (p1.y - p2.y) - (p.y - p1.y) * (p1.x - p2.x));
}
private boolean isInTriangle(Point p, Point p1, Point p2, Point p3) {
return getPointPosition(p, p1, p2) == getPointPosition(p3, p1, p2) &&
getPointPosition(p, p1, p3) == getPointPosition(p2, p1, p3) &&
getPointPosition(p, p2, p3) == getPointPosition(p1, p2, p3);
}
为了更好地理解这个数学,你可以在纸上画一个图像并用方程式进行游戏。