diff --git a/draw.py b/draw.py index 2999ade..6b72192 100644 --- a/draw.py +++ b/draw.py @@ -1,8 +1,7 @@ from cmath import exp from constants import I, BLACK -from gyro import MobiusInt, MobiusAdd, MobiusDist, cDot, Poincare2Klein -from lines import cBetween +from gyro import MobiusInt, MobiusAdd, MobiusBetween, MobiusDist, cDot, Poincare2Klein from numba import jit, byte, double, prange, optional from numba.types import UniTuple @@ -38,7 +37,7 @@ def draw(level,gPlayer,fov,res,dscale): if cDot(rot,MobiusAdd(cInt,-gPlayer.cPos)) > 0: continue rDist = MobiusDist(cInt,gPlayer.cPos) * dscale - if j.isFinite and not cBetween(Poincare2Klein(j.pointA),Poincare2Klein(j.pointB),Poincare2Klein(cInt)): + if j.isFinite and not MobiusBetween(j.pointA,j.pointB,cInt): continue if m is None: m = DrawnSegment(rDist,j.color) diff --git a/gyro.py b/gyro.py index 57f3b8b..e2831fa 100644 --- a/gyro.py +++ b/gyro.py @@ -2,7 +2,7 @@ from numba import jit, c16 from numba.experimental import jitclass from cmath import sqrt from math import tanh, atanh, pi -from lines import cLineIntersection +from lines import cLineIntersection, cBetween def deg2rad(rA): return rA/180*pi def rad2degd(rA): return rA*180/pi @@ -39,6 +39,10 @@ def cDist(cA, cB): def MobiusInt(cA,cB,cC,cD): # Bruh return Klein2Poincare(cLineIntersection(Poincare2Klein(cA),Poincare2Klein(cB),Poincare2Klein(cC),Poincare2Klein(cD))) +@jit(cache=True) +def MobiusBetween(cA,cB,cN): + return cBetween(Poincare2Klein(cA),Poincare2Klein(cB),Poincare2Klein(cN)) + @jit(cache=True) def MobiusAdd(cA, cB): return (cA + cB) / (1 + cA.conjugate() * cB)