Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графический симулятор человеческой руки, какой компонент выбрать? с чего начать? 
:(
    Опции темы
profesiachuvak
Дата 18.2.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: нет
Всего: 4



Здравствуйте форумчане.

Появилась необходимость создать графический симулятор человеческой руки. В упрощённом виде. Меня интересует передвижение руки в одной плоскости (на руку смотрим сверху). Есть два отрезка: от плеча до локтя и от локтя до кисти (сама кисть не интересует). Вообщем имеем два отрезка соединённый между собой, и они двигаются в плоскости XY. 

Главное условие этого симулятора максимально точное позиционирование её на координатной сетке. Смысл симулятора в том, что мы задаём координату (X;Y) и конец второго отрезка перемещается в эту точку. При этом естественно двигается и первый отрезок, но они как и настоящая человеческая рука не удлиняются, а согинаются под различными углами относительно друг друга. Место воображаемого плеча (начало первого отрезка) строго зафиксировано, т.е. его положение не изменяется.

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

Это сообщение отредактировал(а) profesiachuvak - 18.2.2011, 20:13

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  _______________1.gif 2,67 Kb


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
CodeMonkey
Дата 18.2.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Есть мнение, что для отображения двух отрезков можно воспользоваться чем угодно.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
VictorTsaregorodtsev
Дата 18.2.2011, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: нет
Всего: 8



Правильность позиционирования обеспечивается при решении обратной задачи кинематики. Т.е. смотрите на алгоритмы управления "многосуставными" манипуляторами роботов - у этих "рук" тоже есть ограничения на углы поворота в отдельных суставах.
Естественно, вряд ли будут готовые компоненты ;) Слишком уж задача невостребована массами, несмотря на то, что алгоритмы известны уже несколько десятилетий.
Могу написать код (правда, на С) для манипулятора с любым числом шарниров, в том числе и в варианте, когда рука огибает те или иные препятствия (на плоскости или в объеме) для достижения кистью заданной точки. Естественно, незабесплатно ;)
PM MAIL WWW   Вверх
Gwire
Дата 19.2.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



Здесь все просто.
(но лучше сразу взять ручку бумагу и линейку)

Плече и локоть можно представить двумя сторонами триугольника П и Л.
Скажем вершины креугольника О(неподвижная точка), С(сустав) и К(кисть).

При перемешении К, ОС и СК менятся (по условию) не могут.
Значит меняется ОК и углы между сторонами треугольника.
Возмем что координаты О=0,0 (попровку OffsetX и OffsetY для сделать не сложно).

1) ОК можно посчитать за Пифагором, относительно координат О и новой позиции К.
2) Зная длину всех сторон можно расчитать угол СОК (этого в сети навалом).
3) Считаем угол КОХ (где Х точка на оси ординат) относительно позиции К
4) Узнаем угол плеча к оси ординат СОК + КОХ.
5) Узнаем координаты вершины С за стороной П и углом СОХ.
6) Нарисовать линии по найденным коодинатам (не забываем про Offsetы).


Это сообщение отредактировал(а) Gwire - 19.2.2011, 16:42
PM MAIL   Вверх
profesiachuvak
Дата 19.2.2011, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: нет
Всего: 4



Gwire, спасибо за ответ. Попробую прикинуть на бумаге. 

Вообщем-то сам расчёт углов и координат я сделаю сам. В этом вопроса нет. Нужен совет с каким графическим компонентом работать будет удобнее всего? Каким образом выводить графику на экран? Что взять в качестве холста? В каком компоненте я смогу точно указывать угол между отрезка, их длину?


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Gwire
Дата 20.2.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



profesiachuvak, можешь написать свой компонент
Код

uses Controls;

type
  THandMan = class(TGraphicControl)
  protected
    procedure Paint; override;
  published
    property OnClick;
    property OnMouseMove;    
    property OnMouseDown;
  end;

implementation

procedure THandMan.Paint;
begin
    // Здесь вписываешь код прорисовки
    // Например:
    Canvas.Rectangle(0, 0, Width, Height);
end;

Зная координаты рисовать очень просто. А координаты у тебя есть.

Создание
Код

procedure TForm1.FormCreate(Sender: TObject);
var HM: THandMan;
begin
    HM:= THandMan.Create( nil );
    HM.Width:= 400;
    HM.Height:= 300;
    HM.Parent:= Self;
end;


Можно сделать "руку" как руку в 3D. 
Набор компонентов GLScene (взял в иституте на комп.графике).

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1066 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.