Обязательно ли разделять структуры данных и алгоритмы для 2D и 3D геометрии и механических задач? - PullRequest
0 голосов
/ 18 сентября 2018

Я разработал библиотеку, которая может решать задачи трехмерной геометрии и конкретные проблемы трехмерной механики.

Теперь мне предлагается создать аналогичную библиотеку для решения задач 2D.

Нужно ли мнепереопределить аналогичные структуры данных и алгоритмы для 2D-случая?

Может ли кто-нибудь дать мне несколько советов?

Если бы я переопределил их для 2D-библиотеки, не могли бы вы показать мне некоторые случаи, когда это необходимо?разделить 2D и 3D библиотеку?


Например, алгоритм, позволяющий решить, находится ли одна точка внутри многоугольника, может быть разделен между 2D и 3D задачами.В этом случае достаточно использовать трехмерные структуры данных и алгоритмы для решения двухмерной задачи.

Для геометрической задачи мне кажется, что разница в том, что точка содержит значение "z".

НоЯ боюсь, если есть случай, когда 3D-алгоритм не подходит для 2D-задач?

Или какие-то другие причины, по которым необходимо разделять структуры данных и алгоритмы.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Большая часть нашего кода является 3D, и мы все еще используем его также для 2D, когда это уместно.Наше программное обеспечение предназначено для трехмерного моделирования в ГИС.

Например, у нас есть некоторый код, который был разработан и протестирован только для 2D: операции над графом вершин и ребер, например, поиск всех точек пересечения (без допусков, требуемых в3D), найдите все замкнутые петли, отверстия и т. Д. Или триангуляцию Делоне, которая гарантирована только в 2D.Тем не менее, точки, полигоны и операции принадлежат нашим библиотекам трехмерных классов.

Кстати, иногда, даже если у вас есть проблема с 2D, вы все равно можете использовать 3D-операции, такие как перекрестное произведение, чтобы определить, находится ли край «направо» или «налево» от другого и т. Д.

Мы просто используем Z = Z_NO_VALUE.Вы можете просто использовать Z = 0 или const float Z_NO_VALUE = -9999 ;.Использование константы позволяет иметь отдельный код или утверждение, где была разработана или протестирована только 2D-операция.Вы можете добавить конструкторы со значениями по умолчанию к Z, если переданы только аргументы X, Y.

0 голосов
/ 18 сентября 2018

SO формат предполагает более конкретные вопросы (хотя вы добавили некоторое описание).

Я думаю, что использование 3d-функций может привести к потере ресурсов и иногда к чрезмерному усложнению.

Например, сравнить трехмерный векторный продукт с двумерным перекрестным произведением.

Также некоторые проблемы с 2D имеютнет прямых 3D-аналогов (например, is left/right to... понятие)

...