2012-10-24 112 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的原點:) –

相關問題