Программа которая рисует куб

Реализация идеи немного похоже на использование кубиков OpenGL покраски, сначала подготовит данные вершины:

// Четыре вершины до и после кубов, начните по часовой стрелке из верхнего правого угла vertexArr=QVector< QVector3D, QVector3D, QVector3D, QVector3D, QVector3D, QVector3D, QVector3D, QVector3D >; // Шесть лиц, одна сторона содержит четыре вершины elementArr=QVector>< , , , , , >;

Затем следуйте матрицу вращения, в перспективе матрице, для получения значения XY координат вершины 3D вершины на 2D-плоскости. Согласно значениям вершины XY, получите путь к каждому лицу, затем нарисуйте путь поверхности.

Это более неприятно, чтобы определить, какие поверхности являются поверхностями. Один кубики в порядке, вы можете пройти значение Z. Если вы — количество объектов, это слишком OpenGL. В конце концов, я только что нарисовал его.

2. Реализация кода

Реализация Гиф Карта:

#ifndef MYCUBE_H #define MYCUBE_H #include #include #include #include class MyCube : public QWidget < Q_OBJECT public: explicit MyCube(QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; QPointF getPoint(const QVector3D private: QVector Vertexarr; // Восемь вершин QVector > Electryarr; // шесть граней QMATRIX4X4 ROTEMAT; // ROTARY MATRIX Qpoint mousepos; // положение мыши Bool Mousepressed = false; // мышь Нажмите флаг >; #endif // MYCUBE_H

Источник: russianblogs.com

Как рисовать куб. Урок 79

Как пишется куб в паскале

Друзья, добрый день. Нужно составить программу, которая рисует куб в центре графического окна (см. рисунок ниже). Окно должно появляться в центре экрана и иметь заголовок: “Куб”. Размер стороны передней грани куба (S) должен задаваться с клавиатуры. Расстояние от куба до верхней, правой, нижней и левой границ окна равно 1/4 размера стороны передней грани куба (S/4).

Задача: Куб
Рассмотрим куб, стороны которого раскрашены в некоторые цвета. Его всегда можно будет повернуть. Возвести число в куб
как написать на я зыке паскаль куб числа? и какие вобще есть команды?
Нужно нарисовать Куб
Нужно нарисовать Куб

Возвести число в куб
Создать программу в которой нужно ввести число с клавиатуры и оно должно возвестись в куб и вывести. Просто АВС или АВС.net? Добавлено через 11 минут
ZX Spectrum-128, Там не такой.

Решение

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Элементы матрицы возвести в куб
Надо написать программу которая каждый элемент двойного масива, возведет в куб, надо вывести. Куб, который нужно вращать мышкой

Как нарисовать куб | Простой рисунок куба


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

Вывести квадрат, куб и пятую степень числа.
Составить программу, которая запрашивает у пользователя целое число и выводит квадрат, куб и пятую. Рисуем в Pascal
Нарисовать в Turbo Pascal следующее изображение: Рисуем треугольник
Нарисуйте треугольник по данным, введенным пользователем. Цвет линий и стиль заполнения. Источник статьи: http://www.cyberforum.ru/pascalabc/thread2083840.html

Как сделать куб в паскале

Exp паскаль

Автор Андрей Рыбаков задал вопрос в разделе Другие языки и технологии как в паскале записать число в кубе? и получил лучший ответ Ответ от [WinneR][гуру]x*x*x или sqr(x)*x, где sqr — возведение в квадрат

Ответ от Lom[гуру]Используй следующую формулу:
То есть в твоем случаи получается так:
exp(3*ln(x)) Возведение в степень в турбо паскале
На твоем примере это будет выглядеть так: лабораторные работы и задачи по программированию и информатике, егэ по информатике

Графика в Паскале

Для работы с графикой в pascal abc используется модуль GraphABC. Для его подключения используется следующий код: uses GraphABC; begin . end.

Система координат в Паскале соответствует экранной системе координат и выглядит следующим образом:

Управление цветом

  • SetPenColor(color) — устанавливает цвет пера, задаваемый параметром color;
  • setBrushColor(color) — устанавливает цвет кисти, задаваемый параметром color;
  • либо для палитры RGB: SetPenColor(rgb(0-255, 0-255, 0-255));

или использовать для заливки:

FloodFill(x,y,color) — заливает область одного цвета цветом color, начиная с точки (x,y).

После чего можно использовать процедуры для рисования геометрических фигур.

Читайте также:
Лучшие программы по пауэрлифтингу

clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный

Точки, отрезки и ломаные

Для отображения точки в паскале используется процедура:

SetPixel(x,y,color) — Закрашивает один пиксел с координатами (x,y) цветом color

