У нас нет ни одной задачи по рисованию реального 3-мерного куба, так что вот оно:
Вызов
Ваша задача - нарисовать повернутый куб с перспективой. Это может быть в отдельном окне или в виде изображения.
вход
Вы вводите 3 отдельных числа от 0 до 359,99 ... Они представляют вращение вокруг осей x, y и z в градусах.
0 0 0
30 0 40
95 320 12
Вывод
Вы можете отобразить его в отдельном окне или сохранить изображение. Вы можете использовать любой тип отображения (векторный, растровый и т. Д.).
Редактировать: ASCII также разрешен, чтобы разрешить языки игры в гольф только с текстовым выводом.
Выходные данные для растеризованной или ASCII-графики должны быть не менее 50 * 50 (пиксели для растеризации, символы для ASCII)
Дополнительная информация
Положительная ось z указывает из окна, ось x горизонтальна, а ось y вертикальна. В основном стандарт OpenGL.
Вращения осуществляются против часовой стрелки, если смотреть на куб в отрицательном направлении конкретной оси, например, смотреть вниз по оси y.
Камера должна находиться на оси z на разумном расстоянии от куба в отрицательном направлении z, куб должен находиться в точке (0; 0; 0). . куб также должен быть полностью видимым и занимать не менее 50% рамки рисования. Камера должна смотреть в положительном направлении z на куб.
Вращения куба применяются в порядке x-> y-> z.
Куб вращается вокруг своего центра, он не двигается.
Чтобы спроецировать куб в 2d пространстве, вам необходимо разделить координаты x и y куба на расстояние, параллельное оси z между точкой и камерой.
правила
Библиотеки рендеринга разрешены, но вершины должны быть определены в коде. Нет 3d модели куба класса.
Контрольные примеры
источник
google will tell you the formula.
Нет , задачи должны содержать как можно больше материалов и информации, необходимых для их решения, включенных в текст сообщения . Я не должен идти в Google или в Википедию, чтобы начать понимать.Ответы:
Обувь (Рубин)
235231Все рассчитано с нуля.
Звоните из командной строки, например
shoes cube3d.rb 0 30 0
Идея состоит в том, чтобы одновременно генерировать / вращать четыре вершины тетраэдра в 3d. Затем, когда они уменьшаются до 2d, мы генерируем четыре вершины обратного тетраэдра (всего 8 вершин, являющихся вершинами куба). Это дает 4 пары вершин, соответствующих четырем диагоналям тела. Наконец, 2d вершины соединяются линиями: каждая вершина исходного тетраэдра должна быть соединена с каждой вершиной обратного тетраэдра, образуя 12 ребер и 4 диагонали тела куба. Заказ гарантирует, что диагонали тела не нанесены на график.
Вывод тестовых случаев
Обратите внимание, что, чтобы соответствовать двум последним тестам, вращение вокруг оси z происходит по часовой стрелке от POV зрителя. Это, кажется, противоречит спецификации. Направление вращения можно изменить, изменив
*i**c
->/i**c
ungolfed
Обратите внимание, что по историческим причинам в строке 9 применяется масштабный коэффициент 90 (выбранный таким же, как 90 градусов в строке 2 для игры в гольф), но в итоге не было никакого преимущества в игре в гольф при использовании этого конкретного значения, поэтому он стал произвольный выбор.
источник
HTML / CSS / JS, 739 байт, возможно, не конкурирует
Но я просто хотел показать CSS 3D-трансформации.
Показать фрагмент кода
источник
Клен,
130 + 14(в процессе)Это отображает постоянную функцию внутри блока, затем использует параметры графика, чтобы скрыть метки, метки и саму функцию. Добавление
projection=.5
к опциям приближает камеру, обеспечивая вид в перспективе.Я написал это до того, как спецификации были доработаны и порядок ротации
x, y', z''
вместоx, y, z
. Пока я не исправлю углы, вот другое решениеPOV-Ray, 182
читает ввод через
a.txt
файл, который должен содержать#declare R=<xx,yy,zz>;
с
xx,yy,zz
углами поворотаисточник