From b5eb207d38e93893e537eb6467855282a2c7c1ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?b=CA=B0edoh=E2=82=82=20sw=C3=A9?= Date: Tue, 9 Apr 2024 00:02:59 +0500 Subject: [PATCH] Make a separate function for properly determining whether a Poincare point is between two other points. --- draw.py | 5 ++--- gyro.py | 6 +++++- 2 files changed, 7 insertions(+), 4 deletions(-) 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)