2012-11-19 244 views
5

进出口试图以允许用户绘制三角形形状。我得到的起点和终点,用公式找到一个等边三角形的第三点形成三角形,但似乎并不奏效任何想法我怎么能做到这一点?也许使用一个圈子,但我不知道如何去做。这是我目前的代码。绘制三角形

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; 
+0

所以问题是,它不画任何东西,或者它的绘制错误的形状?什么是“尺寸”?你的平局在哪里? –

+0

它绘制一个三角形,但它不是一个我画..它某种转变时,我让他走 – JProg

回答

9

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

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]; 
// ... 
+0

当我画一个三角形,现在它工作正常,但是当我尝试画另一个三角形重叠的前一个部分的行被切断并从屏幕上消失 – JProg

+0

@JProg:您应该使用'closePath'而不是最后一个'addLineToPoint',我已经将该代码添加到我的答案中。 - 否则我不知道,很难不带屏幕截图,展示的问题(也许还有更多你的代码中)说。 –

+0

这是一个打印窗口的链接,我真的很感激您的帮助!任何想法可能是造成这个http://postimage.org/image/o7uxeoipb/ – JProg