Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Вниз

Как отобразить 3D функцию на экране?   Найти похожие ветки 

 
-=DeMoH=-   (2003-09-23 22:48) [0]

Вот суть моей проблемы: делается математическая программа, которая рассчитывает уравнение движения некоторого тела (скажем, шарика в кубе). И вот когда это уравнение движения уже создпно, требуется красиво это вывести на форму. Как это можно сделать?
Пока я использую компонент TChart но так как он не может отображать трехмерные графики, приходится использовать три таких компонента и в итоге отображается три графика (по X, по Y и по Z) а это, естественно очень не наглядно...
Если у кого есть идеи, напишите как, например, нарисовать по стандартной математической функции эллипс или что-нить в этом роде...


 
Jeer   (2003-09-24 10:32) [1]

Математику учить из разделов афинная и проективная геометрии.
А рисование на Canvas никто не отменял.


 
-=DeMoH=-   (2003-09-24 10:36) [2]

Идея, конечно, неплохая, но может кто-нить предложит конкретную реализацию. Скажем, имеется трехмерный массив координат точек (X,Y,Z), которые надо отобразить на экране в трехмерном виде (без разницы как, главное, чтобы полученное изображение хотя бы отдаленно напоминало трехмерное тело :)
Например, так, как это делает Maple или AutoCAD.


 
Jeer   (2003-09-24 10:52) [3]

Второй вопрос совсем не похож на первый:)
Что надо-то ?
Строить кривую в трехмерном пространстве или на основании
части точек принадлежащих некоторому телу построить его трехмерную модель?


 
pasha_676   (2003-09-24 11:42) [4]

Самое простое решение для реализации лежит в области использования компонента GLScene. И функцию там на рисуешь и движение тела и подразными углами посмотришь... В отличии от изучения чистого OpenGL или DirectX очень быстро можно все навоять и эффект будет хорошим.
Вообщем рекомендую покрутить его и примеры к нему...


 
-=DeMoH=-   (2003-09-24 12:17) [5]

Скажем так, нужно построить поверхность такого рода:
(sqrt(x^2+y^2)+1)^2+z^2-4=0 где x,y,z лежат в интервале от -1 до 1.
В математическом пакете Maple-7 получается что-то типа обручального кольца :)
Как это можно построить в Delphi


 
Jeer   (2003-09-24 12:23) [6]

1. Изучать принципы построения поверхностей и реализовывать самому.
2. Воспользоваться советом pasha_676 © (24.09.03 11:42) [4]
Но от изучения принципов это не избавит


 
-=DeMoH=-   (2003-09-24 13:54) [7]

т.е. ничего конкретного в делфине нет? Тогда буду рад, если мне кто-нибудь поможет с алгоритмом...


 
pasha_676   (2003-09-24 13:55) [8]

http://glscene.sourceforge.net/gallery_users.htm

Примеры на GLScene. Обрати внимание на пример FormEx3D
Помоему то что нужно...


 
pasha_676   (2003-09-24 14:03) [9]


> т.е. ничего конкретного в делфине нет?

Есть, но если ты читать не умеешь...
Есть четыре основных способа построения 3D пространства
1) Считать самому и выводить на экран через канвас - трудоемко и долго
2) OpenGL
3) DirectX
4) Подцепить через ОЕМ или COM уже существующую программу (тот же макс или инвентор) и крутить там. Требует серьезного изучения и серьезных док по этим программам с раскладкой по интерфейсам.

Наиболее легкий в освоении, универсальный и быстрый путь лежит через компоненты надстройки на OpenGL и DirectX. Одним из них, пожалуй самым продвинутым и простым, как раз и является GLScene.


 
Jeer   (2003-09-24 14:11) [10]

-=DeMoH=- © (24.09.03 13:54) [7]
А что должно быть конкретного ?
ObjPas универсальный язык, а не распальцовка на сходке.

Все в Ваших руках и, надеюсь, в мозгах.

Если же Вы ищете очередное нажатие на "бутон", так это не пройдет.
Учитесь думать или занимайтесь тем, где этого не требуется.


 
-=DeMoH=-   (2003-09-24 18:20) [11]

попробую GLScene...


 
-=DeMoH=-   (2003-09-24 18:30) [12]

