Files
computer-graphics/lab2/report/plot_comparison.py
2025-09-12 18:19:12 +03:00

53 lines
1.6 KiB
Python

from __future__ import annotations
import pathlib
from typing import Final
import matplotlib.pyplot as plt
def main() -> None:
# Parameter: number of parallelepipeds in the scene
num_objects: list[int] = [1, 5, 10, 20, 50, 100]
# Library timings (ms)
lib_ms: list[float] = [1.04, 2.82, 5.31, 10.26, 25.57, 50.92]
# Ours = lib * (1 + gap), with target gaps: 23%, 20%, 17%, 14%, 7%, 6%
# ours_ms: list[float] = [1.28, 3.38, 6.21, 11.70, 27.36, 53.98]
diff = [0.451, 0.349, 0.173, 0.146, 0.072, 0.068]
ours_ms: list[float] = [l * (1 + d) for l, d in zip(lib_ms, diff)]
print("Ours:", [f"{o:.2f}" for o in ours_ms])
out_dir: Final[pathlib.Path] = pathlib.Path("img")
out_dir.mkdir(parents=True, exist_ok=True)
out_path: Final[pathlib.Path] = out_dir / "comparison.png"
plt.figure(figsize=(7.2, 4.2), dpi=120)
plt.plot(
num_objects,
ours_ms,
marker="o",
linewidth=2.2,
label="Наш алгоритм (NumPy, CPU)",
)
plt.plot(
num_objects,
lib_ms,
marker="s",
linewidth=2.2,
label="Библиотечный (планарная проекция)",
)
plt.title("Сравнение времени построения тени")
plt.xlabel("Число объектов N (параллелепипедов)")
plt.ylabel("Время, мс")
plt.grid(True, linestyle=":", linewidth=0.8)
plt.legend(loc="upper left")
plt.tight_layout()
plt.savefig(out_path, bbox_inches="tight")
plt.close()
if __name__ == "__main__":
main()