【问题标题】:Drawing a triangle画一个三角形
【发布时间】:2012-11-19 21:11:09
【问题描述】:

我试图让用户绘制一个三角形。我得到了起点和终点,并使用公式找到等边三角形的第三个点来创建三角形,但它似乎没有任何想法我怎么能做到这一点?也许使用一个圆圈,但我不知道该怎么做。这是我当前的代码。

NSValue *point = [_path objectAtIndex:0];
CGPoint startPoint = point.CGPointValue;

point = [_path lastObject];
CGPoint endPoint = point.CGPointValue;

 CGPoint thirdPoint = CGPointMake(((startPoint.x+endPoint.x)/2), (((startPoint.x-endPoint.x)/2)*(tan(60))+1));
 UIBezierPath *triangle = [UIBezierPath bezierPath];
 [triangle moveToPoint:startPoint];
 [triangle addLineToPoint:endPoint];
 [triangle addLineToPoint:thirdPoint];
 [triangle addLineToPoint:startPoint];
 triangle.lineWidth=size;

【问题讨论】:

  • 所以问题是它没有绘制任何东西或者它绘制了错误的形状? size 是什么?你的draw call在哪里?
  • 它画了一个三角形,但不是我画的那个......当我放开它时它会发生某种转变

标签: objective-c ios ipad uibezierpath cgpoint


【解决方案1】:

这应该可以计算等边三角形的第三个点:

CGPoint startPoint = ..., endPoint = ...;

CGFloat angle = M_PI/3; // 60 degrees in radians
// v1 = vector from startPoint to endPoint:
CGPoint v1 = CGPointMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y);
// v2 = v1 rotated by 60 degrees:
CGPoint v2 = CGPointMake(cosf(angle) * v1.x - sinf(angle) * v1.y,
                         sinf(angle) * v1.x + cosf(angle) * v1.y);
// thirdPoint = startPoint + v2:
CGPoint thirdPoint = CGPointMake(startPoint.x + v2.x, startPoint.y + v2.y);

UIBezierPath *triangle = [UIBezierPath bezierPath];
[triangle moveToPoint:startPoint];
[triangle addLineToPoint:endPoint];
[triangle addLineToPoint:thirdPoint];
[triangle closePath];
// ...

【讨论】:

  • 当我现在绘制一个三角形时它工作正常,但是当我尝试绘制另一个与前一个重叠的三角形时,一些线条会被切断并从屏幕上消失
  • @JProg:您应该使用closePath 而不是最后一个addLineToPoint,我已将该代码添加到我的答案中。 - 否则我不知道,如果没有显示问题的屏幕截图(可能还有更多代码),很难说。
  • 这是一个打印屏幕的链接,非常感谢您的帮助!知道是什么导致了这个postimage.org/image/o7uxeoipb
  • @JProg:似乎“破碎”的三角形被一些矩形剪裁了。也许绘图仅限于某些子视图?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
  • 2022-11-15
  • 1970-01-01
  • 2015-08-12
相关资源
最近更新 更多