Quest3D - Русскоязычное сообщество

Quest3D => Визуализация, Шейдеры => Тема начата: mixey от 10 Марта 2009, 01:15:12



Название: [G]Построение Кривой Линии (есть ответ)
Отправлено: mixey от 10 Марта 2009, 01:15:12
Всем Привет! У меня вполне конкретная проблема. Необходимо построить график, который может быть представлен различными кривыми линиями. Скажем есть уравнение описывающее эту кривую, либо нужно динамически (с определенным шагом) выхватывать координаты точек и строить по ним линию. Как это можно реализовать?

Есть конечно вариант использовать Line и указывать координаты, но тогда график сильно зависит от количества шагов, так как представлен отрезками. Другие варианты есть??

Заранее Благодарен! :)


Название: Re: Построение Кривой Линии
Отправлено: Ruslan от 10 Марта 2009, 11:42:49
Сдесь посмотри, 3d Spline называется, только регистрироваться нужно...

http://quest.ovos.at/


Название: Re: Построение Кривой Линии
Отправлено: mixey от 10 Марта 2009, 12:41:17
О! Скачал! То, что надо! :D Только увы там с ОО работают, а я в нем нифига не знаю  ??? Придется долго разбираться...
Большое Спасибо! Мой проект спасен! А есть хорошие хелпы по ОО в квесте?? И за сколько вообще его реально освоить если общие представления имеются, но ни разу не работал с этим??


Название: Re: Построение Кривой Линии
Отправлено: mixey от 10 Марта 2009, 18:16:49
На самом деле все оказалось так, как я и предполагал. При помощи For Loop и Lines можно сделать кривые линии. При чем количество итераций влияет на гладкость кривой. Если у кого то будут вопросы, то объясню. Общий вид алгоритма выглядит так:


Название: Re: Построение Кривой Линии
Отправлено: cashis от 10 Марта 2009, 21:00:17
скажи а где вообще на твоей схеме прописана та формула по которой строится график ????


Название: Re: Построение Кривой Линии
Отправлено: mixey от 10 Марта 2009, 23:59:34
 cashis, смотри исправления в предыдущем посте! Если требуется объяснить подробнее, то объясню!


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 14 Марта 2009, 14:01:01
"
А есть хорошие хелпы по ОО в квесте?? И за сколько вообще его реально освоить если общие представления имеются, но ни разу не работал с этим??
"


c:\Program Files\Quest3D\Quest3D 4.2.2\Examples\OO\
Хороший хелп по оо квест )))

Усвоить можно очень быстро, если есть опыт ОО проектирования.

Это больше всего похоже на OO java     


Название: Re: Построение Кривой Линии
Отправлено: mixey от 15 Марта 2009, 20:52:16
Const_47, благодарю за ответ!

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


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 16 Марта 2009, 18:31:44
Вот тебе пример построение Еnvelope из координат хранящихся в массиве Table
http://rapidshare.com/files/209911810/BuildEnvelope.rar.html

Так же, можо и заносить координаты в Таble.

Хелп по Луа тут, там функции для работы с Q, так же
и с Тable
http://support.quest3d.com/index.php?title=Lua_Script

Я думаю это будет проще и удобнее, чем построение только из блок-схем

Если ты не знаком с версиями  Q3D до 4.0 то можеш и не знать Q3D -> section -> ClassicLayout. Появится вкладка
АrreyEditor, вместо OO Editor-a.

Отрезок времени? Юзай Тіmer. 


Название: Re: Построение Кривой Линии
Отправлено: mixey от 16 Марта 2009, 21:56:02
Const_47, спасибо большое!  :D Очень нужная вещь! Кажется во всем разобрался! Но есть очередной вопрос, а какой функцией в луа можно изменить тип данных, например value поместить в text, ну в общем, чтоб как operator был?


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 17 Марта 2009, 04:09:07
Вот этот простенький тест
http://rapidshare.com/files/210105820/TestConvert.rar.html
показывает, что в QЛуа нет специальной функции для преобразования value в text, в этом просто нет необходимости.



Если я тебя правильно понял, то тебя нужно примерно так, как на твоей  пикче просчитать значение(ху) всех поинтов кривой и сохранить в массиве , что бы потом рисовать с временным интервалом конкретную итарацию?

Или же просчитать конкретную итерацию, пропустить временной интервал, рисовать конкретную итерацию, и так далее...
пока не будет нарисована вся кривая?

Ставь задачу более глобально, так как я не совсем понимаю твои конкретные цели.



 



Название: Re: Построение Кривой Линии
Отправлено: mixey от 17 Марта 2009, 17:00:38
О! Очередное спасибо! Теперь писать скрипт стало гораздо удобнее!

А теперь описываю общую задачу, которую пытаюсь решить. У меня есть механизм, состоящий из различных звеньев и узловых точек. Движение каждой узловой точки и каждого звена функционально зависит от угла поворота первого звена, которой задается. Движение уже смоделировал. Теперь необходимо нарисовать траекторию движения узловых точек механизма. Поскольку размеры звеньев можно менять, то траектории каждый раз будут разные, но в общем виде конечно будут двигаться по дугам эллипса. Я хотел решить эту задачу путем "снятия" через некий промежуток времени координат точки и строить по этим данным траекторию. Но это на мой взгляд крайне каряво... Какой способ более так скажем математический чтоли... Задать построение линий какой-либо функцией?


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 17 Марта 2009, 17:37:21
Я мало что понял конкретно, больше в общих чертах.

"Задать построение линий какой-либо функцией?"

Просчитать математично идея хорошая.
Предлагаю посмотреть на этот экземпл
C:\Program Files\Quest3D\Quest3D 4.2.2\Examples\Advanced\Lua Script\Pattern Boxes.cgr
Мне кажется что это довольно близко к цели, по крайней мере
есть от чего "плясать"

Покажи плиз конечный результат, это что то не совсем "стандартное", поэтому жутко интересное...
:)))


Название: Re: Построение Кривой Линии
Отправлено: mixey от 17 Марта 2009, 17:50:02
Этот пример уже юзал - близко, но все же не то. Так как там итерации идут как натуральный ряд (1,2,3 и т.д), а у меня время, которое представляется и дробями, поэтому возникают сложности в построении нужной кривой линии.

Ну в общем щас еще поламаю голову. Но у меня щас вообще какая-то странная проблема! Скорее это глюк! Короче после некоторого времени работы в GUI EditBox нельзя вводить с клавы число! Просто не реагирует на клаву и все тут, хотя никаких изменений не было! О_о И никак не убивается эта фигня, приходиться за место старого GUI просто ставить новый и все работает! Что это может быть??? Может структура самого проекта не корректная?


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 17 Марта 2009, 18:10:40
Я сталкивался с подобным, правда в моем случае, это не был
GUI EditBox.

Могу уверенно сказать, что в паблише он уже не "поломается" )))


Название: Re: Построение Кривой Линии
Отправлено: Viik от 18 Марта 2009, 00:04:57
Елси время считать в милисекундах то сойдет за натуральный ряд.


