Алгоритм преобразования координат из XYZ в Вперед/Вверх/Вправо на основе заданных пользователем направлений.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Алгоритм преобразования координат из XYZ в Вперед/Вверх/Вправо на основе заданных пользователем направлений.

Сообщение Anonymous »

Надеюсь, этот вопрос не слишком широк. Я не ищу кого-нибудь, кто напишет за меня этот алгоритм, но надеюсь, что то, что я пытаюсь здесь сделать, уже было сделано, и мне не удалось его найти, и я надеюсь, что кто-нибудь сможет подсказать, как обычно решаются такие проблемы.
Я пишу приложение, которое берет 3D-модель из программы САПР, считывает геометрические данные и выполняет на ее основе расчеты. В 3D-пространстве координаты представлены как положительные/отрицательные значения XYZ, и у меня есть оболочка для их хранения:

Код: Выделить всё

public class XyzCoords
{
public double X;
public double Y;
public double Z;
}
Предположим, пользователь создал 3D-модель автомобиля. В зависимости от того, как они ее смоделировали, она может быть обращена в направлении X+, X-, Y+, Y-, Z+ или Z-, а крыша может быть направлена ​​в любом другом направлении. Пользователю необходимо указать направления вперед/вверх в моем приложении, чтобы он мог разобраться в модели и выполнить на ее основе расчеты. Направления представлены в виде перечислителя:

Код: Выделить всё

public enum Directions
{
Xpos,
Xneg,
Ypos,
Yneg,
Zpos,
Zneg
}
А выбор пользователя сохраняется в настройках вот так:

Код: Выделить всё

public Directions directionFw;
public Directions directionUp;
(Право указывать не обязательно, так как оно может быть экстраполировано из значений «Вперед/Вверх»)
Чтобы сделать расчеты и результаты независимыми от направления, я есть еще одна оболочка координат, которая представляет координаты как вперед/вверх/вправо:

Код: Выделить всё

public class FurCoords
{
public double F;
public double U;
public double R;
}
Теперь мне нужен конвертер, который может конвертировать из XyzCoords в FurCoords и обратно:

Код: Выделить всё

public static class XyzFurConverter
{
public FurCoordinates Convert(XyzCoords xyzCoords, Directions directionFw, Directions directionUp)
{
//...
}

public XyzCoords Convert(FurCoordinates coordinates, Directions directionFw, Directions directionUp)
{
//...
}
}
В ядре моего приложения положительный Z считается «Вперед», а положительный Y считается «Вверх», что делает X положительным «Вправо». Это означает, что если бы первая функция была вызвана следующим образом:

Код: Выделить всё

FurCoords furCoords = XyzFurConverter.Convert([1, 2, 3], Directions.Zpos, Directions.Ypos)
Тогда значения полей FurCoords следует записать так:

Код: Выделить всё

F = 1
U = 2
R = 3
Проблема заключается в реализации преобразования. Это, конечно, можно сделать с помощью множества операторов if/switch для каждой возможной комбинации, но это кажется глупым способом, учитывая огромное количество комбинаций. Кто-нибудь сталкивался с подобной проблемой и мог бы подсказать, как обычно ее решают? Опять же, я не ищу кого-то, кто сделает за меня домашнее задание, просто несколько советов.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ased-on-us
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»