Точки, векторы и утилиты
Точки
point3(x, y, z) создаёт трёхмерную точку, point2(x, y) — двумерную. Большинство геометрических функций также принимают кортежи координат.
from zencad import *
p = point3(1, 2, 3)
assert p.value() == (1, 2, 3)
assert float(p.x) == 1
curve = interpolate([(0, 0, 0), (0, 0, 10), (10, 0, 10)])
display(curve)
display(p)
show()
Точка отображается как вершина. При преобразовании к ней применяется и поворот, и перенос.
Векторы
vector3(x, y, z) и vector2(x, y) задают направления и смещения. Перенос на вектор не действует. Для изображения вектора используйте стрелку.
| Операция | Результат |
|---|---|
p - q |
Вектор между точками |
p + v, p - v |
Смещённая точка |
v + w, v - w, v * k |
Вектор |
v.length() |
Длина |
v.normalized() |
Единичный вектор того же направления |
v.dot(w) |
Скалярное произведение |
v.cross(w) |
Векторное произведение; у Vector2 — его скалярная Z-компонента |
Складывать две точки нельзя. Операции создают новые значения, исходные координаты не меняются.
from zencad import *
v = vector3(3, 4, 0)
assert float(v.length()) == 5
assert abs(float(v.normalized().length()) - 1) < 1e-7
assert vector3(1, 0, 0).cross(vector3(0, 1, 0)).value() == (0, 0, 1)
Массивы точек и векторов
points и vectors создают списки трёхмерных точек и векторов. points2 создаёт двумерную сетку трёхмерных точек, например для интерполяции поверхности.
points([(0, 0, 0), (0, 0, 10), (10, 0, 10)])
vectors([(0, 0, 1), (1, 0, 0), (0, 1, 0)])
points2([
[(0, 0, 0), (10, 0, 5)],
[(0, 10, 0), (10, 10, 5)],
])
Числа и вычисления
Функции point3, vector3, scalar возвращают объекты Point3, Vector3, Scalar. Они сохраняют зависимости вычислений. .value() возвращает число или кортеж координат, .to_numpy() у точки и вектора — массив NumPy.
from zencad import *
body = box(2)
volume = body.mass() # Scalar
moved = body.right(volume / 4) # Перенос зависит от объёма.
assert abs(float(volume) - 8) < 1e-7
coordinates = moved.center().to_numpy()
float, int, bool и сравнения запрашивают численный результат. math.sin(value) также вычисляет число; sin(value) из ZenCad сохраняет зависимость. Подробнее — «Вычисления и кэш».
Радианы и градусы
Углы в API ZenCad задаются в радианах. deg(180) соответствует math.pi; deg2rad — синоним deg, rad2deg выполняет обратное преобразование.
rotateZ(deg(45))
Пустой примитив: nullshape
Пустая форма может участвовать в булевых операциях:
it = nullshape()
for i in range(7):
it = it + box(20).translate(10*i, 10*i, 10*i)
# То же самое через список:
# union([box(20).translate(10*i, 10*i, 10*i) for i in range(7)])
Регистрация шрифта
register_font(fontpath) регистрирует шрифт FreeType для построения текста.