Название: Re: Построение Кривой Линии
Отправлено: mixey от 18 Марта 2009, 00:15:09
Увы, но даже в паблише "ломается"! Намучался блин! Никак нормально работать не хочет! Начал было все элементы управления делать в ручную, но потратив несколько часов вообще перестал работать... Прям не знаю что делать.  >:(Нормально не бывает чтоль блин? ???

Viik, а как поставить в миллисекундах??


Название: Re: Построение Кривой Линии
Отправлено: Viik от 18 Марта 2009, 09:44:27
1 millisecond = 0.001 seconds


Название: Re: Построение Кривой Линии
Отправлено: mixey от 18 Марта 2009, 20:11:25
1 millisecond = 0.001 seconds

Ыыы! я думал, что надо не используя стандартный timer вообще...

Скажите а сам музей зайти можно ? У кого билет на посещение покупать?

Это особый сарказм или вообще просто так написано???

Что касается моей проблемы, то я ее так и не решил. Я сделал так, что каждый момент времени координаты точки заносятся в массив из 100 элементов. Потом с помощью For Loop  рисуется траектория точки по координатам из массива. Но я наблюдаю следующую картину если скорость движения точки слишком большая (соответсвенно и кадров тогда меньше). Как это можно решить??


Название: Re: Построение Кривой Линии
Отправлено: Viik от 18 Марта 2009, 20:34:27
Изначально траектория точки задаеться математически или подаеться внешне, с хардвары?


Название: Re: Построение Кривой Линии
Отправлено: mixey от 18 Марта 2009, 22:06:27
Конкретно эта задается математически. Ясно, что можно построить круг. Но есть точки, для которых нет математических рассчетов, а их траектории необходимо строить... собственно анализ этих траекторий и есть суть программы.


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 19 Марта 2009, 07:34:13
C ума сойти можно, я уже вообще ничего не понимаю...

"
Я сделал так, что каждый момент времени координаты точки заносятся в массив из 100 элементов. Потом с помощью For Loop  рисуется траектория точки по координатам из массива. Но я наблюдаю следующую картину если скорость движения точки слишком большая (соответсвенно и кадров тогда меньше). Как это можно решить???
"

То есть, ты сначала "запускаешь" точку с определенной скоростью по определенной траектории? потом с определенным временным интервалом заносишь координаты в массив, что бы потом нарисовать по ним кривую?

Конечная цель, это кривая, или считывание точек в определенный момент времени? а кривая просто служит графической демонстрацией полученного результата? 


Обьясни как тормозу, желательно пошагово.             

 


Название: Re: Построение Кривой Линии
Отправлено: Viik от 19 Марта 2009, 12:34:12
Ну, а откуда ты береш данные для точек для которых нет математических расчетов?
Как и Const_47 непомнимаю что ты по сути пытаешся сделать.


Название: Re: Построение Кривой Линии
Отправлено: mixey от 19 Марта 2009, 17:54:38
Я тогода лучше прикреплю пример, чтобы понять легче было. В общем мне надо устранить глючность рисования графика при больших скоростях в Looping Timer (смотрите файл).


Название: Re: Построение Кривой Линии
Отправлено: Viik от 19 Марта 2009, 20:15:35
Ты лучше объясни что ты хочеш сделать? Толку от сцены если не понятен ожидаемый результат. Если функционал алгоритмически не правильно собираетья то копаться в цыклах и отрисовке можно бесконечно.


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 19 Марта 2009, 20:44:54
Я вроде понял, что ты хош
Вот лови
http://rapidshare.com/files/211134154/SpeedFIX.rar.html

Это ж надо до такого додуматься, под таймер массив строить :)))
 


Название: Re: Построение Кривой Линии
Отправлено: Const_47 от 19 Марта 2009, 21:38:06
Вот еше вариант, вообще без массива
http://rapidshare.com/files/211153353/SpeedFIX222.rar.html


Название: Re: Построение Кривой Линии
Отправлено: mixey от 20 Марта 2009, 22:42:26
кхм... кхм... кхм... Кароче я прост дебил. Ступил сильно.  :D

Ну сейчас со всем разобрался и на верном пути! Спасибо всем огромное за помощь! Очень выручили! Как будет готово, то выложу!


Название: Re: Построение Кривой Линии
Отправлено: mixey от 22 Марта 2009, 17:35:51
Хм... Вот и столкнулся я с очередной проблемой. При построении траектории я использую For Loop со 100 итерациями, который строит 4 графика... И все это довольно сильно грузит комп. Меньшее количество итераций приводит к грубому графику. Как можно оптимизировать все это... Ну например прекратить постоянный рассчет и добавление точек в массив, а сделать это только лишь когда введены новые данные?


Название: Re: Построение Кривой Линии
Отправлено: Viik от 22 Марта 2009, 17:39:22
Поставь IF  к нему подключи тригер, и в тригере выбери On value change.