2015-02-21 18 views
10

Làm thế nào bạn sẽ tính toán độ giữa hai điểm trên cạnh của một vòng tròn trong Swift.tính góc giữa hai điểm trên cạnh của vòng tròn Swift SpriteKit

enter image description here

+0

Bạn có biết chắc chắn đây là một vòng tròn? Giống như, bạn biết trung tâm của vòng tròn? Bởi vì hai điểm không phải là một vòng tròn, bởi vì một số lượng vô hạn các vòng tròn khác nhau có thể được desecribed bởi hai điểm - bạn cần một phần ba, hoặc trên vòng tròn hoặc nguồn gốc. – corsiKa

+0

tôi biết nguồn gốc cũng @corsiKa – PoKoBros

+0

Vì vậy, sau đó bạn chỉ có thể sử dụng arctan (delta y/delta x). Tôi không biết phím sprite nhanh là gì, vì vậy tôi sẽ không chắc chắn về định dạng cho mã đó. Chỉnh sửa: hầu hết các ngôn ngữ lập trình sử dụng trig đều sử dụng radian, vì vậy, đầu ra của bạn có thể bằng radian. Nếu có một hàm để chuyển đổi nó thành độ, chỉ cần sử dụng nó; nếu không, sử dụng công thức để chuyển đổi nó thành các độ là rads * 180/pi – Muhatashim

Trả lời

21

điểm cho p1, p2 trên một vòng tròn với tâm center, bạn sẽ tính toán các vectơ khác biệt đầu tiên:

let v1 = CGVector(dx: p1.x - center.x, dy: p1.y - center.y) 
let v2 = CGVector(dx: p2.x - center.x, dy: p2.y - center.y) 

Sau đó

let angle = atan2(v2.dy, v2.dx) - atan2(v1.dy, v1.dx) 

là (đạo diễn) góc giữa các vector đó trong radian và

var deg = angle * CGFloat(180.0/M_PI) 

góc theo độ. Trị giá tính toán có thể được trong khoảng -360 .. 360, vì vậy bạn có thể muốn để bình thường hóa nó vào phạm vi 0 < = DEG < 360 với

if deg < 0 { deg += 360.0 } 
+0

mã này có hoạt động trên iPad không? tất cả những gì sẽ xảy ra là vòng tròn sẽ phóng to một chút. – PoKoBros

+2

@PoKoBros: Đây chỉ là toán, nó hoạt động trên mọi thiết bị. Nó chỉ tính toán một góc, vậy ý ​​bạn là gì bởi "vòng tròn sẽ phóng to một chút"? –

+0

Tôi chỉ có nghĩa là bán kính của vòng tròn sẽ tăng gấp đôi ok một iPad – PoKoBros

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