2012-10-24 52 views
1

我在两条其他点之间的线上有一个标签点。从该线的第一个点开始说出它的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

正如你可以在图像中看到的端部因此两个点的线的运动,以及

实施例中,箭头表示由第一和最后一个点的一条线。在箭头的移动/平移期间保留红点和第一点之间的距离。但是,这是不工作使用我的算法

回答

1

使用Y = KX + M的形式是不是一个好主意(因为垂直线),所以建议参数形式:

enter image description here

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 
+0

确实' - (double)positionOfLabel'看起来正确吗? –

+0

不确定,因为(self.label.center.x)是一些相对于??????的位置 – MBo

+0

它相对于你的漂亮图中的点1的原点:) –

相关问题