соединение вершин для создания треугольников в питоне

у меня есть двойной цикл, который выглядит так:

for i in xrange(len(myVVV)):
    for j in xrange(len(myVVV[i])):
        if myVVV[i][j]!= -1:
              s=i,j
              print(myVVV[i][j])
              print(s)

дает это:

1
(0, 1)
2
(0, 5)
3
(1, 0)
4
(1, 1)
5
(1, 2)
6
(1, 4)
7
(1, 5)
8
(1, 6)
9
(2, 0)
10
(2, 1)
11
(2, 3)
12
(2, 4)
13
(3, 2)
14
(3, 3)
15
(3, 6)
16
(3, 7)
17
(4, 6)
18
(4, 7)

Я пытаюсь создать «треугольники», проверяя точки, где s представляет расположение числовой точки в сетке, в основном я бы соединил точки 1,3,4, чтобы сделать один треугольник на основе их местоположения. Итак, какие-либо идеи о том, как это сделать?

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


person learner    schedule 30.06.2014    source источник
comment
Вы пытаетесь найти точки, которые находятся ближе всего друг к другу, чтобы составить треугольники? Ваши точки находятся на плоскости или в 3D? Вы можете найти ссылку на blendernation.com/2012. /01/12/python-script-point-cloud-skinner полезно — похоже, вы пытаетесь создать сетку из облака точек.   -  person Floris    schedule 07.07.2014
comment
@Floris, однако, спасибо за ответ; я понял это. Однако, спасибо   -  person learner    schedule 08.07.2014
comment
это хорошо. Знаете ли вы, что можете написать свой собственный ответ или удалить вопрос, если он больше не актуален? Оставлять его открытым, но не нужным — это ни то, ни другое — это может закончиться пустой тратой времени людей.   -  person Floris    schedule 08.07.2014


Ответы (3)


Вы могли бы попробовать инвертировать координаты - таким образом доказав, что 2 точки расположены по диагонали друг от друга. Вы также можете использовать это, чтобы проверить, есть ли точка в этой диагональной позиции. Затем объедините их и проверьте, есть ли точка в этом месте — если есть, у вас есть треугольник. Например

(0, 1) // One dot
Invert it to check for surrounding dots
(1, 0) // Dot found (inverted 0, 1)
(1, 1) // Combination - check if dot exists there. if true - triangle!

Просто предложение, которое может направить некоторые мысли на правильный путь :) Я только что подумал об этом, так что полегче, если вы найдете дыру: P

person Byron Coetsee    schedule 30.06.2014

Вы проверили matplotlib? Этот ответ здесь предназначен для рисования многоугольников.

person walexnelson    schedule 30.06.2014

Это мой код, он работает, для будущих случаев, если он понадобится людям, не стесняйтесь, надеюсь, что это может помочь

MTri=0 #num of triangles 
numI=len(myVVV)#to check in range of i
numJ=len(myVVV[0])# to check in range of j
idsT=0 #for triangles
for i in xrange(len(myVVV)):
#print(myVVV[i])
for j in xrange(len(myVVV[i])):
    if myVVV[i][j] != -1:
        # line below check that if point has neighboring
        #points open to make a sqaure makeing it counter clockwise 
        #-> right, ^ up, <- left, v down (first case)
        if i-1 >= 0 and j+1 < numJ and myVVV[i][j+1] !=-1 and myVVV[i-1][j+1] !=-1 and myVVV[i-1][j] != -1:
            MTri= MTri +2#plus 2 since 2 traingles are made from a square
            A=myVVV[i][j]
            B=myVVV[i][j+1]
            C=myVVV[i-1][j]
            D=myVVV[i-1][j+1] 
            idsT=idsT+1
            #A,B,D create -> right ,^ up, back   _|
            #A,D,C create corner , <- left, back |/  
            print("create Triangle from points" + ' '+str(A)+' '+ str(B)+' '+ str(D))
            openwrite.write(str(idsT)+' '+str(A)+ ' '+str(B)+' '+str(D)+'\n')
            idsT=idsT+1
            openwrite.write(str(idsT)+' '+str(A)+ ' '+str(D)+' '+str(C)+'\n')
            print("create Triangle from points" + ' '+str(A)+' '+ str(D)+' '+ str(C))
        elif i-1 >= 0 and j+1 < numJ and myVVV[i][j+1] != -1 and myVVV[i-1][j+1] != -1:
            MTri= MTri+1#plus 1 
            A=myVVV[i][j]
            B=myVVV[i][j+1]# same index ,j shift -> one to the right
            C=myVVV[i-1][j+1] # index above, j shifted -> one to the right
            #A,B,C creates ->right,^ up, back  _|
            idsT=idsT+1
            openwrite.write(str(idsT)+' '+str(A)+ ' '+str(B)+' '+str(C)+'\n')
            print("create Triangle from points" + ' '+str(A)+' '+ str(B)+' '+ str(C))

        elif i-1 >= 0 and j+1 < numJ and myVVV[i][j+1] != -1 and myVVV[i-1][j] != -1:
            MTri= MTri+1#plus 1 
            A=myVVV[i][j]
            B=myVVV[i][j+1] #same index ,j shift -> one to the right
            C=myVVV[i-1][j]  #index above, same j position 
            #A,B,C creates ->right,corner, back  |_
            idsT=idsT+1
            openwrite.write(str(idsT)+' '+str(A)+ ' '+str(B)+' '+str(C)+'\n')
            print("create Triangle from points" + ' '+str(A)+' '+ str(B)+' '+ str(C))


        elif i-1 >= 0 and j+1 < numJ and myVVV[i-1][j+1] != -1 and myVVV[i-1][j] != -1:
            MTri= MTri+1#plus 1 
            A=myVVV[i][j]
            B=myVVV[i-1][j+1] # index above, j shifted -> one to the right
            C=myVVV[i-1][j]  #index above, same j position 
            #A,B,C creates corner right, left back  |/
            idsT=idsT+1
            openwrite.write(str(idsT)+' '+str(A)+ ' '+str(B)+' '+str(C)+'\n')
            print("create Triangle from points" + ' '+str(A)+' '+ str(B)+' '+ str(C))
person learner    schedule 07.07.2014