Показать сообщение отдельно
Старый 29.01.2012, 21:09   #17
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Обратная кинематика. Правильные формулы?

Мой код конечно не настолько мобилен. но вот он кажется попроще))

Function CircleIntersec(X1#,Y1#,R1#,X2#,Y2#,R2#)
	vx#=X2-X1;
	vy#=Y2-Y1;
	vv#=vx*vx+vy*vy;
	If ((R1+R2)*(R1+R2)<vv)
		Return False;
	Else
		a#=(R1+R2)*(R1-R2)/2/vv+0.5;
		b#=Sqr(R1*R1/vv-a*a);
		P1[0]=X1+a*vx-b*vy;
		P1[1]=Y1+a*vy+b*vx;
		P2[0]=X1+a*vx+b*vy;
		P2[1]=Y1+a*vy-b*vx;
		Return True; 
	EndIf
End Function

В цикле

XHand#=xEntityX(point3)-xEntityX(Cup1_1)
YHand#=xEntityY(point3)-xEntityY(Cup1_1)

B#=Sqr(Ext(XHand)+Ext(YHand))

qq1#=ATan2#(YHand#,XHand#)
qq2#=(ACos#((Ext#(L1)-Ext#(L2)+Ext#(B))/(2*L1*B)))

If B>(L1+L2)
	Q1#=0
	Q2#=15
	xPointEntity(Cup1_1,point3)
	xRotateEntity(Cup1_1, 0, 0, -xEntityPitch(Cup1_1)+90)
Else
	Q1#=qq1+qq2+90
	Q2#=ACos#((Ext#(L1)+Ext#(L2)-Ext#(B))/(2*L1*L2))+180
	xRotateEntity(Cup1_1, 0, 0, Q1)
	xRotateEntity(Cup1_2, 0, 0, Q2)
EndIf
Я развиваю пока идею с точкой, чтобы можно было вертетьв трех плоскостях.
(Offline)
 
Ответить с цитированием