我有一种情况,用户将点击屏幕并输入度数,并且应该从给定度数的抽头点绘制一条线。
我使用以下路径代码绘制线条,但我无法以正确的程度绘制线条。
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);
答案 0 :(得分:2)
您发布的代码创建了一个包含起点和终点的路径,但没有发布最重要的位:您如何计算终点。
我认为这是你需要帮助的部分。
您需要使用基本的三角学。 iOS上的Trig基于弧度,因此您需要将度数转换为弧度:
CGFloat radians = M_PI * degrees / 180.0;
然后你需要根据你的起点计算你的终点。
记住印第安酋长“SOH CAH TOA”的助记符(正弦=对角/斜边,余弦=相邻/斜边,切线=对边/相邻)。
绘制一个直角三角形的图表,左边的角度和右边的角度:
X测量是相邻侧。
因此,如果余弦=邻近/斜边,则邻近= cos *斜边。
三角形的斜边是圆的半径。替换变量:
x = cos(angle) * radius
y测量是相反的一面。
如果sine = reverse / hypotenuse,则= = sine * hypotenuse。
三角形的斜边是圆的半径。替换变量:
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;