Compare commits

...

2 Commits

Author SHA1 Message Date
BrSh31
922ee7739e .toml version update 2025-11-11 16:11:16 +01:00
BrSh31
528cd9ff7a Add project_ortho() function and tests 2025-11-11 16:08:47 +01:00
10 changed files with 28 additions and 2 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,7 @@
from typing import List from typing import List
import math import math
from tabulate import tabulate from tabulate import tabulate
from typing import Tuple
def matmul(mat1: List[List[int]], mat2: List[List[int]]) -> List[List[int]]: def matmul(mat1: List[List[int]], mat2: List[List[int]]) -> List[List[int]]:
""" """
@ -119,6 +120,18 @@ def rot_3D(angle: float, axis: str) -> List[List[float]]:
else: else:
raise ValueError("Axis must be 'x', 'y', or 'z'.") raise ValueError("Axis must be 'x', 'y', or 'z'.")
def project_ortho(point: Tuple[float, float, float], scale: float = 1) -> Tuple[float, float]:
"""
Retruns a 2d point with optional scaling
ignores the z axis and if scaling needed scales the 2d point
:param point: Coordinates of a 3d point
:param scale: scaling factor (else 1)
:return: A 2d point
"""
return scale * point[0], scale * point[1]
def main(): def main():
# Test matrix multiplication # Test matrix multiplication
@ -150,7 +163,6 @@ def main():
print("Matrix A:") print("Matrix A:")
print(tabulate(matrix_a)) print(tabulate(matrix_a))
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -1,6 +1,6 @@
[project] [project]
name = "matrixmania_shehibr" name = "matrixmania_shehibr"
version = "0.2.0" version = "0.3.0"
description = "MatrixMania: Simple linear algebra functions for teaching (matmul, transpose,rot_2D)." description = "MatrixMania: Simple linear algebra functions for teaching (matmul, transpose,rot_2D)."
authors = [ authors = [
{ name="shehibr", email="shehibr98345@th-nuernberg.de" } { name="shehibr", email="shehibr98345@th-nuernberg.de" }

14
tests/test_projection.py Normal file
View File

@ -0,0 +1,14 @@
from matrixmania.compute import project_ortho
def test_project_ortho_no_scale():
point = (1.0, 2.0, 3.0)
result = project_ortho(point)
expected = (1.0, 2.0)
assert result == expected
def test_project_ortho_with_scale():
point = (1.0, 2.0, 3.0)
result = project_ortho(point, scale=100)
expected = (100.0, 200.0)
assert result == expected