uses GraphABC; begin SetPixel(300,200,clred); end.

Для рисования линии используется:

Line(x1,y1,x2,y2) — рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2)

uses GraphABC; begin SetPenColor(clgreen); line(100,50,500,250); end.

Ломаные можно рисовать с помощью процедур MoveTo (x1, y1) и LineTo (x2, y2) .
Процедуры работают в паре: MoveTo передвигает курсор в определенную точку, а процедура LineTo рисует линию с этой точки до точки, определенной параметром данной процедуры.

uses GraphABC; begin . SetPenColor(clblue); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5); end.

Для установки размеров графического окна используется процедура

SetWindowSize(ширина, высота)

Рисование фигур

uses GraphABC; begin Rectangle(50,50,200,200); end.

uses GraphABC; begin Rectangle(50,50,200,200); FloodFill(100,100,clBlue); end.

Line(x1,y1,x2,y2);
LineTo(x,y);

uses GraphABC; begin setpenwidth(20); setpencolor(clred); moveTo(300,100); lineTo(500,300); lineto(100,300); lineto(300,100); floodfill(300,200,clgreen); end.

uses GraphABC; begin Circle(500,200,100); FloodFill(500,200,clred); end.

uses GraphABC; Begin SetPenWidth(10); Arc(300,250,150,45,135); end.

Функция random для использования окраски

* раскрасить круги случайным цветом

Нарисовать штриховку на Паскале можно, используя процедуры рисования прямоугольника и линии:

Программа будет выглядеть следующим образом:

uses graphABC; var i, x1, x2, y1, y2, N: integer; h, x: real; begin x1 := 100; y1 := 100; x2 := 300; y2 := 200; N := 10; Rectangle (x1, y1, x2, y2); h := (x2 — x1) / (N + 1); x := x1 + h; for i:=1 to N do begin Line(round(x), y1, round(x), y2); x := x + h; end; end.

Анимация в Паскале

Анимация в программировании заключается в том, что сначала рисуется фигура цветным инструментом, затем с тем же координатами рисуется та же фигура белым цветом. После чего происходит сдвиг фигуры и действия повторяются.

uses GraphABC; var x:integer; begin x:=40; repeat SetPenColor(clWhite); Circle(x,100,10); SetPenColor(clBlack); Circle(x,100,10); x:=x+1 until x>600; end.

Задача

Вывести на экран кубы чисел от A до B, которые вводит пользователь.

Решение

Для решения задачи используется цикл for.

Программа на языке Паскаль:

Пользователь может ввести значения так, что a будет больше b. В таком случае цикл for не выполнится.
Действительно, if здесь лишнее. Оно имеет смысл только в случае, когда обрабатывается ситуация, где значение b меньше, чем a:

Источник: poisk2.ru

Программа для рисования четырёхмерного куба

Начнём с объяснения, что же такое четырёхмерное пространство.

Это — одномерное пространство, то есть просто ось OX. Любая точка на ней характеризуется одной координатой.

Теперь проведём ось OY перпендикулярно оси OX. Вот и получилось двумерное пространство, то есть плоскость XOY. Любая точка на ней характеризуется двумя координатами — абсциссой и ординатой.

Проведём ось OZ перпендикулярно осям OX и OY. Получится трёхмерное пространство, в котором у любой точки есть абсцисса, ордината и аппликата.

Логично, что четвёртая ось, OQ, должна быть перпендикулярной осям OX, OY и OZ одновременно. Но мы не можем точно построить такую ось, и потому остаётся только попытаться представить её себе. У каждой точки в четырёхмерном пространстве есть четыре координаты: x, y, z и q.

Теперь посмотрим, как появился четырёхмерный куб.

На картинке изображена фигура одномерного пространства — линия.

Если сделать параллельный перенос этой линии вдоль оси OY, а потом соединить соответствующие концы двух получившихся линий, получится квадрат.

Аналогично, если сделать параллельный перенос квадрата вдоль оси OZ и соединить соответствующие вершины, то получится куб.

А если сделать параллельный перенос куба вдоль оси OQ и соединить вершины двух этих кубов, то мы получим четырёхмерный куб. Кстати, он называется тессеракт.

Чтобы нарисовать куб на плоскости, нужно его спроецировать. Наглядно это выглядит так:

Представим, что в воздухе над поверхностью висит каркасная модель куба, то есть как бы «сделанная из проволоки», а над ней — лампочка. Если включить лампочку, обвести карандашом тень от куба, а потом выключить лампочку, то на поверхности будет изображена проекция куба.

Читайте также:
Как составить программу диагностики

Перейдём к немного более сложному. Ещё раз посмотрите на рисунок с лампочкой: как видите, все лучи сошлись в одной точке. Она называется точкой схода и используется для построения перспективной проекции( а бывает и параллельная, когда все лучи параллельны друг другу.

Результат — не создаётся ощущения объёма, но она легче, и при том если точка схода достаточно сильно удалена от проецируемого объекта, то разница между этими двумя проекциями мало заметна). Чтобы спроецировать данную точку на данную плоскость, используя точку схода, нужно провести прямую через точку схода и данную точку, а потом найти точку пересечения получившейся прямой и плоскости. А для того, чтобы спроецировать более сложную фигуру, скажем, куб, нужно спроецировать каждую его вершину, а потом соответствующие точки соединить. Следует заметить, что алгоритм проекции пространства на подпространство можно обобщить для случая 4D->3D, а не только 3D->2D.

Как я уже говорил, мы не можем себе точно представить, как выглядит ось OQ, равно как и тессеракт. Зато мы можем получить ограниченное представление о нём, если мы спроецируем его на объём, а потом нарисуем это на экране компьютера!

Теперь поговорим о проекции тессеракта.

Слева находится проекция куба на плоскость, а справа — тессеракта на объём. Они довольно схожи: проекция куба выглядит как два квадрата, маленький и большой, один внутри другого, и у которых соответствующие вершины соединены линиями. А проекция тессеракта выглядит как два куба, маленький и большой, один внутри другого, и у которых соответствующие вершины соединены.

Но мы все видели куб, и можем с уверенностью сказать, что и маленький квадрат, и большой, и четыре трапеции сверху, снизу, справа и слева от маленького квадрата, на самом деле являются квадратами, при чём равными. И у тессеракта тоже самое. И большой куб, и маленький куб, и шесть усечённых пирамид по бокам от маленького куба — это всё кубы, при чём равные.

Моя программа умеет не только рисовать проекцию тессеракта на объём, а ещё и вращать его. Рассмотрим, как делается это.

Для начала я вам расскажу, что такое вращение параллельно плоскости.

Представьте себе, что куб вращается вокруг оси OZ. Тогда каждая из его вершин описывает окружность вокруг оси OZ.

А окружность — фигура плоская. И плоскости каждой из этих окружностей параллельны между собой, и в данном случае параллельны плоскости XOY.

То есть мы можем говорить не только о вращении вокруг оси OZ, а ещё и о вращении параллельно плоскости XOY.Как видим, у точек, которые вращаются параллельно оси XOY меняются только абсцисса и ордината, аппликата же остаётся неизменной И, вообще-то, мы можем говорить о вращении вокруг прямой только тогда, когда имеем дело с трёхмерным пространством. В двумерном всё вращается вокруг точки, в четырёхмерном — вокруг плоскости, в пятимерном пространстве мы говорим о вращении вокруг объёма. И если вращение вокруг точки мы можем себе представить, то вращение вокруг плоскости и объёма — что-то немыслимое. А если будем говорить о вращении параллельно плоскости, то тогда в любом n-мерном пространстве точка может вращаться параллельно плоскости.

Многие из вас, вероятно, слышали о матрице поворота. Умножив точку на неё, получим точку, повёрнутую параллельно плоскости на угол фи. Для двумерного пространства она выглядит так:

Как умножать: икс точки, повёрнутой на угол фи = косинус угла фи*икс первоначальной точки минус синус угла фи*игрек первоначальной точки;
игрек точки, повёрнутой на угол фи=синус угла фи*икс первоначальной точки плюс косинус угла фи*игрек первоначальной точки.
Xa`=cosф*Xa — sinф*Ya
Ya`=sinф*Xa + cosф*Ya
, где Xa и Ya — абсцисса и ордината точки, которую нужно повернуть, Xa` и Ya` — абсцисса и ордината уже повёрнутой точки

Для трёхмерного пространства это матрица обобщается следующим образом:

Вращение параллельно плоскости XOY. Как видим, координата Z не меняется, а меняются только X и Y
Xa`=cosф*Xa — sinф*Ya + Za*0
Ya`=sinф*Xa +cosф*Ya + Za*0
Za`=Xa*0 + Ya*0 + Za*1 (по сути, Za`=Za)

Вращение параллельно плоскости XOZ. Ничего нового,
Xa`=cosф*Xa + Ya*0 — sinф*Za
Ya`=Xa*0 + Ya*1 + Za*0 (по сути, Ya`=Ya)
Za`=sinф*Xa + Ya*0 + cosф*Za

И третья матрица.
Xa`=Xa*1 + Ya*0 + Za*0 (по сути, Xa`=Xa)
Ya`=Xa*0 + cosф*Ya — sinф*Za
Za`=Xa*0 + sinф*Ya + cosф*Za

