2014-01-24 40 views
0

我有一種情況,用戶將在屏幕上點擊並輸入度數,並且應該從給定度數中的抽頭點繪製一條線。在ios中的視圖上畫出一條直線給定點和度數?

我正在使用下面的路徑代碼來繪製線,但我不能以正確的程度繪製線。

CGMutablePathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path,NULL,touchx,touchy); 
CGPathAddLineToPoint(path, NULL,endX, endY); 
lineLayer = [CAShapeLayer layer]; 
[lineLayer setPath:path]; 
[lineLayer setFillColor:[[UIColor lightTextColor] CGColor]]; 
[lineLayer setStrokeColor:[[UIColor blackColor] CGColor]]; 
[lineLayer setAnchorPoint:CGPointMake(0.0f, 0.0f)]; 
[lineLayer setPosition:CGPointMake(0.0f, 0.0f)]; 
[drawingview.layer addSublayer:lineLayer]; 
CGPathRelease(path); 

回答

1

您發佈的代碼創建的路徑有一個起點和終點,但沒有發佈最重要的位:您如何計算終點。

我認爲這是您需要幫助的部分。

您需要使用基本的三角法。 iOS上的觸發是基於弧度,所以你需要將度轉換爲弧度:

CGFloat radians = M_PI * degrees/180.0; 

然後,你需要根據你的起點來計算你的終點。請記住印度酋長「SOH CAH TOA」(正弦=相反/斜邊,餘弦=相鄰/斜邊,切線=相反/相鄰)的助記符。

繪圖與所討論的左右側的角度和直角的直角三角形的圖:

enter image description here

X測量是相鄰側。因此,如果餘弦=相鄰/斜邊,則相鄰= cos *斜邊。

三角形的斜邊是圓的半徑。替換變量:

x = cos(angle) * radius 

y測量是相反的一面。

如果正弦=相反/斜邊,則相反=正弦*斜邊。

三角形的斜邊是圓的半徑。更換變量:

y = sin(angle) * radius 

所以,你的代碼來計算的終點可能是這樣的:

CGFloat radius = 50; //Picked out of thin air; decide on a radius value 

CGFloat deltaX = radius * cosf(radians); 
CGFloat deltaY = radius * sinf(radians); 

endX = touchX+deltaX; 
endy = touchY+deltaY; 
相關問題