我在另外两点之间的线上有一个标签点。从行的第一个点开始说它的20个像素。
现在我想移动线的第一个点,带上标签点,所以我移动第一个点并将线重新绘制到线的最后一个点。 工作正常,但我如何将标签移动到新线,从左侧再次放入20px。
(长度20px随变量而变化,具体取决于用户将标签放在线上的位置)。
我在考虑使用Y = kx + m但是不能正确...
这是我到目前为止所写的:
-(double)positionOfLabel{
//return relative position of label on old line, relatively the first point.
return [self length]- sqrt(self.label.center.x*self.label.center.x+self.label.center.y*self.label.center.y);
//return [self length]-sqrt((self.last.x - self.label.center.x)*(self.last.x - self.label.center.x) + (self.last.y - self.label.center.y)*(self.last.y - self.label.center.y));
}
-(void)labelTranslate:(double)length{
NSLog(@"Translating label length:%f", [self length]);
double m= (self.last.y-self.first.y)/(self.last.x-self.first.x);
double x= self.first.x+length/(sqrt(1+m*m));
double y= x*m;
NSLog(@"Moving label to:%f,%f", x,y);
[self.label setCenter:CGPointMake(x, y)];
}
标签的位置是指返回标签放置的第一个点的距离。
线的移动示例,因此线的末端有两个点 image
正如您在图像中看到的,箭头表示由第一个和最后一个点组成的线。在箭头的移动/平移期间保留红点和第一点之间的距离。然而,这不能使用我的算法
答案 0 :(得分:1)
使用Y = kx + m形式不是一个好主意(因为垂直线),所以建议采用参数形式:
Norm = Sqrt((X2-X1)*(X2-X1) + (Y2-Y1)*(Y2-Y1)) // check for 0
Dir_X = (X2 - X1) / Norm
Dir_Y = (Y2 - Y1) / Norm
Label_X = X1 + 20 * Dir_X
Label_Y = Y1 + 20 * Dir_Y
答案 1 :(得分:0)
线方程是解决方案之一,但我找到了另一个很好的例子。 Please check this link