А для четвёртого измерения они выглядят вот так:

Читайте также:
Усвоение или освоение учебной программы

Думаю, вы уже поняли, что на что множить, потому лишний раз расписывать не буду. Зато замечу, что она делает то же самое, что и матрица для поворота параллельно плоскости в трёхмерном пространстве! И та, и эта изменяют только ординату и аппликату, а остальные координаты не трогают, потому её можно использовать и в трёхмерном случае, просто не обращая внимания на четвёртую координату.

А вот с формулой проекции не всё так просто. Сколько я ни читал форумов, мне не подошёл ни один из способов проекции. Параллельная мне не подходила, так как проекция не будет выглядеть объёмной. В одних формулах проекции для нахождения точки нужно решить систему уравнений( а я не знаю, как научить компьютер их решать), другие я просто-напросто не понял… В общем, я решил придумать свой способ. Рассмотрим для этого проекцию 2D->1D.

pov значит «Point of view» (точка зрения), ptp значит «Point to project» (точка, которую нужно спроецировать), а ptp` — это искомая точка на оси OX.

Углы povptpB и ptpptp`A равны как соответствующие( пунктирная линия параллельна оси OX, прямая povptp — секущая).
Икс точки ptp` равен иксу точки ptp минус длина отрезка ptp`A. Этот отрезок можно найти из треугольника ptpptp`A: ptp`A = ptpA/тангенс угла ptpptp`A. Мы можем найти этот тангенс из треугольника povptpB: тангенс угла ptpptp`A = (Ypov-Yptp)(Xpov-Xptp).
Ответ: Xptp`=Xptp-Yptp/тангенс угла ptpptp`A.

Я не стал подробно расписывать этот алгоритм тут, так как там куча частных случаев, когда формула несколько меняется. Кому это интересно — посмотрите в исходниках программы, там всё расписано в комментариях.

Для того, чтобы спроецировать точку трёхмерного пространства на плоскость, просто рассмотрим две плоскости — XOZ и YOZ, и для каждой из них решим эту задачу. В случае четырёхмерного пространства нужно рассмотреть уже три плоскости: XOQ, YOQ и ZOQ.

И наконец, про программу. Она действует так: инициализировать шестнадцать вершин тессеракта -> в зависимости от введённых пользователем команд повернуть его -> спроецировать на объём -> в зависимости от введённых пользователем команд повернуть его проекцию -> спроецировать на плоскость -> нарисовать.

Проекции и повороты я написал сам. Они работают по формулам, которые я только что описал. Библиотека OpenGL рисует линии, а так же занимается смешиванием цветов. А координаты вершин тессеракта вычисляются таким образом:

Координаты вершин линии с центром в начале координат и длинной 2 — (1) и (-1);
— » — » — квадрата — » — » — и ребром длинной 2:
( 1; 1 ), ( -1; 1), (1; -1) и (-1; -1);
— » — » — куба — » — » -:
( 1; 1; 1 ), ( -1; 1; 1), (1; -1; 1), (-1; -1; 1), ( 1; 1; -1 ), ( -1; 1; -1), (1; -1; -1), (-1; -1; -1);
Как можно было заметить, квадрат — это одна линия над осью OY и одна линия под осью OY; куб — это один квадрат спереди от плоскости XOY, и один за ней; тессеракт — это один куб по ту сторону объёма XOYZ, и один — по эту. Но куда легче воспринять это чередование единиц и минус единиц, если их записать в столбик

1; 1; 1
-1; 1; 1
1; -1; 1
-1; -1; 1
1; 1; -1
-1; 1; -1
1; -1; -1
-1; -1; -1

В первом столбце один и минус один чередуются. Во втором столбце сначала идёт два плюса, потом два минуса. В третьем — четыре плюс единицы, а потом четыре минус единицы. Это были вершины куба. У тессеракта их в два раза больше, и потому нужно было написать цикл для их объявления, иначе очень легко запутаться.

Моя программа так же умеет рисовать анаглиф. Счастливые обладатели 3D-очков могут наблюдать стереоскопическую картинку. В рисовании картинки нет ничего хитрого, просто рисуется две проекции на плоскость, для правого и левого глаз. Зато программа становится намного более наглядной и интересной, а главное — даёт лучшее представление о четырёхмерном мире.

Менее значительные функции — подсветка одной из граней красным, чтобы лучше можно было разглядеть повороты, а так же мелкие удобства — регуляция координат точек-«глаз», увеличение и уменьшение скорости поворота.

  • Математика
  • геометрия
  • четырёхмерное пространство
  • анаглиф

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru