refactor: excel parse
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# Copyright (c) 2020-2024, Manfred Moitzi
|
||||
# License: MIT License
|
||||
from __future__ import annotations
|
||||
from typing import Iterable
|
||||
import numpy as np
|
||||
|
||||
from ezdxf.math import Vec3
|
||||
|
||||
|
||||
class CSpline:
|
||||
"""
|
||||
In numerical analysis, a cubic Hermite spline or cubic Hermite interpolator
|
||||
is a spline where each piece is a third-degree polynomial specified in
|
||||
Hermite form, that is, by its values and first derivatives at the end points
|
||||
of the corresponding domain interval.
|
||||
|
||||
Source: https://en.wikipedia.org/wiki/Cubic_Hermite_spline
|
||||
"""
|
||||
|
||||
# https://de.wikipedia.org/wiki/Kubisch_Hermitescher_Spline
|
||||
def __init__(self, p0: Vec3, p1: Vec3, m0: Vec3, m1: Vec3):
|
||||
self.p0 = p0
|
||||
self.p1 = p1
|
||||
self.m0 = m0
|
||||
self.m1 = m1
|
||||
|
||||
def point(self, t: float) -> Vec3:
|
||||
t2 = t * t
|
||||
t3 = t2 * t
|
||||
h00 = t3 * 2.0 - t2 * 3.0 + 1.0
|
||||
h10 = -t3 * 2.0 + t2 * 3.0
|
||||
h01 = t3 - t2 * 2.0 + t
|
||||
h11 = t3 - t2
|
||||
return self.p0 * h00 + self.p1 * h10 + self.m0 * h01 + self.m1 * h11
|
||||
|
||||
|
||||
def approximate(csplines: Iterable[CSpline], count) -> Iterable[Vec3]:
|
||||
for cspline in csplines:
|
||||
for t in np.linspace(0.0, 1.0, count):
|
||||
yield cspline.point(t)
|
||||
Reference in New Issue
Block a user