使用斜率和起点找出坐标
Find out the coordinates using slope and start point
我正在尝试完成一项任务,即在从 user.So 获取长度输入后调整线的大小我目前拥有的是旧长度,旧点(P1,P2)并且必须找到新的 P2从 user.I 获取新的长度后,我在这里粘贴代码,我尝试使用斜率调整线的大小但它不是 working.I 在 canvas 部分是全新的任何类型的搜索提示也将是appreciable.Thanks提前。
求之前点之间夹角的方法:
public double calculateAngle(){
if(selectedShape!=null){
InnWall shape = (InnWall)selectedShape;
if(shape!=null)
return calAngle(shape.y2-shape.y1, shape.x2-shape.x1);
}
return -1;
}
求坐标的方法
public void calCoordinates(double length){
InnWall shape = (InnWall)selectedShape;
if(shape!=null){
double angle = calculateAngle();
Log.e(TAG, "cal angle"+(int)calculateAngle());
Log.e(TAG, "cal length"+(int)length);
Log.e(TAG, "x coodinatee"+shape.x1+length*Math.cos(angle));
Log.e(TAG, "y coodinatee"+shape.y1+length*Math.sin(angle));
shape.x2=(float)(shape.x1+length*Math.cos(angle));
shape.y2=(float)(shape.y1+length*Math.sin(angle));
}
private double calAngle(double dy,double dx){
return double compassBearing=dy/dx;
}
double scale = old_length/new_length;
dx = p2.x - p1.x
dy = p2.y - p1.y
你知道:
- scale_x^2 + scale_y^2 = scale^2
- scale_x/scale_y = dx/dy
因此:
scale_y = sqrt(scale * scale * dy *dy/(dx*dx + dy*dy));
scale_x = scale_y*dx/dy;
如果相对点是P1
然后
p2.x += (p2.x-p1.x) * scale_x
p2.y += (p2.y-p1.y) * scale_y
理论上,为了进行缩放,您需要将点与缩放矩阵相乘,在您的情况下该矩阵是 2D。
[ 1 0 dx ] [ p1.x ] [ p2.x ]
[ 0 1 dy ] [ p1.y ] = [ p2.y ]
[ 0 0 1 ] [ 1 ] [ 1 ]
我正在尝试完成一项任务,即在从 user.So 获取长度输入后调整线的大小我目前拥有的是旧长度,旧点(P1,P2)并且必须找到新的 P2从 user.I 获取新的长度后,我在这里粘贴代码,我尝试使用斜率调整线的大小但它不是 working.I 在 canvas 部分是全新的任何类型的搜索提示也将是appreciable.Thanks提前。
求之前点之间夹角的方法:
public double calculateAngle(){
if(selectedShape!=null){
InnWall shape = (InnWall)selectedShape;
if(shape!=null)
return calAngle(shape.y2-shape.y1, shape.x2-shape.x1);
}
return -1;
}
求坐标的方法
public void calCoordinates(double length){
InnWall shape = (InnWall)selectedShape;
if(shape!=null){
double angle = calculateAngle();
Log.e(TAG, "cal angle"+(int)calculateAngle());
Log.e(TAG, "cal length"+(int)length);
Log.e(TAG, "x coodinatee"+shape.x1+length*Math.cos(angle));
Log.e(TAG, "y coodinatee"+shape.y1+length*Math.sin(angle));
shape.x2=(float)(shape.x1+length*Math.cos(angle));
shape.y2=(float)(shape.y1+length*Math.sin(angle));
}
private double calAngle(double dy,double dx){
return double compassBearing=dy/dx;
}
double scale = old_length/new_length;
dx = p2.x - p1.x
dy = p2.y - p1.y
你知道:
- scale_x^2 + scale_y^2 = scale^2
- scale_x/scale_y = dx/dy
因此:
scale_y = sqrt(scale * scale * dy *dy/(dx*dx + dy*dy));
scale_x = scale_y*dx/dy;
如果相对点是P1 然后 p2.x += (p2.x-p1.x) * scale_x p2.y += (p2.y-p1.y) * scale_y
理论上,为了进行缩放,您需要将点与缩放矩阵相乘,在您的情况下该矩阵是 2D。
[ 1 0 dx ] [ p1.x ] [ p2.x ]
[ 0 1 dy ] [ p1.y ] = [ p2.y ]
[ 0 0 1 ] [ 1 ] [ 1 ]