IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> 3d, 3d пирамида-тень
stefi78
сообщение 24.04.2006 17:53
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Таня

Репутация: -  0  +


Помогите пожалуйста , пирамиду нарисовала smile.gif она вертится smile.gif ,но должна отбрасывать тень unsure.gif wacko.gif и с тенью проблемы

Program laba1;
uses
Graph,Crt;

type
pyram=array[1..5] of record x,y,z,v:real end;

{verts-Є®®а¤Ё­ вл (xyz) ўҐаиЁ­ дЁЈгал}
const
verts:pyram=(
(x: 0 ; y: 0; z: 40; v:1), {1-п ўҐаиЁ­ }
(x: 40; y: 0; z: 0; v:1), {2}
(x: 0 ; y: 0; z: -40; v:1), {3}
(x:-40; y: 0; z: 0; v:1), {4}
(x: 0; y: - 90; z: 0; v:1) );{5}
var
c: char;
Gd, Gm,i,yt : Integer; {ѓа дЁЄ }

procedure DrawPyrS(c,xt,yt:Integer);
var
i,midX,midY:Integer;
c1: byte;
ver:array[1..5] of PointType;
begin
midX:= GetMaxX div 2;
midY:= GetMaxY div 2;
for i:=1 to 5 do
begin
ver[i].x:=round(verts[i].x)+Xt+midX;
ver[i].y:=round(verts[i].y)+Yt+midY;
end;
SetColor( c );
Line(ver[1].x, ver[1].y , ver[2].x, ver[2].y);
Line(ver[1].x, ver[1].y , ver[4].x, ver[4].y);
Line(ver[1].x, ver[1].y , ver[5].x, ver[5].y);
Line(ver[2].x, ver[2].y , ver[3].x, ver[3].y);
Line(ver[2].x, ver[2].y , ver[5].x, ver[5].y);
Line(ver[3].x, ver[3].y , ver[4].x, ver[4].y);
Line(ver[3].x, ver[3].y , ver[5].x, ver[5].y);
Line(ver[4].x, ver[4].y , ver[ 5].x, ver[5].y);

end;


Procedure rotTxYz(a: Real; S: Real);{ўа 饭ЁҐ ў®ЄагЈ XYZ + Zoom}
Var
ca,sa,y1,x1,z1: Real;
i: Integer;
begin
for i:=1 to 5 do
begin
ca:=cos(a);
sa:=sin(a);
x1:= verts[i].x*ca*ca + verts[i].y*sa*ca + verts[i].z*sa;
y1:= verts[i].x*((-sa)*ca-ca*sa*sa) + verts[i].y*(ca*ca-sa*sa*sa) + verts[i].z*ca*sa;
z1:= verts[i].x*(sa*sa-ca*sa*ca) + verts[i].y*((-ca)*sa-sa*sa*ca) + verts[i].z*ca*ca;
verts[i].x:=x1*S;
verts[i].y:=y1*S;
verts[i].z:=z1*S;
end
end;

begin
{€­ЁжЁ «Ё§ жЁп Ја дЁЄЁ}
Gd:= Detect;
InitGraph(Gd, Gm, 'D:\progra~1\tp\BGI'); { Џгвм Є BGI ¤а ©ўҐа ¬ }
if GraphResult <> grOk then
Halt;
{ђЁб®ў ­ЁҐ}
yt:=-170;
repeat
for i:=1 to 50
do begin
drawpyrS(2,0,yt);
Delay(10000);
drawpyrS(0,0,yt);
rotTxYz(0.05,1.015);
yt:=yt+6
end;
for i:=1 to 50
do begin
drawpyrS(2,0,yt);
Delay(10000);
drawpyrS(0,0,yt);
rotTxYz(0.05,0.985);
yt:=yt-6
end


until Keypressed;
CloseGraph;
end.


выход esc когда пирамида находится в верхней точке

stefi78, с тегами лучше смотрится, правда? wink.gif

Сообщение отредактировано: volvo - 2.11.2006 16:34
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
stefi78
сообщение 24.04.2006 19:49
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский
Реальное имя: Таня

