Я должен использовать наследование или состав?

Как уже упоминалось несколько раз, вы не можете нормализовать нулевой вектор. Итак, ваши варианты:

  1. Возвращает нулевой вектор
  2. Return NaN
  3. Возвращает бит, указывающий, был ли вектор успешно нормализован, в дополнение к результату, если успешный
  4. Бросить исключение

Вариант 4 не очень хорош, потому что некоторые языки (такие как C) не имеют исключений, и нормализация вектора обычно находится в очень низком код уровня. Создание исключения довольно дорого, и любой код, который может захотеть обработать случай с нулевым / малым вектором, получит ненужный удар по производительности, когда это произойдет.

У варианта 1 есть проблема, заключающаяся в том, что возвращаемое значение не будет иметь единичную длину, и поэтому оно может молча вносить ошибки в код вызова, который предполагает, что результирующий вектор имеет единичную длину.

Вариант 2 имеет проблему, аналогичную варианту 1, но, поскольку NaN обычно намного более заметны, чем нули, он, вероятно, будет проявляться легче.

Я думаю, что вариант 3 является лучшим решением, хотя он и делает интерфейс более сложным. Вместо того чтобы сказать

vec3 = myVec.normalize();

Теперь вы должны сказать что-то вроде

vec3 result;
bool success = myVec.normalize(&result);
if(success)
    // vector was normalized
else
    // vector was zero (or small)
15
задан brian d foy 21 October 2009 в 11:06
поделиться

1 ответ

Why not use roles to achieve this:

House A has a Bedroom
Bedroom does SleepingArea
House has a Studyroom
Studyroom does ComfyArea

House B has a MasterRoom
MasterRoom does SleepingArea and ComfyArea

The easiest way to get roles is to use Moose.

19
ответ дан 1 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: