java - 点是否在多边形内测试

标签 java swing awt polygon point

我尝试编写一个Java应用程序,它打印出鼠标给定的点是在给定多边形的内部还是外部。但我不知道如何使用包含 Methode 的公共(public) boolean 值。有人可以帮助我吗?我的数组arrx和arry保存了多边形的坐标,但是我怎么能说他必须检查是否有一个点进出我的多边形。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PiP extends JPanel implements MouseListener,MouseMotionListener  {
int x0,x1,y0,y1,i = 0,z = 1; 
int [][] pkt;
boolean zeichnen;
int []points = new int[100];
double y;
public static void main(String[] args) {
PiP p= new PiP();
}
public PiP() {
  JFrame fenster = new JFrame("Fenster");
  fenster.setBounds(0,0,600,600);
  fenster.setVisible(true);
  fenster.add(this); 
  fenster.addMouseListener(this);
  fenster.addMouseMotionListener(this);
  fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}  

public void mousePressed(MouseEvent e) {          //if mouse pressed
  pkt = new int[z][4]; 
  zeichnen = true;
  x1 = e.getX();
  y1 = e.getY();    
  pkt[i][0] = x1;
  pkt[i][1] = y1;
  System.out.println("x = "+pkt[i][0]+" und"+" y = "+pkt[i][1]);
  repaint();
  i++;
  z++;
}
public void Polygon(int arrx, int arry){
return arrx;
}
public boolean contains(int x1,int y1){     //here I tried to use contains, but I am 
return true;                                 //not sure how to take the variables from 
}                                           //the polygon to test if the Points are in
else {                                      //the Polygon
 return false;
}
}
public void mouseClicked(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseMoved(MouseEvent e) { }
public void mouseDragged(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void paint(Graphics g) {
    g.setColor(Color.RED);
int []arrx = {163,123,81,163,293,332,426,461,493,491,383,328,313,263};     //Poly x coordinates
int []arry = {143,219,359,433,478,523,448,401,306,238,219,205,168,158};   //Poly y coordinates
    g.drawPolygon(arrx,arry,arrx.length);
    if (zeichnen) {
     g.drawRect(x1,y1,10,10);
    g.fillRect(x1,y1,10,10);  
    } // end of if
  }
  }

最佳答案

//here I tried to use contains, but I am 
//not sure how to take the variables from 
//the polygon to test if the Points are in
//the Polygon

建立基于 AWT 的 Polygonarrxarry 数组值中调用 contains(x,y)方法。

EG

public boolean containsPoint(int x1, int y1) {
    Polygon polygon = new Polygon(arrx, arry, arrx.length);
    return polygon.contains(x1,y1);
}

旁白

在可以执行该测试之前(或者在代码编译之前),需要对代码进行更改。例如,arrxarry 数组需要能够被检查包含点的方法访问(在其范围内)。

提示

  • 对于任何 JComponent(例如 JPanel),覆盖绘画的正确方法是 paintComponent(Graphics) 方法,而不是 paint(Graphics) 方法。始终首先调用 super 方法,以清除以前的任何绘图。
  • 鼠标监听器应添加到面板,而不是框架。
  • 与其设置框架的大小,不如重写 JPanelgetPreferedSize()pack()添加所有组件后的框架。
  • Swing(和 AWT)GUI 应在 EDT 上创建和更新。

关于java - 点是否在多边形内测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53100822/

相关文章:

Java getClassLoader().getResourceAsStream(文件名)

java - 限制 JScrollPane 仅显示其部分内容

java - PMD 违规 : Use explicit scoping instead of the default package private level

Java如何使用绘制圆弧并连接到另一个圆弧

java - 如何在数据库JAVA中建立两个对象之间的关系

java - 在 JList 中添加和删除按钮

java - JDK1.6和JDK1.7拖拽区别

java - Swing:将键盘焦点遍历限制为特定的小部件

java - 强制完全重绘 Jpanel Java2D

java - 事件委托(delegate)模型和事件继承模型有什么区别?