我有一个二维点列表。
例如:
x = c(4,3,3,5,6,6,4)
和
y = c(5,3,1,0,1,3,5)
这些二维点的图是
我想为这个点集画一个包装:
注意,边界(包装器)与最近点之间的垂直距离为2个单位。
请注意,:我有许多点集,例如上面的点集。我想为所有布景做同样的事情。
我想要这个边界多边形。任何人都可以建议我该怎么做。
Janak,任何想法都非常感谢。
最佳答案
使用Java,这变得非常简单。该程序通过绘制结果来演示结果。也可以通过迭代area.getPathIterator(at)
来获得轮廓,该ojit_code将一一返回所有点。
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
public class PointSet {
public static final int W = 2;
Area area = new Area();
public void add( double x, double y ){
area.add( new Area( new Rectangle2D.Double( x-W, y-W,2*W, 2*W ) ) );
}
public void plot(){
Board board = new Board();
board.go( area );
}
public static void main( String[] args ){
PointSet ps = new PointSet();
ps.add( 4, 5);
ps.add( 3, 3);
ps.add( 3, 1);
ps.add( 5, 0);
ps.add( 6, 1);
ps.add( 6, 3);
ps.plot();
}
}
和:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;
public class Board extends JPanel {
Area area;
void go( Area area ) {
this.area = area;
JFrame frame = new JFrame("Circle Test");
frame.getContentPane().add(this);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
repaint();
frame.setPreferredSize(new Dimension(800,800));
frame.pack();
frame.setVisible(true);
}
public void paintComponent(Graphics g) {
AffineTransform at = new AffineTransform();
at.translate( 100, 100 );
at.scale( 50, 50 );
PathIterator pit = area.getPathIterator( at );
Path2D path = new Path2D.Double();
path.append( pit, true );
Graphics2D g2d = (Graphics2D)g;
g2d.draw( path );
}
}