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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Бравый генерал
сообщение 25.04.2006 20:09
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 39
Пол: Мужской
Реальное имя: Василий

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


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


Ну, имелось наверно ввиду, что источник света - это точка, которая находится в центре монитора, а глаза человека, т.е. камера - это весь монитор. Да, из любой точки тени центр монитора виден не будет smile.gif Но другие участки монитора будут видны, следовательно и на мониторе будет отображаться тень. Вот простенькая схема, показывающая что тень, хоть и не вся, но на мониторе будет видна.


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 26.04.2006 3:56
Сообщение #3


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

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

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


Цитата(Бравый генерал @ 25.04.2006 20:09) *

Ну, имелось наверно ввиду, что источник света - это точка, которая находится в центре монитора, а глаза человека, т.е. камера - это весь монитор. Да, из любой точки тени центр монитора виден не будет smile.gif Но другие участки монитора будут видны, следовательно и на мониторе будет отображаться тень. Вот простенькая схема, показывающая что тень, хоть и не вся, но на мониторе будет видна.

Бравый генерал, глаза человека не могут быть всем монитором. Ты несколько путаешь понятия. Давай разберемся.

Возьмем твою схему. Я не сразу понял, что есть что. Слово "Перспектива" вообще вводит в замешательство. Но потом я, кажется, понял, что ты хочешь сказать. Сейчас я выскажу свои соображения, а ты потом скажи, если с чем-то не согласен.

1. Глаз (или объектив) - это точка (точечный, малый объект). Лучи, ведущие к нему (или от него, что одно и то же), толжны все сходится на входе в глаз. Возможна, правда, ситуация, когда лучи параллельны (или почти параллельны), но она означает, что глаз просто находится бесконечно (или очень) далеко.

2. Я достроил твою схему, чтобы показать, что она на самом деле изображает (мои добавления все зеленые). Я так понял, что две боковые пунктирные линии ограничивают поле зрения. Таким образом, они должны являться продолжениями лучей, исходящих из глаза. Я продолжил их до пересечения.

3. Красные линии, по всей видимости, тоже направлены на глаз (ибо они показывают как видна тень). Таким образом, они тоже должны приходить в глаз.

4. В результате мы видим, что твоя схема неявно подразумевает, что глаз находится на некотором расстоянии от экрана (как, собственно, и есть на самом деле). Если источник света расположить как на твоей схеме, то тень действительно получается видна - она как бы вылезает за края предмета.

Прикрепленное изображение

Ты видишь разницу? stefi78 сказала: "Т.Е. ГЛАЗА (ЧЕЛОВЕКА КОТОРЫЙ СМОТРИТ НА ЭКРАН) ЯВЛЯЮТСЯ ЛАМПОЙ". И я отвечал ей в полном соответствии с ее словами. Если она имел в виду что-то другое - ну, это так и осталось в ее виду.. smile.gif А ответ на ее слова - он один. Любой может провести эксперимент: берешь фонарик, подносишь его как можно ближе к глазу (второй глаз закрыт) - и ты увидишь, что теней нету! Ну, с той точностью, с которой можно поднести фонарь к глазу. Да даже и экспериментировать не нужно - берешь любое фото, сделанное камерой (желательно мыльницей, они маленькие) со встроенной вспышкой. И увидишь, что тень едва видна черным контуром по краю человека, стоящего у стены. Этот черный контур - это результат того, что вспышка все же немного отнесена от объектива. В идеале тени не было бы вообще. Можно и продолжить эксперимент - вынести фонарик на вытянутой руке вперед, по центральному лучу зрения, и ты увидишь, что тень начала вылезать за края - в точности та ситуация, что на твоей схеме.

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

Сообщение отредактировано: lapp - 26.04.2006 3:59


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  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:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"