我正在尝试实现一个任务,即在从用户那里获取长度输入之后调整线的大小。所以我目前所拥有的是旧长度,旧点(P1,P2)并且在获取新长度之后必须找到新的P2来自user.I我在这里粘贴代码,我试图使用斜率调整行,但它不起作用。我在画布部分是全新的任何类型的搜索提示也将是可感知的。谢谢提前。
查找先前点之间角度的方法:
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;
}
答案 0 :(得分:1)
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 ]