lol, <wipes tear from eye>

that's just funny.

On 11/10/05, Shi Mu <[EMAIL PROTECTED]> wrote:
> the Internet is down for one day and so wonderful to have so many
> responses. i have checked all the links you guys mentioned. what i
> want is delaunay triangulation and the available ones online are
> written in C, Java and FORTRAN. I want to see some in Python because
> it is hard for me to figure out using python to do Fortune's sweeping
> line algorithm. Is python is not good in doing that kind of
> computation or some other reason?
> Thanks a lot for all of your responses!!!
>
> On 11/9/05, Gregor Lingl <[EMAIL PROTECTED]> wrote:
> >
> >
> > Alex Hunsley schrieb:
> > > Shi Mu wrote:
> > >
> > >
> > >>is there any sample code of triangulation? many thanks!
> > >>
> > >>
> > >
> > > Yes, probably.
> > >
> >
> >
> > Indeed, there is.
> > See attachment
> >
> > regards
> > Gregor
> >
> > >
> > > _______________________________________________
> > > Tutor maillist  -  Tutor@python.org
> > > http://mail.python.org/mailman/listinfo/tutor
> > >
> > >
> >
> > --
> > Gregor Lingl
> > Reisnerstrasse 3/19
> > A-1030 Wien
> >
> > Telefon: +43 1 713 33 98
> > Mobil:   +43 664 140 35 27
> >
> > Website: python4kids.net
> >
> >
> > ## Run this program and create a polygon without
> > ## intersecting edges by clicking the vertices with the mouse
> >
> > from Tkinter import *
> >
> > def area2(A,B,C):
> >     """2 * Flaeche des 2D-Dreiecks ABC"""
> >     return (A[0]-C[0])*(B[1]-C[1]) - (A[1]-C[1])*(B[0]-C[0])
> >
> > def insideTriangle(A, B, C, P):
> >     """Liegt P im Dreieck ABC?,
> >     ABC sind im Gegenuhrzeigersinn angenommen!"""
> >     return area2(A,B,P)>=0 and area2(B,C,P)>=0 and area2(C,A,P)>=0
> >
> > def triangulate(poly):
> >     tri = []
> >     while len(poly) > 2:
> >         triaFound = False
> >         count = 0
> >         while not triaFound and count < len(poly): #n:
> >             count += 1
> >             A, B, C = poly[:3]
> >             if area2(A, B, C) >= 0:
> >                 for P in poly[3:]:
> >                     if insideTriangle(A,B,C,P):
> >                         break
> >                 else:
> >                     tri.append( (A,B,C) )
> >                     poly.remove(B)
> >                     triaFound = True
> >             poly.append(poly.pop(0))
> >         if count == len(poly): # n:
> >             print "Not a simple polygon"
> >             return None
> >     return tri
> >
> >
> > class CvDefPoly(Canvas):
> >     def __init__(self, root):
> >         Canvas.__init__(self, root, bg="white", cursor="crosshair")
> >         self.v = ()
> >         self.rWidth, self.rHeight = 10.0, 7.5
> >
> >         self.bind("<Configure>", self.repaint)
> >         self.bind("<Button-1>", self.mousePressed)
> >
> >         self.done = False
> >
> >     def mousePressed(self, event):
> >         if self.done:
> >             self.done = False
> >             self.v = ()
> >         x ,y = self.fx(event.x), self.fy(event.y)
> >         if self.v:
> >             x0, y0 = self.v[:2]
> >             if abs(x-x0)<self.rWidth*0.01 and
> abs(y-y0)<self.rHeight*0.01:
> >                 self.done = True
> >         if not self.done:
> >                 self.v += (x,y)
> >         self.repaint(None)
> >
> >     def iX(self,x):
> >         return self.centerX + x/self.pixelSize
> >     def iY(self,y):
> >         return self.centerY - y/self.pixelSize
> >     def fx(self,x):
> >         return (x-self.centerX)*self.pixelSize
> >     def fy(self,y):
> >         return (self.centerY - y)*self.pixelSize
> >
> >     def repaint(self, event):
> >         items = self.find_all()
> >         for item in items:
> >             self.delete(item)
> >         if event:
> >             self.w, self.h = event.width, event.height
> >         w,h = self.w, self.h
> >         self.minX = self.minY = 2.0
> >         self.maxX, self.maxY = w-3.0, h-3.0
> >         dx, dy = self.maxX-self.minX, self.maxY-self.minY
> >         self.centerX = 2.0 + dx/2.0
> >         self.centerY = 2.0 + dy/2.0
> >         self.pixelSize = max(self.rWidth/dx, self.rHeight/dy)
> >
> >         left = self.iX(-self.rWidth/2.0)
> >         right = self.iX(self.rWidth/2.0)
> >         bottom = self.iY(-self.rHeight/2.0)
> >         top = self.iY(self.rHeight/2.0)
> >
> >         self.create_rectangle(left,top,right,bottom, outline="red")
> >         if len(self.v) > 1:
> >             x,y = self.v[:2]
> >             self.create_rectangle(self.iX(x)-2, self.iY(y)-2,
> >                                   self.iX(x)+2, self.iY(y)+2,
> outline="green")
> >         if len(self.v) > 3:
> >             if self.done:
> >                 v = []
> >                 sv = self.v[:]
> >                 while sv:
> >                     a,b=sv[:2]
> >                     v.extend([self.iX(a), self.iY(b)])
> >                     sv = sv[2:]
> >                 self.create_polygon( v, fill="", outline="blue")
> >             else:
> >                 coo = list(self.v[2:])
> >                 while coo:
> >                     x1,y1 = coo[:2]
> >                     self.create_line(self.iX(x),self.iY(y),
> >                                      self.iX(x1),self.iY(y1),fill="blue")
> >                     x,y=x1,y1
> >                     coo  = coo[2:]
> >
> > def ccw(poly):
> >     n = len(poly)
> >     k = poly.index(min(poly))
> >     return area2(poly[k-1], poly[k], poly[(k+1)%n]) > 0
> >
> > def color(n):
> >     return "#%02x%02x%02x" % (255-n,0,n)
> >
> > class PolyTria(Tk):
> >     def __init__(self):
> >         Tk.__init__(self)
> >         self.geometry("500x300-10+50")
> >         self.title("Define polygon vertices by clicking")
> >         CvPolyTria(self).pack(expand=1, fill="both")
> >
> > class CvPolyTria(CvDefPoly):
> >     def repaint(self, event):
> >         doit = False
> >         if len(self.v)>3 and self.done:
> >             poly = []
> >             v = self.v[:]
> >             while v:
> >                 p = tuple(v[:2])
> >                 poly.append(p)
> >                 v = v[2:]
> >             if not ccw(poly):
> >                 poly.reverse()
> >             tri = triangulate(poly)
> >             doit = True
> >         CvDefPoly.repaint(self, event)
> >         if doit:
> >             anz = len(tri)
> >             diff = 255//anz
> >             for i,t in enumerate(tri):
> >                 (x1,y1),(x2,y2),(x3,y3) = t
> >                 t =
> (self.iX(x1),self.iY(y1),self.iX(x2),self.iY(y2),self.iX(x3),self.iY(y3))
> >                 self.create_polygon(t, fill=color(i*diff),
> outline="black")
> >
> > if __name__ == "__main__":
> >     PolyTria().mainloop()
> >
> >
> >
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
>
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to