给你一个点作圆心,一个长度作半径,如何得到这个圆的所有点的集合? 是在一个平面,比如一个长方形(或窗口)内,找到这个圆的所有点的集合。我知道这个公式, (Y - y0)^2 + (X - x0)^2 = r^2,但显然不能穷举窗口内的所有点,来一个个作判断是否满足条件,这样的话,运行时间太久了,因为要做很多这样的运算。有什么更好的办法么?我想到的是,从圆心开始,分割四个区域,每个区域,从圆心向上(下)左(右)一个一个的试每一个点。不知道是否有更有效率的法子。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分上下两部分 以圆心为(0,0)若(x,y)在园边上(x,y)和(x,-y)还有区间里所有的点都满足 /** * */package test;import java.text.ParseException;import java.util.ArrayList;import java.util.List;/** * * @author - yy * @time - Dec 9, 2008 3:44:38 PM */public class Test5 { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { List<Point> list = new Test5().genPointList(new Point(2, 1), 2); System.out.println(list); // 输出结果// [(2,1)// , (2,1)// , (1,1)// , (3,1)// , (1,1)// , (3,1)// , (0,1)// , (4,1)// , (0,1)// , (4,1)// , (2,2)// , (2,0)// , (1,2)// , (3,2)// , (1,0)// , (3,0)// , (2,3)// , (2,-1)// ] } public List<Point> genPointList(Point org, int radius) throws ParseException { List<Point> list = new ArrayList<Point>(); for (int y = 0; y <= radius; y++) { // 从一个轴的计算 int maxRelativeX = (int) Math.sqrt(radius * radius - y * y); list.add(new Point(org.getX(), org.getY() + y)); list.add(new Point(org.getX(), org.getY() - y)); for (int i = 1; i <= maxRelativeX; i++) { list.add(new Point(org.getX() - i, org.getY() + y)); // 四个方位都合适 list.add(new Point(org.getX() + i, org.getY() + y)); list.add(new Point(org.getX() - i, org.getY() - y)); list.add(new Point(org.getX() + i, org.getY() - y)); } } return list; } }class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return this.x; } public void setX(int x) { this.x = x; } public int getY() { return this.y; } public void setY(int y) { this.y = y; } @Override public String toString() { // AutoGenerate StringBuilder sb = new StringBuilder(); sb.append("(").append(this.x); sb.append(",").append(this.y); sb.append(")\n"); return sb.toString(); } } ParseException异常不需要,以前留下的,忘记删除了 /** * 计算满足条件的所有点 * @param org - 圆点(x0,y0) * @param radius - 半径 * @return */ public List<Point> genPointList(Point org, int radius) // 将genPointList中的以下两句注释掉 //list.add(new Point(org.getX(), org.getY() + y)); //list.add(new Point(org.getX(), org.getY() - y)); // 改为 list.add(new Point(org.getX(), org.getY() + y)); if(y!=0) { list.add(new Point(org.getX(), org.getY() - y)); } JTextPane怎么设置文本行距 java unicode的问题 请问谁有Merge.java 就是jmf提供的例子 telnet localhost 1433 时,连接失败该怎样解决??? jxl 中文乱码问题 dwr为什么不能调用方法 希望各位帮忙一下..搞了半天了..汗~~~ 谁知道这个在哪里? javax.servlet.http.HttpServletRequest 如何点一个按钮 可以关闭Dialog而不关闭Dialog的父组件? java中进行Access数据库操作时遇到的一个奇怪问题!!! 一个关于集合的笔试题 .class文件不能执行
若(x,y)在园边上
(x,y)和(x,-y)还有区间里所有的点都满足
/**
*
*/
package test;import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;/**
*
* @author - yy
* @time - Dec 9, 2008 3:44:38 PM
*/
public class Test5 {
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
List<Point> list = new Test5().genPointList(new Point(2, 1), 2);
System.out.println(list);
// 输出结果
// [(2,1)
// , (2,1)
// , (1,1)
// , (3,1)
// , (1,1)
// , (3,1)
// , (0,1)
// , (4,1)
// , (0,1)
// , (4,1)
// , (2,2)
// , (2,0)
// , (1,2)
// , (3,2)
// , (1,0)
// , (3,0)
// , (2,3)
// , (2,-1)
// ]
}
public List<Point> genPointList(Point org, int radius) throws ParseException {
List<Point> list = new ArrayList<Point>();
for (int y = 0; y <= radius; y++) { // 从一个轴的计算
int maxRelativeX = (int) Math.sqrt(radius * radius - y * y);
list.add(new Point(org.getX(), org.getY() + y));
list.add(new Point(org.getX(), org.getY() - y));
for (int i = 1; i <= maxRelativeX; i++) {
list.add(new Point(org.getX() - i, org.getY() + y)); // 四个方位都合适
list.add(new Point(org.getX() + i, org.getY() + y));
list.add(new Point(org.getX() - i, org.getY() - y));
list.add(new Point(org.getX() + i, org.getY() - y));
}
}
return list;
}
}class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return this.y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() { // AutoGenerate
StringBuilder sb = new StringBuilder();
sb.append("(").append(this.x);
sb.append(",").append(this.y);
sb.append(")\n");
return sb.toString();
}
}
/**
* 计算满足条件的所有点
* @param org - 圆点(x0,y0)
* @param radius - 半径
* @return
*/
public List<Point> genPointList(Point org, int radius)
// 将genPointList中的以下两句注释掉
//list.add(new Point(org.getX(), org.getY() + y));
//list.add(new Point(org.getX(), org.getY() - y)); // 改为
list.add(new Point(org.getX(), org.getY() + y));
if(y!=0) {
list.add(new Point(org.getX(), org.getY() - y));
}