Во-первых, это просто выбор стиля, но вам не нужно писать все от руки.Например, typename.init()
всегда может быть сокращено до typename()
.И все типы SIMD работают без префикса simd_
в Swift.Векторные типы также имеют поэлементные инициализаторы:
let segmentStart = float3(x0, y0, z0)
В любом случае, реальный вопрос здесь - просто базовая математика.Вектор, который описывает (длину) отрезка линии между двумя точками, представляет собой разность двух точек:
let segmentLength = segmentEnd1 - segmentStart
Чтобы описать весь отрезок, вам нужно знать либо его происхождение, либо его длину (два вектора) или его начальная и конечная точки (также два вектора).Если у вас есть какая-либо из этих пар, вы можете конвертировать между ними.
assert(segmentEnd1 == segmentStart + segmentLength)
Если вы хотите расширить сегмент, вам нужно представление origin + length.
let segmentLength2 = segmentLength * multiplier
Как только вы это сделаете, вы можете преобразовать обратно в представление начальной / конечной точки:
let segmentEnd2 = segmentStart + segmentLength2
Это довольно легко увидеть, как показано на рисунке (здесь в 2D, но математика одна и та же, независимо от того, сколько у вас измерений):