2015-10-11 2 views
1

Горе со мной, поскольку я пытаюсь запрограммировать формулу для вычисления нового угла при рисовании дуги. Возможно, было бы лучше, если бы я объяснил это картиной.Поиск формулы для рисования дуги после перемещения начальной точки

Picture of question

Выше картина того, что я рисую на Google Earth.

В настоящее время у меня есть функция, которая рисует дугу задана (х, у) точки опоры, подшипник и расстояние от радиуса

После нанесения этой дуги (которая является самой дальней дугой от начала координат) на сюжет, мне нужно переместить точку начала, например. Если подшипник составлял 170 градусов, левая линия начиналась с 170-90, а правая - на 170 + 90

У меня возникли проблемы с поиском формулы для угла (или подшипника), который находится в меньших концентрических кругах , Я хотел бы поблагодарить всех за любую помощь, которую вы можете предоставить.

Вот моя формула для вычисления и рисования дуги

def drawArc(lat1,lon1,lbearing,rbearing,hr): #draw Arc given lat/lon piviot point with the right and left bearing to draw the path and distance 
    arcstr="" 
    if rbearing < lbearing: #if the left bearing is already bigger than the right bearing, switch places. Test Case not proven yet! with winds coming from the east 
     lbearing,rbearing = rbearing,lbearing 
    while lbearing < rbearing: 
     arc1,arc2 = getEndpoint(lat1,lon1,lbearing,hr) #arc1 and arc2 are lat and lon respectively 
     arcCoord = "%f,%f,0\n"%(arc2,arc1) 
     arcstr+=arcCoord 
     lbearing+=1 #count 
    #attach the last remaining point which is the end point at the right bearing 
    arc1,arc2 = getEndpoint(lat1,lon1,rbearing,hr) #arc1 and arc2 are lat and lon respectively 
    arcCoord = "%f,%f,0\n"%(arc2,arc1) 
    arcstr+=arcCoord 
    return arcstr 

Чтобы нарисовать три Дуги, вот где функция называется:

arc3=drawArc(latitude,longitude,leBearing,reBearing,arc3hr) 
arc2=drawArc(latitude,longitude,leBearing-(SOME FORMULA TO GIVE ME THE EXTRA ANGLE/BEARING TO INTERSECT WITH THE OUTER LINE),reBearing+(SAME FORMULA HERE),arc2hr) 
arc1=drawArc(latitude,longitude,leBearing-(SOME FORMULA TO GIVE ME THE EXTRA ANGLE/BEARING TO INTERSECT WITH THE OUTER LINE),reBearing+(SAME FORMULA HERE),arc1hr) 

известных точки на этой картинке:

  1. Происхождение точки в lat/lon

  2. азимут и расстояние каждой линии

  3. Радиус внутреннего круга на нуле 10 NM и внешний круг 20нм

Вот упрощенная картина, я считаю, угол тета является то, что я ищу

simplified

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что это не проблема программирования – jonrsharpe

ответ

1

Вот необходимая геометрия, предполагая, что я истолковал ваше описание и изображение правильно. Изображение ниже (и linked) показывает ваше изображение с переменными, которые нам нужно решить для theta.

picture

Теперь математика. Это использует закон sines/cosines.

Закон косинусов дает нам:

Таким образом, мы должны решить для ч, г и е, а затем взять обратный косинус результата получить тета.

И по закону синусов ...

Мы можем решить для немедленно косинусов:

Чтобы найти длины отрезков x_1 и x_2, нам нужны углы theta_1,2,3 .. .

Используя эти углы и более закон синусов дает нам x_1 и X_2 ...

Положите все это вместе, и вы получите

Просто этого беспорядка после подстановки правильного значения для , который зависит от вашего выбора г (или DIST). Я не буду писать здесь.

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