Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for Inside Block by TovarischZhukov
def rotate(a,b,c):
return (b[0]-a[0])*(c[1]-b[1])-(b[1]-a[1])*(c[0]-b[0])
def check_len(a,b,c):
return ((a[0]-b[0])**2+(a[1]-b[1])**2)**.5==((a[0]-c[0])**2+(a[1]-c[1])**2)**.5+((b[0]-c[0])**2+(b[1]-c[1])**2)**.5
def is_inside(polygon, point):
retval=0
for i in range(len(polygon)):
v1=polygon[i-1]
v2=polygon[i]
r1=rotate((0,0),point,v1)
r2=rotate((0,0),point,v2)
r3=rotate(v1, v2, point)
r4=rotate(v1,v2,(0,0))
if r3==0 and check_len(v1,v2,point) or r4==0 and r3*r2<0: return True
elif r1*r2<0 and r3*r4<0: retval+=1
elif r3*r4<0 and ((r2==0 and r1>0) or (r2>0 and r1==0)): retval+=1
return retval%2
Feb. 17, 2016