Нарисуйте блокированные тетраэдры в клетке «сегментов линии», используя WPF и C#

В этом примере используются два взаимосвязанных тетраэдра, окруженных кубической клеткой сегментов линии. К сожалению, заметное упущение из 3D-инструментов WPF - это любой способ отрисовки сегментов линии. Это означает, что вы не можете рисовать каркасные модели, показывать нормали поверхности или рисовать другие линейные функции. Вы можете использовать инструментарий CodePlex 3D-инструменты для Windows Presentation Foundation , но я обычно предпочитаю реализовать свои собственные решения, если это возможно.

Инструментарий CodePlex рисует трехмерные сегменты линии, рисуя тощие прямоугольники. Это работает, но если угол обзора расположен вдоль края прямоугольника, он исчезает. Другим подходом было бы нарисовать два тощих перпендикулярных прямоугольника, которые блокируются. Затем вы можете видеть что-то под любым углом (кроме конца).

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

Сначала код получает Vector3D, представляющий вектор между начальной и конечной точками. Затем он использует метод ScaleVector (который является прямым) для создания вектора n1 в направлении «вверх», длина которого равна половине толщины призмы. Он использует метод Vactor3D класса CrossProduct класса, чтобы получить новый вектор n2, перпендикулярный двум другим. (Если вы не знаете, что такое векторный кросс-продукт, см. WikiPedia .) Затем он масштабирует вектор n2, поэтому она также имеет длину, равную половине желаемой толщины призмы.

Затем метод добавляет комбинации векторов n1 и n2 к конечным точкам сегмента, чтобы получить углы призмы. Он использует эти точки для добавления необходимых треугольников в MeshGeometry3D для создания призмы.

Источник: http://csharphelper.com/blog/2014/10/draw-interlocked-tetrahedrons-in-a-cage-of-line-segments-using-wpf-and-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector