2012-03-26 58 views
7

Cách lấy tọa độ của một điểm trong hệ tọa độ khi tất cả tôi có là toạ độ gốc (x, y) và góc từ gốc đến điểm và khoảng cách từ điểm gốc đến điểm?Cách lấy toạ độ của một điểm trong hệ tọa độ dựa trên góc và khoảng cách

+0

Nghe giống như câu hỏi toán học (đại số), hơn là câu hỏi về tính toán. Bạn có biết các công thức cần thiết để tính điểm mới không? –

+4

http://mathworld.wolfram.com/PolarCoordinates.html hoặc http://en.wikipedia.org/wiki/Polar_coordinate_system –

+0

Phụ thuộc vào loại hệ tọa độ, nhưng phần lớn thời gian sử dụng các hàm lượng giác đơn giản được gọi là sin(), cos(). – hovanessyan

Trả lời

22

Bạn sử dụng Math.cos, Math.sin như thế này:

pointX = x + distance * Math.cos(angle) 
pointY = y + distance * Math.sin(angle) 

Lưu ý rằng Math.cosMath.sin giả lập luận được đưa ra trong radian. Nếu bạn có góc theo độ, bạn sẽ sử dụng ví dụ Math.cos(Math.toRadians(angle)).

+2

+1: Vì nó thực sự sử dụng chức năng Java, mà câu trả lời của tôi không :) –

+0

+1 cho một câu trả lời hoàn chỉnh ... Đó là những gì kinh nghiệm là !!! – aProgrammer

+0

Làm thế nào điều này có thể được sửa đổi cho một hệ thống 3D? – helion3

2
px = x + r * cos(phi) 
py = y + r * sin(phi) 

nơi [px py] là điểm bạn đang tìm kiếm, [x y] là "nguồn gốc", r là khoảng cách và phi là góc với mục tiêu từ nguồn gốc.

EDIT: http://en.wikipedia.org/wiki/Polar_coordinate_system Liên kết này được Bart Kiers đăng tải một cách hữu ích có thể mang lại một số thông tin cơ bản.

3

Nếu d là khoảng cách và A là góc, so với coordnates của điểm sẽ

(x + d * Cos (A), y + d * Sin (A))

+0

Điều này là sai vì nó không đưa vào tài khoản mà điểm được bù đắp một số điểm tùy ý khác (x, y). –

+0

@kigurai; Cảm ơn bạn đã trỏ nó. Đã chỉnh sửa mã. Đó là trong tâm trí của tôi trong khi gõ Tôi không biết làm thế nào tôi bị mất nó ... Dù sao một lần nữa cảm ơn ... – aProgrammer

3

Nếu r là khoảng cách từ nguồn gốc và a là góc (theo radian) giữa trục x và điểm bạn có thể dễ dàng tính toán các tọa độ với một chuyển đổi từ tọa độ cực:

x = r*cos(a) 
y = r*sin(a) 

(điều này giả định nguồn gốc đó được đặt tại (0,0), nếu không bạn nên thêm dịch chuyển vào kết quả cuối cùng).

Kết quả nghịch đảo được thực hiện bằng cách tính toán modulo của vec-tơ (vì khoảng cách + góc làm cho vec-tơ) và arctang, có thể được tính bằng cách sử dụng hàm atan2.

r = sqrt(x*2+y*2) 
a = atan2(y,x) 
Các vấn đề liên quan