[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Re: Hexagonal collision detection?



Hi,

Where did you get this from? Is this all your own idea or is this kind
of function described elsewhere?

I think it is more or less the first method described here ("Same Side Technique"):
http://www.blackpawn.com/texts/pointinpoly/default.html


On Sep 15, 7:35 am, Ian Mallett <geometr...@xxxxxxxxx> wrote:
 As used in my projecthttp://www.pygame.org/project/649/.
    def pointtest(self,point):
        #drawpoints is a list containing points defining your polygon
        #point is the mouse position
        #if it doesn't work, list them in opposite order.
        #works for arbitrary convex geometry
        x = point[0]
        y = point[1]
        Lines = []
        index = 0
        for index in xrange(len(drawpoints)):
            p0 = drawpoints[index]
            try: p1 = drawpoints[index+1]
            except: p1 = drawpoints[0]
            Lines.append([p0,p1])
        for l in Lines:
            p0 = l[0]
            p1 = l[1]
            x0 = p0[0]; y0 = p0[1]
            x1 = p1[0]; y1 = p1[1]
            test = (y - y0)*(x1 - x0) - (x - x0)*(y1 - y0)
            if test < 0: return False
        return True
Ian

I usually use a list comprehension to generate the "Lines" variable:
    Lines = [[drawpoints[idx], drawpoints[idx + 1]] for idx in xrange(-1, len(drawpoints) - 1)]
I just love the negative indexing capabilities of python!


yours
//Lorenz