coordinates are essentially just tuples, so let's treat them as such. Double the speed for no cost :)
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 41s
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 41s
This commit is contained in:
parent
bd31a062cc
commit
b0c6986511
@ -1,9 +1,8 @@
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from math import gcd, sqrt, inf, atan2, degrees
|
||||
from .math import round_half_up
|
||||
from typing import Union, List, Optional
|
||||
from typing import Union, List
|
||||
|
||||
|
||||
class DistanceAlgorithm(Enum):
|
||||
@ -14,11 +13,24 @@ class DistanceAlgorithm(Enum):
|
||||
CHESSBOARD = 2
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Coordinate:
|
||||
x: int
|
||||
y: int
|
||||
z: Optional[int] = None
|
||||
class Coordinate(tuple):
|
||||
def __new__(cls, x: int, y: int, z: int = None) -> Coordinate:
|
||||
return tuple.__new__(Coordinate, (x, y, z))
|
||||
|
||||
@property
|
||||
def x(self):
|
||||
return self[0]
|
||||
|
||||
@property
|
||||
def y(self):
|
||||
return self[1]
|
||||
|
||||
@property
|
||||
def z(self):
|
||||
return self[2]
|
||||
|
||||
def is3D(self) -> bool:
|
||||
return self.z is not None
|
||||
|
||||
def getDistanceTo(self, target: Coordinate, algorithm: DistanceAlgorithm = DistanceAlgorithm.EUCLIDEAN,
|
||||
includeDiagonals: bool = False) -> Union[int, float]:
|
||||
@ -156,7 +168,11 @@ class Coordinate:
|
||||
step_x = diff.x // steps
|
||||
step_y = diff.y // steps
|
||||
step_z = diff.z // steps
|
||||
return [self.__class__(self.x + step_x * i, self.y + step_y * i, self.z + step_z * i) for i in range(steps + 1)]
|
||||
return [
|
||||
self.__class__(self.x + step_x * i, self.y + step_y * i, self.z + step_z * i)
|
||||
for i
|
||||
in range(steps + 1)
|
||||
]
|
||||
|
||||
def reverse(self) -> Coordinate:
|
||||
if self.z is None:
|
||||
@ -191,11 +207,6 @@ class Coordinate:
|
||||
def __truediv__(self, other):
|
||||
return self // other
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, Coordinate):
|
||||
return False
|
||||
return self.x == other.x and self.y == other.y and self.z == other.z
|
||||
|
||||
def __gt__(self, other):
|
||||
if self.z is None:
|
||||
return self.x > other.x and self.y > other.y
|
||||
|
||||
Loading…
Reference in New Issue
Block a user