SetCombG.com Forum
22.05.2012, 15:40 *
Добре дошъл/дошла, Гост. Моля, въведи своето потребителско име или се регистрирай.
Изгуби ли регистрационния е-мейл?

Влез с потребителско име, парола и продължителност на сесията

  НОВИНИ МАГАЗИН   Начало   Помощ Търси Календар Галерия Вход Регистрация  

Страници: [1]   Надолу
  Изпечатай  
Автор Тема: Геометрична 3D задача  (Прочетена 1632 пъти)
0 Участници и 2 Гости преглежда(т) тази тема.
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« -: 5.03.2011, 13:55 »

Това е един малък проблем с елементарно решение, която решавах преди повече 15 години. Тогава имаше 3d графика, но използването й беше изключително сложно.

Да си представим че имаме полигон с 4 ъгъла. Всеки от тях изобразен с координати (x,y,z). Имаме и екран - монитор. На него всичко се изобразява в двуизмерни координати (x,y). Ако екрана е с резолюция 1024x768 какви са 4-те екранни координати на (x1,y1,z1),(x2,y2,z2),(x3,y3,z3) и (x4,y4,z4)?
Активен
SetCombG.com
« -: 5.03.2011, 13:55 »

 Активен
Yasen6275
Ентусиаст
*
Неактивен Неактивен

Публикации: 310


-=Шемет=-

33910621 yasen6275
« Отговор #1 -: 7.03.2011, 02:35 »

Така зададена задачата е леко неясна и непълна. Под полигон с 4 ъгъла какво се разбира? Произволна плоскост с 4 ъгъла? ( с други думу казанано прозиволен четириъгълник исрязан от безкрайно тънка "хартия") Или тетраедър?  Blob Blob Blob

И в двата случия условието е непълно. В първия ни трябва ъгъл между плоскоста на полигона и тази на екрана, а във втория ъгъл межди екрана и една от стените на тетраедара. Blob Blob Blob

Та каква всъшност е задачата? Blob Blob Blob

Активен

He who asks is a fool for five minutes, but he
who does not ask remains a fool forever.
Old Chinese saying
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« Отговор #2 -: 7.03.2011, 08:48 »

Условието е дори по-пълно отколкото трябва. :default

Задачата има много ясно решение.

п.п. Направо ме хвърли в тъч с ъглите laugh
Активен
Bibi
Форум-маниак
Фен
Пристрастен
*
Неактивен Неактивен

Публикации: 1765


заплес

284435418
« Отговор #3 -: 7.03.2011, 09:05 »

Ако не трябва да се изобразява перспективата, просто отпадат z-координатите - т.е. правим ортогонална проекция. Или пак бъркам?
Активен

SetCombG.com
« Отговор #3 -: 7.03.2011, 09:05 »

 Активен
Yasen6275
Ентусиаст
*
Неактивен Неактивен

Публикации: 310


-=Шемет=-

33910621 yasen6275
« Отговор #4 -: 7.03.2011, 09:49 »

Ако не трябва да се изобразява перспективата, просто отпадат z-координатите - т.е. правим ортогонална проекция. Или пак бъркам?
Ако нямаме перспектива на базата на какво твърдим че наблюдатела се намира по оста z?

А разтоянието на което се намира обекта от проекцията също ли ня ма значение? Blob Blob Blob

« Последна редакция: 7.03.2011, 16:41 от Yasen6275 »
Активен

He who asks is a fool for five minutes, but he
who does not ask remains a fool forever.
Old Chinese saying
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« Отговор #5 -: 8.03.2011, 02:08 »

Ако нямаме перспектива на базата на какво твърдим че наблюдатела се намира по оста z?

А разтоянието на което се намира обекта от проекцията също ли ня ма значение? Blob Blob Blob

Не разбрах въпроса с проекцията. Ако говорим разстояние "въображаем 3d обект"-"проекцията му на екрана" - то няма значение и не се изчислява изобщо.

Иначе переспектива си имаме. В случия бих приел че е на L пиксела от повърхноста на монитора.

