У меня есть 2-сегментная роботизированная рука, которой нужно достичь определенной точки, настроив шарниры (углы).
Вот чертеж установки:
Моя рука расположена посередине эскиза, поэтому моя исходная точка (ширина/2,0). Вот известные мне значения: Длина: Первый сегмент (L1): 140 мм. Второй сегмент (L2): 180 мм. Расстояние между исходной точкой и целевой точкой. (используя dist() ).
Эти длины образуют треугольник. Итак, используя законы тригонометрии, я могу найти углы треугольника, которые я хочу использовать, чтобы расположить руку так, чтобы она достигла целевой точки.
Теперь я хочу нарисовать треугольник на экране, используя среду обработки для моделирования. Я применил некоторые преобразования, чтобы нарисовать треугольник, но у меня не получается правильный рисунок.
Это мой код:
void draw(){
background(100);
translate(width/2,0); // origin
// target
float penX = mouseX-width/2;
float penY = mouseY;
// draw points
ellipse(penX, penY, 20, 20);
ellipse(0,0,20,20);
line(0,0,penX,penY);
// distance from origin to target
float distance = dist(0,0,penX,penY);
// first angle (part of S1)
float b = asin(penY/distance);
arc(0,0,100,100,0,b);
// second angle (part of S1)
float a = acos((pow(L1,2)+pow(distance,2)-pow(L2,2))/(2*L1*distance));
// Angle representing first joint
S1 = a + b; // first joint angle
// Angle representing second joint
S2 = acos((pow(L1,2)+pow(L2,2)-pow(distance,2))/(2*L1*L2)); //second joint angle
//Drawing Triangle:
rotate(S1);
line(0,0,120,0);
translate(120,0);
rotate(-S2);
line(0,0,180,0);}
Я надеюсь, что мой текст понятен и простите за путаницу.