Репутация: -  0  +


ИСТОЧНИК СВЕТА ПЕРЕД ПИРАМИДОЙ

Т.Е. ГЛАЗА (ЧЕЛОВЕКА КОТОРЫЙ СМОТРИТ НА ЭКРАН) ЯВЛЯЮТСЯ ЛАМПОЙ
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 25.04.2006 4:16
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(stefi78 @ 24.04.2006 19:49) *

ИСТОЧНИК СВЕТА ПЕРЕД ПИРАМИДОЙ

Т.Е. ГЛАЗА (ЧЕЛОВЕКА КОТОРЫЙ СМОТРИТ НА ЭКРАН) ЯВЛЯЮТСЯ ЛАМПОЙ

stefi78, если источник света действительно находится в точке, из которой смотрят (предполагается, по-видимому, что глаз один), то смотрящий никогда не увидит тени. Независимо от того, какая поверхность сзади - стена, лес - тень всегда будет загорожена самим предметом. Нужно это пояснять или понятно и так?
Кроме того, обычно проще (по крайней мере для начала) иметь бесконечно удаленный источник света. Тогда лучи от него будут параллельны друг другу, и нужно задать только угол их падения. Такая ситуация совершенно реальна - например, именно так устроена тень в солнечном свете.

Далее, кроме источника света, нужно задать поверхность, на которую падает тень. Если такой поверхностью является, грубо говоря, земля (пол), и Солнце светит точно из зенита, то тенью будет являться простая проекция пирамиды на плоскость z=0, то есть достаточно занулить вертикальную координату, и ты получишь тень. Но тут есть одно "но", про которое уже упоминал Бравый генерал. А именно: вся тень выродится в линию, так как горизонтальная плоскость строго перпендикулярна экрану и все ее изображение есть одна линия. Чтобы увидеть ее - Бравый генерал прав - надо вводить перспективу. Но это тема для отдельного разговора..

Мудрено я выражаюсь?.. Спрашивай, если что непонятно. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
stefi78   3d   24.04.2006 17:53
volvo   stefi78, если спроецировать каждую вершину пирамид...   24.04.2006 18:08
Бравый генерал   Если прямоугольно проецировать вершины на горизонт...   24.04.2006 18:33
volvo   Бравый генерал, я где-то написал слово "прямо...   24.04.2006 18:49
Бравый генерал   Вообще-то я и не спорил с тобой (и ни с кем-либо е...   24.04.2006 19:17
stefi78   ИСТОЧНИК СВЕТА ПЕРЕД ПИРАМИДОЙ Т.Е. ГЛАЗА (ЧЕЛОВЕ...   24.04.2006 19:49
lapp   ИСТОЧНИК СВЕТА ПЕРЕД ПИРАМИДОЙ Т.Е. ГЛАЗА (ЧЕЛОВ...   25.04.2006 4:16
Бравый генерал   Ага, т.е. тень вроде как на стену падает, да? Если...   24.04.2006 20:24
stefi78   если сделаешь буду благодарна в паскале я еще тот ...   25.04.2006 0:00
Бравый генерал   Ну, имелось наверно ввиду, что источник света - ...   25.04.2006 20:09
lapp   Ну, имелось наверно ввиду, что источник света - э...   26.04.2006 3:56
Бравый генерал   Аааа.... Я понял, что ты имеешь ввиду. Да, ты расс...   26.04.2006 15:11
Бравый генерал   Сделал наконец. Прикрепляю архив. В архиве в папке...   26.04.2006 18:47
Jorik   А можно узнать, где взять VESA.TPU? А то пишет Err...   27.04.2006 13:16
Гость   Прикольные картинки получаются! Только вот поп...   28.04.2006 8:44
Бравый генерал   А, точно! Просто у меня там в корне и Vesa.tpu...   27.04.2006 14:40
stefi78   СПАСИБО ОГРОМНОЕ!!! за помощь :give_r...   7.05.2006 15:24


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 23:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"