1

他の2つのポイント間の線上にラベルポイントがあります。線の最初の点から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)];


}

ラベルの位置は、ラベルが配置された最初のポイントからどれだけ離れているかを返すことを意味します。

線の動きの例、したがって線の 画像の最後にある2つのドット

画像でわかるように、矢印は最初と最後のドットで構成される線を表します。矢印の移動/移動中、赤点と最初のドットの間の距離は保持されます。ただし、これは私のアルゴリズムを使用して機能していません

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 に答える