求Java实现两点间直线的所有坐标点(x,y)

zp8126 2011-08-09 03:35:27
使用Java实现两点间的直线绘制简单,但是我想取得两点间这个直线所经历的坐标点,不知道该如何获取,求算法,谢谢各位高手了啊
...全文
1910 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2011-10-17
  • 打赏
  • 举报
回复
学习一下,正好要用。
zp8126 2011-08-11
  • 打赏
  • 举报
回复
估计没了 下午结贴吧?
zp8126 2011-08-10
  • 打赏
  • 举报
回复
使用分析像素点,好像没方向性,但是应该也能处理。使用算法的话 可以控制方向性。
zp8126 2011-08-10
  • 打赏
  • 举报
回复
有的时候好像有断点啊 int x1 = 21;
int y1 = 91;
int x2 = 2;
int y2 = 9;
zp8126 2011-08-10
  • 打赏
  • 举报
回复
shine333 太谢谢了,高手啊 哈 我再试试啊,分肯定要给您了哈,有问题再请教你啊
shine333 2011-08-10
  • 打赏
  • 举报
回复
    int x1 = 20, y1 = 50, x2 = 300, y2 = 600;
List<Point> list = new ArrayList<Point>();
if (x1 == x2) {
// Tangent = NaN
int from = Math.min(y1, y2);
int to = Math.max(y1, y2);
for (int y = from; y <= to; y++) {
list.add(new Point(x1, y));
}
} else {
double slope = ((double) (y2 - y1)) / ((double) (x2 - x1));
int step = (x2 > x1) ? 1 : -1;
for (int x = x1; x != x2; x += step) {
int y = (int)((x - x1) * slope + y1);
list.add(new Point(x, y));
}
}
System.out.println(list);


两者的区别,在于画的时候会渲染,导致结果出现了同一个x有两个不同的y。对此,我试试看改变渲染的方式,关闭抗锯齿,但似乎没效果。

Graphics2D g2d = (Graphics2D) g;
// 关闭抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
zp8126 2011-08-10
  • 打赏
  • 举报
回复
啊 是么,麻烦shine333了 期待中...哈
shine333 2011-08-10
  • 打赏
  • 举报
回复
这个看情况的,直线能够算表达式,其实更简单
代码稍后
zp8126 2011-08-10
  • 打赏
  • 举报
回复
谢谢各位了,尤其谢谢13楼shine333,原来我也想了两种思路 一个是找一个算法算出坐标点,还有就是你的这个思路,通过分析像素点来提取。第二个思路还没开始想 呵呵,看来如果真找不到算法思路的话,就只能分析像素点了。谢谢您的代码
shine333 2011-08-10
  • 打赏
  • 举报
回复
    BufferedImage img = new BufferedImage(1000, 800, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.getGraphics();
Color color = Color.BLACK;
g.setColor(color);
g.drawLine(20, 50, 300, 600);
int[] rgbArray = new int[img.getWidth()];
List<Point> list = new ArrayList<Point>();
for (int y = 0; y < img.getHeight(); y++) {
img.getRGB(0, y, img.getWidth(), 1, rgbArray, 0, img.getWidth());
for (int x = 0; x < rgbArray.length; x++) {
if (rgbArray[x] == color.getRGB()) {
list.add(new Point(x, y));
}
}
}
System.out.println(list);
mrok1 2011-08-10
  • 打赏
  • 举报
回复
学习了
MapzChen 2011-08-10
  • 打赏
  • 举报
回复
如果不是整数点,你起码要给出精度啊
zp8126 2011-08-10
  • 打赏
  • 举报
回复
哈 坦克哥给分是一定了,暂不结贴,看还有没有更好的方法。呵呵 坦克哥的代码先用着了
再次谢谢各位大侠啊
小绵羊 2011-08-10
  • 打赏
  • 举报
回复
看坦克哥拿分
qingbt 2011-08-09
  • 打赏
  • 举报
回复
是个数学问题。lz说的是不是求所有整数点坐标啊,否则不是无穷多个吗,无解
zp8126 2011-08-09
  • 打赏
  • 举报
回复
或者给出直线对象 获得此直线上的所有点坐标也行 但是终究结果是一样的
zp8126 2011-08-09
  • 打赏
  • 举报
回复
如果Swing中有这样的方法也可以啊 只要能实现getXY(int startX,int startY,int endX,int endY)这样一个给出两点 就能得到两点间直线的所有坐标点(x,y)算法就可以。但是我找Swing中也没找到现成的方法啊
bayougeng 2011-08-09
  • 打赏
  • 举报
回复
是求屏幕上的像素坐标,还是自己做坐标模拟?
如果是Swing中,或者有现成的图形界面的框架,那直线的上所有的坐标应该都不难找到。
就算是自己做坐标来计算,我觉得也不困难。x,y的差值算出来设为(a,b),然后根据相似三角形来推算直线上每点的坐标。无论差值怎么变,a/b的值肯定是不变的。
困难的是,如果这个直线非常接近水品,那么斜线将出现锯齿状。这个时候看的坐标,就要好好考虑下怎么算了
ifrancis 2011-08-09
  • 打赏
  • 举报
回复
二维数组
waynell 2011-08-09
  • 打赏
  • 举报
回复
所以说要有其它处理嘛,你把xy反一下不就好了嘛?
加载更多回复(5)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