X Y
-176.3501 -52.60973
-115.5118 -52.9807差别不多是一条Y坐标不变,X坐标右移的直线,
想得好的结果如下:
X
-176.3501
-175.3501
-174.3501
-173.3501
.........
-115.5118也是是说每次坐标-1x y
-175.9791 -52.60973
-5.335123 -54.46456
-5.706088 -42.59367直线类似如下:
|
|
----------------------------该如何处理呢?
-176.3501 -52.60973
-115.5118 -52.9807差别不多是一条Y坐标不变,X坐标右移的直线,
想得好的结果如下:
X
-176.3501
-175.3501
-174.3501
-173.3501
.........
-115.5118也是是说每次坐标-1x y
-175.9791 -52.60973
-5.335123 -54.46456
-5.706088 -42.59367直线类似如下:
|
|
----------------------------该如何处理呢?
算法:任意两点间之间,先经过X横向移动,再经过Y纵向移动。
1. 确定你的坐标移动的粒度,根据你的描述应该是1(step),也就是说每次最小移动1个粒度(最后一步排除,小于1的计1);
2. 先计算X横向移动经过的点;int((X2-X1)/step) + (X2-X1)=0?0:1计算出横向移动的步数
3. 再计算Y纵向移动经过的点;int((Y2-Y1)/step) + (Y2-Y1)=0?0:1计算出纵向移动的步数这样,就很空间得知所经过的坐标。当然你也可以通过循环计算得到。注意,计算时符点数的运算要考虑精度。
2点可以确定一条直线,也就是说可以用你2点坐标求出直线方程,然后用方程可以求出任意的X,Y了啊...这个高中还是初中的了.我回忆下,利用斜率相等求直线方程
(x-(-176.3501))/(y-(-115.5118))=(x-(-52.60973))/(y-(-52.9807))
应该是这样,我也很久没碰几何了,错了莫喷,思路是这样
int((X2-X1)/step)
这样不就可以算出来移动的步数?
为什么还是+(X2-X1)?int((X2-X1)/step) + (X2-X1)=0?0:1
这个结果不是1就是0,有什么用处呢?
X
-176.3501
-175.3501
-174.3501
-173.3501
.........
-115.5118 -176.3501 -> ..... -> 115.3501 -> -115.5118
看最后一步,115.3501不是最终目标,还需要再移动到115.5118,这应该也需要一步的。当然你可以根据你的要求,可以不计算这一步。
(int((X2-X1)/step)) + ((X2-X1)=0?0:1 )
float x1 = -176.3501f;
float x2 = -115.5118f;
float y1 = -52.60973f;
float y2 = -52.9807f;
int step = 2;
int x = ((int) (x2 - x1)) / step + ((int) (x2 - x1)) < 1 ? 0 : 1;
System.out.println(x);
int y = ((int) (y2 - y1)) / step + ((int) (y2 - y1)) < 1 ? 0 : 1;
System.out.println(y);
}
得到的x,y有什么用呢?
y=((y1-y2)/ (x1 - x2)) * x + (x2 * y1 - x1 * y2) / (x2 -x1)
Systemp.out.print("["+ (x1+i*step) +"," + y1 +"]")
)
if ((x2 - x1)==0) {
Systemp.out.print("["+ (x2) +"," + y1 +"]")
}
for( int i=0; i<y; i++){
Systemp.out.print("["+ x2 +"," + (y1+step*i) +"]")
)
if ((y2 - y1)==0) {
Systemp.out.print("["+ x2 +"," + y2 +"]")
}