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)];


}

标签的位置意味着返回标签放置的第一个点的距离。

线条移动示例,因此线条图像末端的两个点

正如您在图像中看到的,箭头表示由第一个点和最后一个点组成的线。红点和第一个点之间的距离在箭头的移动/平移过程中被保留。但是,这不适用于我的算法

4

1 回答 1

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
于 2012-10-24T11:18:51.170 回答