2011-01-04 10 views
6

Witam Zastanawiam się, czy istnieje jakiś skuteczny sposób obliczania współrzędnych punktu (który został przeniesiony odległość d od jego pierwotnej lokalizacji).C# - jak przenieść punkt na daną odległość d (i uzyskać nowe współrzędne)

Załóżmy, że mam punkt P (0.3,0.5) i muszę przenieść ten punkt losowy kierunek z odległością d.

Do tej pory zrobiłem to przez losowe wybieranie nowych współrzędnych x i y i sprawdzałem, czy odległość między starym a nowym punktem jest równa d. Zdaję sobie sprawę, że nie jest to zbyt skuteczny sposób, aby to zrobić. Jak byś to zrobił?

+0

Co masz na myśli Wygląda na to, że możesz użyć jakiegoś trig, aby obliczyć nowe współrzędne z uwzględnieniem odległości i kąta? – n8wrl

Odpowiedz

17

Biorąc pod uwagę punkt (x1, y1), chcemy znaleźć "losowy" punkt (x2, y2) na odległość d od niego.

Wybierz losowy kąt theta. Następnie:

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

To będzie przypadkowy punkt na okręgu o promieniu d środku w (x1, y1)

Dowód:

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

Czasami warto spojrzeć na:

0

Jeśli nie ma ograniczenia co do kierunku, w którym chodzi o to, aby przenieść, najprostszym sposobem jest przenieść go tylko wzdłuż jednej osi.

Tak więc, jeśli musisz przesunąć punkt o 1 jednostkę, twój punkt P (0.3,0.5) może po prostu stać się jednym z następujących: P (1.3,0.5) lub P (0,3 , 1.5)

8

Formuła, która obejmuje podstawowe funkcje wyzwalania.

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

Nawiasem mówiąc, kąt powinien być w radianach.

radians = degrees * Math.PI/180.0; 
0

Trzeba rozwiązać proste równanie: „losowym kierunku”

double dx_square = rand.NextDouble(d); 
double dy_square = d - dx_square; 
double dx = Math.Sqrt(dx_square); 
double dy = Math.Sqrt(dy_square); 
Powiązane problemy