2012-11-19 31 views
5

Tôi đang cố gắng cho phép người dùng vẽ hình tam giác. Tôi nhận được điểm bắt đầu và điểm kết thúc và sử dụng công thức để tìm điểm thứ ba của tam giác đều để tạo tam giác nhưng dường như nó không có ý tưởng làm sao tôi có thể làm điều này? Có thể sử dụng một vòng tròn nhưng tôi không biết làm thế nào để đi về điều đó. Đây là mã hiện tại của tôi.Vẽ hình tam giác

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

Vì vậy, vấn đề là nó không vẽ bất cứ điều gì hay mà nó vẽ một hình sai? 'Kích thước' là gì? Cuộc gọi vẽ của bạn ở đâu? –

+0

nó vẽ một hình tam giác nhưng nó không phải là thứ tôi vẽ .. nó có một số thay đổi khi tôi để nó đi – JProg

Trả lời

9

này nên làm việc để tính điểm thứ ba của một tam giác đều:

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

khi tôi vẽ một hình tam giác bây giờ nó hoạt động tốt, nhưng khi tôi cố vẽ một hình tam giác khác chồng lên nhau các dòng bị cắt và biến mất khỏi màn hình – JProg

+0

@JProg: Bạn nên sử dụng 'closePath' thay vì' addLineToPoint' cuối cùng, tôi đã thêm mã đó vào câu trả lời của tôi. - Nếu không, tôi không có ý tưởng, rất khó để nói mà không có một ảnh chụp màn hình thể hiện vấn đề (và có lẽ nhiều hơn mã của bạn). –

+0

đây là liên kết đến màn hình in, tôi thực sự đánh giá cao sự trợ giúp của bạn! bất kỳ ý tưởng nào có thể gây ra http://postimage.org/image/o7uxeoipb/ – JProg