![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
profesiachuvak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 7.11.2009 Где: Беларусь, Минск Репутация: нет Всего: 4 |
Здравствуйте форумчане.
Появилась необходимость создать графический симулятор человеческой руки. В упрощённом виде. Меня интересует передвижение руки в одной плоскости (на руку смотрим сверху). Есть два отрезка: от плеча до локтя и от локтя до кисти (сама кисть не интересует). Вообщем имеем два отрезка соединённый между собой, и они двигаются в плоскости XY. Главное условие этого симулятора максимально точное позиционирование её на координатной сетке. Смысл симулятора в том, что мы задаём координату (X;Y) и конец второго отрезка перемещается в эту точку. При этом естественно двигается и первый отрезок, но они как и настоящая человеческая рука не удлиняются, а согинаются под различными углами относительно друг друга. Место воображаемого плеча (начало первого отрезка) строго зафиксировано, т.е. его положение не изменяется. Вопрос: чем мне воспользоваться для отображения этой графики? Как максимально точно обеспечить правильность позиционирования. Какие компоненты на это способны? Это сообщение отредактировал(а) profesiachuvak - 18.2.2011, 20:13 Присоединённый файл ( Кол-во скачиваний: 25 ) ![]() -------------------- Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет. |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Есть мнение, что для отображения двух отрезков можно воспользоваться чем угодно.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: нет Всего: 8 |
Правильность позиционирования обеспечивается при решении обратной задачи кинематики. Т.е. смотрите на алгоритмы управления "многосуставными" манипуляторами роботов - у этих "рук" тоже есть ограничения на углы поворота в отдельных суставах.
Естественно, вряд ли будут готовые компоненты ;) Слишком уж задача невостребована массами, несмотря на то, что алгоритмы известны уже несколько десятилетий. Могу написать код (правда, на С) для манипулятора с любым числом шарниров, в том числе и в варианте, когда рука огибает те или иные препятствия (на плоскости или в объеме) для достижения кистью заданной точки. Естественно, незабесплатно ;) |
|||
|
||||
Gwire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Здесь все просто.
(но лучше сразу взять ручку бумагу и линейку) Плече и локоть можно представить двумя сторонами триугольника П и Л. Скажем вершины креугольника О(неподвижная точка), С(сустав) и К(кисть). При перемешении К, ОС и СК менятся (по условию) не могут. Значит меняется ОК и углы между сторонами треугольника. Возмем что координаты О=0,0 (попровку OffsetX и OffsetY для сделать не сложно). 1) ОК можно посчитать за Пифагором, относительно координат О и новой позиции К. 2) Зная длину всех сторон можно расчитать угол СОК (этого в сети навалом). 3) Считаем угол КОХ (где Х точка на оси ординат) относительно позиции К 4) Узнаем угол плеча к оси ординат СОК + КОХ. 5) Узнаем координаты вершины С за стороной П и углом СОХ. 6) Нарисовать линии по найденным коодинатам (не забываем про Offsetы). Это сообщение отредактировал(а) Gwire - 19.2.2011, 16:42 |
|||
|
||||
profesiachuvak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 7.11.2009 Где: Беларусь, Минск Репутация: нет Всего: 4 |
Gwire, спасибо за ответ. Попробую прикинуть на бумаге.
Вообщем-то сам расчёт углов и координат я сделаю сам. В этом вопроса нет. Нужен совет с каким графическим компонентом работать будет удобнее всего? Каким образом выводить графику на экран? Что взять в качестве холста? В каком компоненте я смогу точно указывать угол между отрезка, их длину? -------------------- Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет. |
|||
|
||||
Gwire |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
profesiachuvak, можешь написать свой компонент
Зная координаты рисовать очень просто. А координаты у тебя есть. Создание
Можно сделать "руку" как руку в 3D. Набор компонентов GLScene (взял в иституте на комп.графике). |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |