создать 3D-прямоугольник с помощью C # - PullRequest
0 голосов
/ 10 августа 2011

Я читал о прямоугольной структуре в c # и функции пересечения в ней

Мой вопрос: как настроить его так, чтобы я мог иметь трехмерный прямоугольник, иметь координаты x, y, z

и получить это пересечение с другим?

Любая идея

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Просто создайте свой собственный.Вот несколько идей:

  • 3D-прямоугольник имеет не только ширину и высоту, но и плоскость
  • плоскости могут быть описаны с помощью нормального вектора и точки (начало координат)
  • начало координат было бы аналогично (x, y) в 2D-прямоугольнике, то есть "левой верхней точке", но любая из них может
  • пересекаться с другим прямоугольником, какпросто, пересекая две равнины, а затем проверяя, не пересекает ли линия пересечения какой-либо из прямоугольников
  • , существует множество сайтов, связанных с математикой, чтобы проверить формулы того, как это сделать
  • Скорее всего, в вашем приложении вам не нужно делать это оптимизированным способом.В самом деле.Просто закодируйте его и попробуйте.Вы можете оптимизировать позже.

РЕДАКТИРОВАТЬ:

Подождите.Подумайте еще раз: начало координат, высота, ширина и нормальный вектор не будут действительно сокращать его, поскольку у вас нет ощущения «вверх», как в 2D.

Итак, поцарапайтетот.Размышление об этом показывает, что ширина и высота в 2D на самом деле являются векторами два, за исключением того, что подразумевается их направление: Ширина - это длина вектора в направлении x, Высота - длина вектора в направлении y.

Итак, смоделируйте ваш прямоугольник так:

  • точка (Origin)
  • вектор Width (в математике это часто называют u)
  • вектор Height (это часто называют v в математике)
  • нормальный вектор больше не нужен, так как он может быть рассчитан по векторному произведению Width x Height

Три другие точки вашего прямоугольника могут быть рассчитаны следующим образом:

  • Origin + Width
  • Origin + Width + Height
  • Origin + Height
2 голосов
/ 10 августа 2011

(о функции пересечения)

Вы не можете создать такую ​​функцию.

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

Пересечение двух «трехмерных прямоугольников» в пространстве не всегда является трехмерным прямоугольником!

(например, взять 2 одинаковых прямоугольника и повернуть один, а затем пересечь ...)

Таким образом, вы не можете просто создать объект прямоугольника, а затем функцию пересечения, которая возвращает объект прямоугольника.

Вам нужна более полная библиотека управления 3D-объектами.

примечание:

Трехмерный прямоугольник ограничен 6 плоскостями. так что вы можете определить его по 6 ограничениям на x, y, z

Тогда пересечение двух трехмерных прямоугольников будет просто трехмерным объектом, идентифицированным 12 ограничениями.

Если эти 12 ограничений можно упростить до 6, это может быть прямоугольник (но это не всегда так) а если не может, то это не прямоугольник.

2 голосов
/ 10 августа 2011

Класс прямоугольника, который вы связали с моделями 2D-прямоугольника (я не знаю, что такое 3D-прямоугольник, кстати).

Почти все пространство имен System.Drawing имеет дело с 2D, поэтому вы не можете настроить его таким образом.

Родительское пространство имен System.Drawing содержит типы, которые поддерживают базовые графические функции GDI +. Дочерние пространства имен поддерживают расширенные двумерные и функции векторной графики, расширенные функции обработки изображений, а также связанные с печатью и типографские услуги.

(акцент мой)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...