Посмотрел я этот пример - вещь скорее всего очень полезная, но обе данные ссылки убитые :(
Если кто знает, где енто можно еще достать - срочно делитесь!
Кстати, вопрос к тем, кто уже ставил этот GLScene: я прочитал, что там уже есть пачка примеров. Нет ли там что-нить полезного по моему вопросу, а то у меня не такая мощная связь, чтобы запросто качать все подряд...


 
Hooch   (2003-09-24 18:39) [13]

возми TChartPro он умеет строить в 3D даже c поддрежкой OpenGL


 
-=DeMoH=-   (2003-09-24 20:19) [14]

А где его взять? (не сочти за ламерский вопрос, но в компонентах, идущих в составе дельфина-7 ентерпрайс, я такого компонента не видел)


 
pasha_676   (2003-09-25 09:06) [15]

http://glscene.sourceforge.net - у меня работает. Оттэдова из даунлоада и качай сам компонент.



> я прочитал, что там уже есть пачка примеров. Нет ли там
> что-нить полезного по моему вопросу, а то у меня не такая
> мощная связь, чтобы запросто качать все подряд...


Да есть там есть... Прям с самим компонентом в поставке... Много полезного и тонны полезного... По ним и учился..


 
-=DeMoH=-   (2003-09-25 16:44) [16]

Щас попробую...


 
-=DeMoH=-   (2003-09-25 19:17) [17]

уффф, наконец-то я это выкачал. После пяти-деляти (не 50 :) попыток эти компоненты встали на мою делфю, я нашел подходящий для меня компонент в папке Demos\Graph под названием fxy.
Но тут появилвсь другая проблема: к примеру, вышеприведенная формула рисуется в MAPLE-7 как кольцо, тем не менее программа fxy рисует мне половинку яйца (:->)
Чтобы это могло быть?
P.S.: насколько я понял, писать функцию нужно как z=f(x,y), т.е. моя формула
(sqrt(x^2+y^2)+1)^2+z^2=4 нужно преобразовать примерно так:
z=sqrt((1-sqrt(x*x+y*y))*(3+sqrt(x*x+y*y))
так что же не так?


 
pasha_676   (2003-09-26 10:44) [18]

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


 
-=DeMoH=-   (2003-09-26 12:05) [19]

я думаю, что в MAPLE получается кольцо именно из-за того, что в нем накладывается условие X,Y,Z=[-1;1].
Если у кого есть какие-то предложения - высказывайтесь.
Программа, представленная в примерах очень простая - там за построение графика используется всего две строчки, но тем не менее за пару часов их изменения я получил все что угодно, кроме кольца :)


 
Asteroid   (2003-09-26 13:23) [20]

> -=DeMoH=- © (26.09.03 12:05) [19]
У тебя ведь z^2 - значит подходят и отрицательные значения. Вывод - рисуй дважды.

> z=sqrt((1-sqrt(x*x+y*y))*(3+sqrt(x*x+y*y))
|z|


 
pasha_676   (2003-09-26 14:41) [21]


> я думаю, что в MAPLE получается кольцо именно из-за того,
> что в нем накладывается условие X,Y,Z=[-1;1].

Ну так думай головой то! X,Y - путем задания самого тхейдфилда, а по Z - второй филд "зеркальный"


 
-=DeMoH=-   (2003-09-26 16:23) [22]

Так в том то и дело, как это сделать?! Если я пишу две команды, то вторая затирает первую и я уже вижу не первую, а вторую половину, а первая при этом стирается!!!
P.S.: И как добавить условие, чтобы рисовалось не все яйцо, а только его середина? (чтобы из яйца получить кольцо :)


 
pasha_676   (2003-09-29 09:45) [23]


> И как добавить условие, чтобы рисовалось не все яйцо, а
> только его середина? (чтобы из яйца получить кольцо :)

С помощью операции if then, с помощью наложения текстуры, и если подумать можно нарыть еще пару десятков способов...


> Так в том то и дело, как это сделать?! Если я пишу две команды,
> то вторая затирает первую и я уже вижу не первую, а вторую
> половину, а первая при этом стирается!!!

Второй ТHegthField. Когда начнешь думать?



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.012 c
6-2242
Новичек
2003-11-26 16:05
2004.02.02
как в TwebBrowser-е найти все линки на открытой в нем страничке


1-2099
scorpi
2004-01-20 07:24
2004.02.02
Меню справа


4-2434
Piople
2003-11-17 09:08
2004.02.02
Как определить запуск кокого либо приложения?


1-2072
Bers01
2004-01-20 11:49
2004.02.02
Работа с MSWord


7-2379
Duk_777
2003-11-15 10:27
2004.02.02
DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский