Я пытаюсь добиться чего-то вроде следующего в C ++:
class MyVector; // 3 component vector class
MyVector const kA = /* ... */;
MyVector const kB = /* ... */;
MyVector const kC = /* ... */;
MyVector const kD = /* ... */;
// I'd like to shorten the remaining lines, ideally making it readable but less code/operations.
MyVector result = kA;
MyVector const kCMinusD = kC - kD;
if(kCMinusD.X <= 0)
{
result.X = kB.X;
}
if(kCMinusD.Y <= 0)
{
result.Y = kB.Y;
}
if(kCMinusD.Z <= 0)
{
result.Z = kB.Z;
}
Перефразируя код на английский, у меня есть четыре «известных» вектора. Два из векторов имеют значения, которые я могу или не могу хотеть в своем результате, и то, хочу я их или нет, зависит от ветви, основанной на компонентах двух других векторов.
Я чувствую, что смогу упростить этот код с помощью некоторой математической математики и маскировки, но я не могу обернуться вокруг него.
Пока я иду с веткой, но мне любопытно узнать, есть ли лучший способ, который все еще понятен, и менее многословный.
Edit:
В отношении комментария Марка я объясню, что я пытаюсь сделать здесь.
Этот код является выдержкой из некоторой весенней физики, над которой я работаю. Компоненты следующие:
kC - это длина пружины, а kD - минимальная длина пружины.
кА и кБ - два набора пружинных натяжений, каждый компонент которых может быть уникальным для каждого компонента (то есть, различное натяжение пружины вдоль X, Y или Z). kA - это натяжение пружин, если оно не полностью сжато, а kB - это натяжение пружин, если оно полностью сжато.
Я бы хотел создать результирующий «вектор», который просто представляет собой объединение kC и kD, в зависимости от того, сжимается ли пружина или нет.