您的位置:首页 > 其它

swing 两点之间直线上的任意距离点的坐标

2009-12-31 15:11 549 查看
 



 
/**
* 通过坐标上的两个点得一个路径点组
* @param p1
* @param p2
* @return
*/
public static List<Point> parsePath(Point p1,Point p2,int size){
List<Point> list=new ArrayList<Point>();

int x1=p1.x,y1=p1.y,x2=p2.x,y2=p2.y;
double l=Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2)); //距离
if(l==0){
for(int i=0;i<size-2;i++){
list.add(p1);
}
return list;
}
double t1=x2-x1;
double t2=y2-y1;
double a=Math.atan(t1/t2);
if(x2-x1>0 && y2-y1>0){
System.out.println("一象限");
}else if(x2-x1<0 && y2-y1>0){
System.out.println("二象限");
}else if(x2-x1<0 && y2-y1<0){
System.out.println("三象限");
a=Math.PI+a;
}else if(x2-x1>0 && y2-y1<0){
System.out.println("四象限");
a=Math.PI+a;
}else if(y2==y1 && x2>x1){
System.out.println("正常水平线");
}else if(y2==y1 && x2<x1){
a=Math.PI+Math.PI/2;
System.out.println("反正常水平线");
}else if(x1==x2 && y2>y1){
System.out.println("正常垂直线");
}else if(x1==x2 && y2<y1){
a=Math.PI;
System.out.println("反正常垂直线");
}
//计算得到一个
double splitLen=l/size;
double x=0,y=0;
//int size=(int)(l/splitLen);

//list.add(p1);
int len=0;
for(int i=0;i<size;i++){

//			if(i==0 || i>=size-1){
//				continue;
//			}
len+=splitLen;
x=x1+len*Math.sin(a);
y=y1+len*Math.cos(a);
list.add(new Point((int)x,(int)y));
}
//list.add(p2);
System.out.println("点数:"+((l/splitLen)+2));
return list;
}

 
以上代码都是自己理解的。不知道有没有理解错误。实际运行结果是没有错的。。更新了前几天的文章的错误
数学知识

arctan((Xb-Xa)/(Yb-Ya)),方位角求算公式

Xp=Xa+AP*sin(α),α-A的意思是AP的方位角
Yp=Ya+AP*cos(α)

 
http://bbs6.zhulong.com/forum/detail6618591_1.html
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swing list xp
相关文章推荐