« Последна редакция: 8.03.2011, 02:15 от Hpz »
Активен
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« Отговор #6 -: 10.03.2011, 02:36 »

Задачата е по-проста от това което изглежда.
Активен
Yasen6275
Ентусиаст
*
Неактивен Неактивен

Публикации: 310


-=Шемет=-

33910621 yasen6275
« Отговор #7 -: 11.03.2011, 02:01 »

1. Не уточни каква е фигурата. Паралелепипед без дебелина или тетраедър.
2. Изобразяването на какъвто и да е триизмерен обект на екран с две измерения няма как да стане без проекция. Ортогоналната проекция няма особен смисъл ако се опитваме да имитираме тризмерност. Когато се симулира триизмерност, обикновено се прави проекция на обекта върху екрана, като се свързва всяка негова точка с точка намираща се на 40-50 см от екрана, там където се намират обикновено очите на човек. Там където правите пресичат екрана се намират пикселите чийто цвят се определя от дадения обект.
3. Така както аз я разбирам задачата няма нищо общо с логическите, а си е чисто геометрична.

Активен

He who asks is a fool for five minutes, but he
who does not ask remains a fool forever.
Old Chinese saying
SetCombG.com
« Отговор #7 -: 11.03.2011, 02:01 »

 Активен
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« Отговор #8 -: 11.03.2011, 23:25 »

1. Не уточни каква е фигурата. Паралелепипед без дебелина или тетраедър.
2. Изобразяването на какъвто и да е триизмерен обект на екран с две измерения няма как да стане без проекция. Ортогоналната проекция няма особен смисъл ако се опитваме да имитираме тризмерност. Когато се симулира триизмерност, обикновено се прави проекция на обекта върху екрана, като се свързва всяка негова точка с точка намираща се на 40-50 см от екрана, там където се намират обикновено очите на човек. Там където правите пресичат екрана се намират пикселите чийто цвят се определя от дадения обект.
3. Така както аз я разбирам задачата няма нищо общо с логическите, а си е чисто геометрична.


По точка 2 си прав! По точка 3 - също - прочети заглавието на темата :default

Ади сега да видим можете ли да я решите, въпреки че е ясно че можете...
Активен
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« Отговор #9 -: 14.03.2011, 23:15 »

Това е един малък проблем с елементарно решение, която решавах преди повече 15 години. Тогава имаше 3d графика, но използването й беше изключително сложно.

Да си представим че имаме полигон с 4 ъгъла. Всеки от тях изобразен с координати (x,y,z). Имаме и екран - монитор. На него всичко се изобразява в двуизмерни координати (x,y). Ако екрана е с резолюция 1024x768 какви са 4-те екранни координати на (x1,y1,z1),(x2,y2,z2),(x3,y3,z3) и (x4,y4,z4)?

Нека разстоянието от екрана е 1500 пиксела, тогава:

xe1 = 1024/2-(1024/2-x1)*(1500/(z1+1500))
ye1 = 768/2-(768/2-y1)*(1500/(z1+1500))

Аналогично за останалите 3 точки.
Активен
Yasen6275
Ентусиаст
*
Неактивен Неактивен

Публикации: 310


-=Шемет=-

33910621 yasen6275
« Отговор #10 -: 18.03.2011, 15:06 »

Нека разстоянието от екрана е 1500 пиксела, тогава:

xe1 = 1024/2-(1024/2-x1)*(1500/(z1+1500))
ye1 = 768/2-(768/2-y1)*(1500/(z1+1500))

Аналогично за останалите 3 точки.
xei = 512(1-(1-хi)/(zi/1500+1))=(512/(zi/1500+1))*(zi/1500+1-1+хi)=(zi/1500+хi)*512/(zi/1500+1)
Аналогичните  разждени за другата координата водят до  формулата:
ye1 = (zi/1500+уi)*384/(zi/1500+1)
Тези формули дават неотрицателни стойности за xe1 и ye1  само за много малки стойности на  хi и уi. Тоест само за малки обекти.

Нещо не ми изглежда общовалидно.

А и къде се намири наблюдателя в голямата координатна система?

