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
Trả lời
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 ý.
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!
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
theo lý thuyết có. tuy nhiên, drawArc() có tham số int. – botismarius
Điều này hoạt động hoàn hảo trong C# cho tôi..Cảm ơn! – Abhishek
Đâ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
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