2011-01-04 78 views
6

Hi Tôi đã tự hỏi liệu có cách nào hiệu quả để tính toạ độ điểm (khoảng cách di chuyển d từ vị trí ban đầu của nó) hay không.C# - cách di chuyển điểm một khoảng cách nhất định d (và nhận tọa độ mới)

Giả sử tôi có điểm P (0,3,0,5) và tôi cần di chuyển hướng ngẫu nhiên điểm đó với khoảng cách d.

Cho đến nay tôi đã làm điều đó bằng cách chọn ngẫu nhiên các toạ độ x và y mới và tôi đã kiểm tra xem khoảng cách giữa điểm cũ và điểm mới bằng d. Tôi nhận ra rằng đó không phải là cách quá eficient để làm điều đó. Bạn sẽ làm như thế nào ??

+0

Ý anh là gì bởi Nó có vẻ như bạn có thể sử dụng một số trig để tìm tọa độ mới cho một khoảng cách và một góc? – n8wrl

Trả lời

17

Cho một điểm (x1, y1), chúng tôi muốn tìm một điểm "ngẫu nhiên" (x2, y2) ở khoảng cách d từ đó.

Chọn một góc ngẫu nhiên theta. Sau đó:

x2 = x1 + d * cos(theta) 
y2 = y1 + d * sin(theta) 

Đây sẽ là một điểm ngẫu nhiên trên một vòng tròn bán kính d tập trung ở (x1, y1)

Proof:

Distance between (x1, y1) and (x2, y2) 
= sqrt ((x2 - x1)^2 + (y2 - y1)^2) 
= sqrt (d^2 * (sin^2 (theta) + cos^2 (theta))) 
= d 

Bạn có thể muốn xem xét:

0

Nếu không có hạn chế như trong đó chỉ đạo điểm là để di chuyển, cách dễ nhất là để di chuyển nó cùng chỉ có một trục. Vì vậy, nếu bạn phải di chuyển điểm bằng khoảng cách 1 đơn vị, điểm P của bạn (0,3,0,5), có thể đơn giản trở thành một trong những điều sau đây: P (1,3,0,5) hoặc P (0,3 0,P (0,3) , 1.5)

8

Công thức liên quan đến các chức năng cơ bản.

new_x = old_x + Math.cos(angle) * distance; 
new_y = old_y + Math.sin(angle) * distance; 

Nhân tiện, góc phải bằng radian.

radians = degrees * Math.PI/180.0; 
0

Bạn cần phải giải quyết phương trình đơn giản: '? Hướng ngẫu nhiên'

double dx_square = rand.NextDouble(d); 
double dy_square = d - dx_square; 
double dx = Math.Sqrt(dx_square); 
double dy = Math.Sqrt(dy_square); 
Các vấn đề liên quan