« Последна редакция: 18.03.2011, 19:15 от Yasen6275 »
Активен

He who asks is a fool for five minutes, but he
who does not ask remains a fool forever.
Old Chinese saying
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« Отговор #11 -: 19.03.2011, 15:31 »

Нещо не ми стана ясно твоята формула и защо изобщо я пишеш.

Наблюдателя в случая - точно по средата на екрана на 1500 пиксела навън.

При 3-измерни координати, където z=0 - x и y са същите, защото лежат на екрана.

Ако са по-навътре - проекцията им се приближава към центъра.

Обекти извън екрана (по-близо до нас с отрицателно z) лесно могат да излязат от екрана, т.е. проекцията им на екрана да не се събира в неговите граници.

При z=0: xe = 1024/2-(1024/2-x)*(1500/(z+1500)=512-(512-x)*(1500/1500)=512-512+x=x
това е защото 1500/(z+1500)=1 при z=0
при z=1500 (1500 пиксела дълбочина) проекцията е 2 пъти по-близка до цетъра - 1500/3000 = 1/2  т.е. xe=512-(512-x)*(1/2)= 256+x/2

« Последна редакция: 19.03.2011, 15:54 от Hpz »
Активен
Yasen6275
Ентусиаст
*
Неактивен Неактивен

Публикации: 310


-=Шемет=-

33910621 yasen6275
« Отговор #12 -: 21.03.2011, 11:08 »

Нещо не ми стана ясно твоята формула и защо изобщо я пишеш.
За да се проследят по лесно зависимостите между променливите. Опитал съм се да преработя твоята формула но не съм бил прецизен. Ще се поправя после.
Наблюдателя в случая - точно по средата на екрана на 1500 пиксела навън.
И тези неща се подразбират от ...
При 3-измерни координати, където z=0 - x и y са същите, защото лежат на екрана.
Това малко ми противоречи на разбиранията за тризмерност, но няма да споря, защото е въпрос на модел.
Ако са по-навътре - проекцията им се приближава към центъра.
Искаш да кажеш че всеки отдалечаващ се от наблщдатела обект отива към центъра на екрана. Е тук няма как да се съглася.
Обекти извън екрана (по-близо до нас с отрицателно z) лесно могат да излязат от екрана, т.е. проекцията им на екрана да не се събира в неговите граници.
При z=0: xe = 1024/2-(1024/2-x)*(1500/(z+1500)=512-(512-x)*(1500/1500)=512-512+x=x
това е защото 1500/(z+1500)=1 при z=0
при z=1500 (1500 пиксела дълбочина) проекцията е 2 пъти по-близка до цетъра - 1500/3000 = 1/2  т.е. xe=512-(512-x)*(1/2)= 256+x/2
Нормалния вид на формулите които си дал е:
xei = (512*zi+1500*xi)/(zi+1500)
yei = (384*zi+1500*yi)/(zi+1500)
Активен

He who asks is a fool for five minutes, but he
who does not ask remains a fool forever.
Old Chinese saying
Hpz
Участник
*
Неактивен Неактивен

Публикации: 44


« Отговор #13 -: 21.03.2011, 15:21 »

За нормалния вид е вярно, но не е много ясен. Пък и другия вид е по-добър за сметки (за да не се получи препълване). Между другото в практиката лесно се заменя k=1500/(z+1500), и после се ползва при x и при y... вместо да се изчислява 2 пъти.

Първите 3d игри работят на този принцип. Аз лично съм правил много яки 3d изображения за времето си по тези формули. Сега си има GPU... yahoo
Активен
SetCombG.com Forum
   

 Активен
Страници: [1]   Нагоре
  Изпечатай  
       
Сподели тази тема в DiggСподели тази тема в FacebookСподели тази тема в MySpaceСподели тази тема в TechnoratiСподели тази тема в Twitter
 
Отиди на:  


Валиден XHTML 1.0! Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines  | Задвижван от PersyPersy serverсървър

VzemiPC | Sitemap | Sharp BG
Валиден CSS!
Страницата е създадена за 0.072 секунди с 44 запитвания.