我有一种情况,用户将在屏幕上点击并输入度数,并且应在给定度数下从轻敲点绘制一条线。
我正在使用以下路径代码绘制线条,但我无法以正确的程度绘制线条。
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);
最佳答案
您发布了创建带有起点和终点的路径的代码,但没有发布最重要的一点:如何计算终点。
我认为这是您需要帮助的部分。
您需要使用基本三角函数。 iOS上的Trig基于弧度,因此您需要将度数转换为弧度:
CGFloat radians = M_PI * degrees / 180.0;
然后,您需要根据起点计算终点。
记住印度酋长“ SOH CAH TOA”的助记符(正弦=相对/斜边,余弦=相邻/斜边,切线=对面/相邻)。
绘制一个直角三角形的图,左角为正角,右角为正角:
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;