Определить точку разворота
- 
				Skywalker
- Участник
- Сообщения: 82
- Зарегистрирован: 01 май 2013, 22:38
- Репутация: 34
- Откуда: Сыктывкар
							 Определить точку разворота
						Определить точку разворота
		
													
							
						
			
			
			
			
			Коллеги, подскажите пожалуйста, каким образом можно определить подобные точки разворота (перегиба), желательно на питоне.
			
							- Вложения
- 
			
		
		
				 shp.zip shp.zip
- (43.71 КБ) 203 скачивания
 
- 
			
		
				- points.jpg (72.53 КБ) 2266 просмотров
 
- 
				gamm
- Гуру
- Сообщения: 4177
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Определить точку разворота
Посчитать угол между последовательными сегментами. В простейшем случае - знак скалярного произведения, чтобы определить угол тупой или острый. Можно даже в Ёкселе.
			
			
									
						
										
						- 
				gamm
- Гуру
- Сообщения: 4177
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Определить точку разворота
если дрон дрыгается, то для повышения устойчивости может понадобится экспоненциальное сглаживание векторов (или просто сравнение среднего из 5-7 векторов до анализируемой точки, и столько же после).
			
			
									
						
										
						- 
				Skywalker
- Участник
- Сообщения: 82
- Зарегистрирован: 01 май 2013, 22:38
- Репутация: 34
- Откуда: Сыктывкар
Re: Определить точку разворота
gamm, дрон действительно дрыгается.
Выкладываю работающий в моём случае способ, может быть кому-нибудь пригодится при решении сходных задач. Исходные данные читаются из файла coord.xlsx. Использовал алгоритм Рамера–Дугласа–Пекера и вычисление разницы азимутов между двумя отрезками.
			
							Выкладываю работающий в моём случае способ, может быть кому-нибудь пригодится при решении сходных задач. Исходные данные читаются из файла coord.xlsx. Использовал алгоритм Рамера–Дугласа–Пекера и вычисление разницы азимутов между двумя отрезками.
Код: Выделить всё
import pyproj
from rdp import rdp
from openpyxl import load_workbook
xlssourse = 'coord.xlsx'
wbsource = load_workbook(xlssourse)
sheetsource = wbsource['Лист1']
PointList = []
geodesic = pyproj.Geod(ellps='WGS84')
row = 2
fileId = sheetsource.cell(column=1, row=row).value
while fileId is not None:
    long = sheetsource.cell(column=1, row=row).value
    lat = sheetsource.cell(column=2, row=row).value
    if (type(long) == float) and (type(lat) == float):
        if [long, lat] not in PointList:
            PointList.append([long, lat])
    row += 1
    fileId = sheetsource.cell(column=1, row=row).value
PointListRdp = rdp(PointList, epsilon=0.0000005)
row = 1
for element in PointListRdp:
    pntOneX = element[0]
    pntOneY = element[1]
    if ('pntTwoX' in locals()) and ('pntTwoY' in locals()):
        cur_azimuth, back_azimuth, distance = geodesic.inv(pntOneX, pntOneY, pntTwoX, pntTwoY)
        if 'new_azimuth' in locals():
            dif_azimuth = new_azimuth - cur_azimuth
            if (abs(dif_azimuth) > 120) and (abs(dif_azimuth) < 240):
                print(pntTwoX, pntTwoY)
        new_azimuth = cur_azimuth
    pntTwoX = pntOneX
    pntTwoY = pntOneY
    row += 1
- Вложения
- 
			
		
		
				 coord.zip coord.zip
- (46.06 КБ) 244 скачивания
 
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей