2017-01-01 10 views
0

Есть ли способ генерировать случайные местоположения вблизи центра карты в пределах определенного радиуса в моей форме? я могу получить центр карты со следующей строкой:C#: Как создать случайные местоположения вблизи центра карты в GMap.NET?

 var center = gMapControl2.Position; 

Я сделал некоторые исследования и наткнулся на this пост, но это в Java.

ответ

1

Предположим, что центр (x0, y0) и мы ищем случайное местоположение (x, y) с максимальным расстоянием maxDist от центра. Мы знаем, что

(x-x0)*(x-x0) + (y-y0)+(y-y0) <= maxDist *maxDist 

Итак, сначала мы находим случайное значение х в соответствующем расстоянии, то найти случайное значение у:

int x = random.Next(-1* maxDist, maxDist); 
    int maxY =(int) Math.Floor(Math.Sqrt(maxDist * maxDist - x * x)); 
    int y = random.Next(-1*maxY, maxY); 
    y += y0; 
    x += x0; 
2

Генерирует случайное число для R между Rmax и Rmin. Создайте другое число для theta между 0 и 360. Теперь используйте базовую тригонометрию для преобразования в (x, y).

Этот подход кажется мне наиболее интуитивным, потому что проблема, как заявлено, принципиально радиально-симметрична. Он также дает вам (R, Theta) для любых других вычислений, которые вы можете захотеть сделать.

 Смежные вопросы

  • Нет связанных вопросов^_^