Я не уверен, что ввод, который вы описываете, (129, 238, 191)
, на самом деле тот же вектор, что и вы хотите, (0.382027, 0.718028, 0.5818)
.
Выходной вектор является единичным вектором. То есть он был «нормализован» и поэтому имеет длину 1
. Теоретически вы должны иметь возможность преобразовать входной вектор в нормализованный формат, просто разделив компоненты входного вектора на длину этого вектора (который равен 331.3095
). Поступая таким образом, я получаю нормализованный вектор (0.389363997, 0.718361482, 0.576500181)
.
Важное замечание об этом векторе состоит в том, что компоненты X и Y больше, чем в желаемом выводе, тогда как компонент Z меньше. То есть этот вектор просто не указывает в том же направлении, что и ваш желаемый результат.
Возможно, что в вашей примерной системе существует некоторая ошибка округления, которая учитывает это несоответствие, либо в преобразовании в формат byte
, либо даже в качестве выходного значения ссылки. В вашем вопросе недостаточно информации, чтобы объяснить разницу.
Несмотря на это, мне кажется ясным, что основное преобразование не требует ничего больше, чем для преобразования входного вектора к нормированной форме:
byte bx = 129, by = 238, bz = 191;
double length = Math.Sqrt((bx * bx) + (by * by) + (bz * bz));
double dx = bx/length, dy = by/length, dz = bz/length;
Где bx
, by
и bz
ваши входные значения, и dx
, dy
и dz
- ваши выходы. Это не дает точно значений, которые вы ожидали, но я достаточно уверен, что он дает значения, которые вы должны должен ожидать.
Если вам нужно что-то более конкретное, вам нужно будет улучшить свой вопрос, чтобы он включал в себя больше подробностей о том, откуда берутся ваши примеры, и почему вы полагаете, что они должны представлять один и тот же вектор.
Вещь выведенные векторы, которые я предоставил, могут быть недействительными. Ваше объяснение лучше всего я мог найти, была некоторая информация в Интернете о нормализации входных векторов, но этого было недостаточно, чтобы понять. Большое спасибо, ваш ответ прекрасен! –