2010-11-16 68 views
12

Tôi có hai điểm tròn và trung tâm của vòng tròn này. Tôi muốn vẽ một vòng cung giữa các điểm này. Phương pháp drawArc là đơn giản và không phù hợp với mục đích của tôi. Có ai giúp không?Vẽ vòng cung với 2 điểm và giữa vòng tròn

+0

Đây có phải là bài tập về nhà không? Nếu có, vui lòng gắn thẻ như vậy. – javamonkey79

+0

Tôi biết rằng có các chức năng mạnh mẽ để vẽ Arc, nhưng tôi không thể fint phù hợp – CarolusPl

Trả lời

2

Graphics.drawArc hy vọng các thông số sau:

  • x
  • y
  • rộng
  • chiều cao
  • startAngle
  • arcAngle

Với điểm bắt đầu và điểm kết thúc của bạn, bạn có thể tính toán một hộp giới hạn nơi hình cung sẽ được vẽ. Điều này cung cấp cho bạn đủ thông tin để cung cấp các thông số: x, y, chiều rộng và chiều cao.

Bạn chưa chỉ định góc mong muốn để tôi đoán bạn có thể chọn một tùy ý.

21

Bạn có thể sử dụng Canvas.drawArc, nhưng bạn phải tính toán các tham số cần thiết:

Cho phép nói rằng trung tâm của vòng tròn là (x0, y0) và rằng arc chứa hai điểm của bạn (x1, y1) và (x2, y2). Khi đó bán kính là: r = sqrt ((x1-x0) (x1-x0) + (y1-y0) (y1-y0)). Vì vậy:

int r = (int)Math.sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); 
int x = x0-r; 
int y = y0-r; 
int width = 2*r; 
int height = 2*r; 
int startAngle = (int) (180/Math.PI*atan2(y1-y0, x1-x0)); 
int endAngle = (int) (180/Math.PI*atan2(y2-y0, x2-x0)); 
canvas.drawArc(x, y, width, height, startAngle, endAngle); 

Chúc may mắn!

+0

FYI: Mã này sẽ hoạt động tốt hơn một chút nếu bạn sử dụng 'float' thay vì' int' variables. PI = 3.14, Square Roots, vv Bạn có thể tạo nhiều số 0 nếu bạn gắn bó với các kiểu 'int'. – jp2code

+4

theo lý thuyết có. tuy nhiên, drawArc() có tham số int. – botismarius

+0

Điều này hoạt động hoàn hảo trong C# cho tôi..Cảm ơn! – Abhishek

Các vấn đề liên quan