Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2008, 17:10   #11
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Не, не осилю, моих знаний по геометрии и тригонометрии не хватает. Может еще кто поможет.

Суть задачи сводится к этому:
Синим цветом сама рука робота
Точка С - захват (от ее координат отталкиваемся)
Точка B - колено (именно ее координаты и нужны)
AB, BC - длины известны

Углы как конечный результат никакие не нужны, разве что для промежуточных расчетов могут понадобится.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 29.03.2008 в 17:12.
mutabor вне форума Ответить с цитированием
Старый 29.03.2008, 18:12   #12
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

По данным условиям зада ча имеет два варианта решений: можно операясь на СА как на ось симметрии отложить еще одно В (для данного рисунка будет с лева), которое будет удовлетворять заданным условиям поставленной задачи
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 29.03.2008, 18:26   #13
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Углы какраз нужны, поскольку я использую шаговые двигатели и используя какой - то коэфициент, можно прощитать количество шагов.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 29.03.2008, 20:14   #14
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Dj_smart Посмотреть сообщение
Углы какраз нужны, поскольку я использую шаговые двигатели и используя какой - то коэфициент, можно прощитать количество шагов.
Ну ты ведь не в самом деле руку делаешь, а симуляцию. Для симуляции можно обойтись координатами "локтя" для отрисовки движения этого хватит.
Мне кажется без углов тут по любому не обойтись даже если они не самоцель, так что по идее они найдутся.
Мне теперь самому интересно )

SNUPY не вполне ясно решение, можно с примером? Если еще кто будет отвечать приводите пожалуйста на примере. Если кто знает как углы высчитать тоже пишите.
Допустим точка C имеет координаты: -50, 200
Общая длина руки: 250, 2 х 125.

p.s. Помоему тему можно перенести в Игры.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 29.03.2008, 20:46   #15
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Решение
С(Xc,Yc) , B(Xb,Yb)
судя по рисунку A(0,0)
CB=A, CA=B, BA=C, g=CA^OX =>если Xc<>0 g=arctg(Yc/Xc) else g=Pi/2
Если CA^AB=a =(по теореме косинусов)=>A^2=C^2+B^2-2*B*C*Cos(a)
=>a=arccos[(C^2+B^2-A^2)/(2*B*C)]=> Если e=AB^OX =>
e=g-a => Yb=C*Sin(e), Xb=C*Cos(e)
ЗАДАЧА РЕШЕНА ДЛЯ ПРАВОЙ РУКИ!!!!
Для Левой e=g+a
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 29.03.2008, 23:22   #16
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Сидел минут десять пытался въехать. Напиши пожалуйста решение конкретного примера на основе тех данных что я давал и рисунка, с числами. Так я не могу понять
Допустим точка C имеет координаты: -50, 200
Общая длина руки: 250, 2 х 125

p.s. Не надо кодом, так напиши, только с числами, и чтобы ответ был.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 29.03.2008 в 23:32.
mutabor вне форума Ответить с цитированием
Старый 30.03.2008, 00:23   #17
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

AC^OX=arctg(200/-50)=-1,32581766366803=1.81577499(т.к. рука работает только в I и II периодах)
AC=((-50)^2+200^2)^0.5=206,1552812808830
AC^AB=arccos[(125^2-125^2+206,1552812808830^2)/(2*125*206,1552812808830)]=0,601264216
AB^OX=1.81577499-0,601264216=1.214510773
X=125*Cos(0.724555347)=43.6
Y=125*Sin(0.724555347)=117.15
Проверил попала )))
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 30.03.2008, 00:56   #18
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Мне тоже интересно стало. Заработало.

Код:
var Ax, Ay : integer;
    Bx, By : integer;
    Cx, Cy : integer;
    Lp:integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Lp := 300;            // половина руки
   Ax := 70; Ay := 50;
   Bx := Ax; By := Ay;   // чтобы не вычислять
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
   Canvas.Pen.Color := clBlack;
   Canvas.MoveTo(Ax, Ay);
   Canvas.LineTo(Cx, Cy);

   Canvas.Pen.Color := clBlue;
   Canvas.MoveTo(Ax, Ay);
   Canvas.LineTo(Bx, By);
   Canvas.LineTo(Cx, Cy);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var g, l1:double;
begin
   // Проверка допустимых значений C чтобы можно было построить треугольник
   if sqrt(sqr(Ax-X)+sqr(Ay-Y)) > 2*Lp then exit;

   // перемещаем систему координат в (0,0)
   Cx := X-Ax; Cy := Y-Ay;

   // Длина отрезка AC
   l1 := sqrt(sqr(Cx) + sqr(Cy));
   if l1 = 0 then exit;  // нельзя сложить руку до такой степени ?
                         // локоть может быть в любом месте
   label1.caption := intToStr(trunc(l1));

   g := arccos(Cx / l1);

   if Cy < 0 then g := -g;
    // Если ограничиться верхней полуплоскостью,
    // то проверку можно не делать

   label2.caption := intToStr(trunc( g/pi*180 ));

   g := g + {-} arccos(l1/2/Lp);   // знак - левая/правая рука

   Bx := trunc(Lp * cos( g ));
   By := trunc(Lp * sin( g ));

   // перемещаем систему координат обратно
   inc(Cx, Ax); inc(Cy, Ay);
   inc(Bx, Ax); inc(By, Ay);

   invalidate
end;
alexBlack вне форума Ответить с цитированием
Старый 30.03.2008, 01:40   #19
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Цитата:
Ну ты ведь не в самом деле руку делаешь, а симуляцию.
Нет, рука настоящая а так всем спасибо, пытаюсь разобраться что к чему

СПАСИБО всё пашет!

Но вот еще вопросик. Как прощитать угол поворота руки? Я в алгебре(в углах) не очень...
Могу только догадку высунуть: посколько 3-угольник равнобедренный, то будет зависеть только от длинны отрезка AC. Надо либо подобрать коефициент либо опять таки юзать теорему косинусов. Допустим эта проблема решена(Это только допустим). А как быть с углом Относительно стола (BAX , где X - точка, лежащая на грани стола , см. первый мой рисунок)?
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 30.03.2008, 10:16   #20
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

вот здесь:

Код:
 g := arccos(Cx / l1);   // угол между AC и OX
 ...
 label2.caption := intToStr(trunc( g/pi*180 ));   // то-же в градусах
  
 g := g + {-} arccos(l1/2/Lp);   // угол между AB и OX
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 17:46
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54