Make a separate function for properly determining whether a Poincare point is between two other points.

This commit is contained in:
bʰedoh₂ swé 2024-04-09 00:02:59 +05:00
parent 457f0b9fa0
commit b5eb207d38
2 changed files with 7 additions and 4 deletions

View File

@ -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)

View File

@ -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)