Народ! Не в службу...... ПАМАГИТЕ!!!

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
zaochnik
Сообщения: 4
Зарегистрирован: 14 янв 2008, 07:45

Задача в турбопаскале. Даны 3 оси x,y,z. В них нарисована любая буква алфавита (например О), получается что она 3-хмерная. надо заставить вращаться эту букву слева направо. Ну типа как крутится земной шар.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ну ничего себе... А шрифт какой брать? Как букву сделать трехмерной - просто плоскую букву в пространстве, призмой, или как-то извратно? Что-то неконкретное задание. А вообще, имхо, это не для паскаля задачка, а для DirectX
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
zaochnik
Сообщения: 4
Зарегистрирован: 14 янв 2008, 07:45

буква О если ее нарисовать в этих 3 осях получится однозначно не плоской. а вращаться все это дело должно относительно горизонтальной оси
zaochnik
Сообщения: 4
Зарегистрирован: 14 янв 2008, 07:45

Попробую сформулировать корректно постановку задачи.
сделать на экране 3 оси координат и вращающуюся плоскую букву.
или просто - вращающуюся плоскую букву А. Хотя букву можно выбрать абсолютно любую
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ну, во-первых, надо найти формулы для отображения трехмерного пространства на двухмерную плоскость монитора. Я думаю, что-то вроде следующего (на экране ось Ох направлена вправо вниз, Оу - влево вниз, Oz - вверх):
X2=getmaxx div 2 + sqrt(3)*x/2 - sqrt(3)*y/2 {это изометрическая проекция}
Y2=getmaxy div 2 - z +y/2 + x/2

Вот где-нибудь так. getmaxx/getmaxy пополам - потому что центр координат будет находиться по центру экрана. Множители при х и у (sqrt(3)/2 и 1/2) можно подбирать другие, главное, чтобы сумма их квадратов давала 1.

Буква у нас должна вращаться, я так думаю, вокруг оси Z. Или по крайней мере вокруг оси, параллельной Z.
Берем и от балды ставим точки в пространстве, чтобы соединив их линиями, получили букву А. Ну, к примеру:
(10, 0, 0), (-10, 0, 0) - основания
(5, 0, 15), (-5, 0, 15) - поперечная палка
(0, 0, 30) - вершина
Потом берем и втыкаем ось вращения в произвольную точку на плоскости ХОУ. Для каждой из точек буквы А находим расстояние от точки до оси и угол между какой-нибудь прямой (той же осью Х) и этой точкой. Потом создаем переменную для угла поворота (в начале 0), по таймеру ее изменяем, изменяем все углы на эту же величину, потом для каждой точки координаты изменяются на (Хоси+R*sin(alpha), Yoси+R*cos(alpha), Z), где R - расстояние от точки до оси, alpha - угол между заданной осью и лучом на точку. Потом преобразуем трехмерные координаты в двухмерные и отображаем прямые на экране.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
zaochnik
Сообщения: 4
Зарегистрирован: 14 янв 2008, 07:45

только как трехмерные в двухмерные преобразовать?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Вот моя прога, я ее писал еще где-то в 98 году, посему сильно не пинайте за стиль, ну и еще кое за что, больше 3do файлов я не создавал ;)
It's a long way to the top if you wanna rock'n'roll
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

zaochnik писал(а):только как трехмерные в двухмерные преобразовать?
Ну писал же паскальским по белому!
X2=getmaxx div 2 + sqrt(3)*x/2 - sqrt(3)*y/2
Y2=getmaxy div 2 - z +y/2 + x/2

Сделать эти две формулы в качестве функций, и, кстати, надо не забывать округлять до целого
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

somewhere, Красавчик!!
3D - просто супер!!!! и главное, чтобы сдать - нужно хотя бы почистить файл fuck.3do!! Иначе, вместо зачёта можно получить то, что вращается... ;-))))
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Да уж, 3D.zip - сильная демка! :LOL:

Кстати, после сборки у меня вылетелапо runtime 200. Это известная ошибка при использовании модуля CRT при запуске на быстрых (по сравнению с 1990-ми годами :) ) компах. В свое время писалось об этой проблеме. Надо или что-то-там патчить или заменить использование CRT на TpCRT или OpCRT (что я и сделал :) )
Ну и плюс BGI-шные файлы в тот же каталог положить. Кстати, есть технология, как нужные BGI подлинковать "внутрь" паскалевкой программы.
Ответить