Форум сайта python.su
Добрый день. Возникли проблемы при решении задачи.
1.Написать программу чтоб можно было рисовать многоугольник. Зделал.
import pylab
xlist = []
ylist = []
print "Enter coordinat:"
q=1
a=0
while q == 1:
x = raw_input("x:")
xlist.append(x)
y = raw_input("y:")
ylist.append(y)
if a == 1:
if x==xlist[0]:
if y==ylist[0]:
q=0
a =1
pylab.plot (xlist, ylist,
linestyle = "-",
marker = "o",
color = "blue",
markerfacecolor = "green")
Офлайн
Как вариант:
проверить, находится ли точка (каждая вершина многоугольника) в многоугольнике (фигура, составленная из оставшихся вершин).
Алгоритм: http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%82%D0%BE%D1%87%D0%BA%D0%B8_%D0%B2_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B5
Если да - многоугольник вогнутый.
Офлайн
помогите разобраться с кодом
def inPolygon(x, y, xp, yp):
c=0
for i in range(len(xp)):
if (((yp[i]<=y and y<yp[i-1]) or (yp[i-1]<=y and y<yp[i])) and \
(x > (xp[i-1] - xp[i]) * (y - yp[i]) / (yp[i-1] - yp[i]) + xp[i])): c = 1 - c
return c
print( inPolygon(100, 0, (-100, 100, 100, -100), (100, 100, -100, -100)))
Офлайн
не получилось этот код приладить к себе. решил пойти другим путем. многоугольник будет вогнутым если внутрений угол будет больше чем 180 градусов.
Сейчас нужно посчить каждый угол при известный трех координатах.
Офлайн
Проверить, что все углы при последовательном обходе вершин имеют один знак.
Знак можно узнать через векторное произведение векторов двух соседних сторон (разница координат вершин).
Офлайн
помогите пожалуйсто разобраться с кодом
def inPolygon(x, y, xp, yp):
c=0
for i in range(len(xp)):
if (((yp<=y and y<yp) or (yp<=y and y<yp)) and \
(x > (xp - xp) * (y - yp) / (yp - yp) + xp)): c = 1 - c
return c
print( inPolygon(100, 0, (-100, 100, 100, -100), (100, 100, -100, -100)))
Офлайн
ап
Офлайн