forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Обратная кинематика. Правильные формулы? (http://forum.boolean.name/showthread.php?t=16221)

CRASHER 22.01.2012 10:58

Обратная кинематика. Правильные формулы?
 
значить с сайта http://roboty6.narod.ru/inverseKinematics.htm
достал формулы и попытался закодировать.

Не работают как надо, я их вроде не менял, значит я что то не понял или формулы под сомнением ?

Вот!

Код:

Include "Xors3d.bb"
xGraphics3D 800, 600, 32, 0, 1
arial = xLoadFont("Arial", 12);Arial

pxCreateWorld(0, "клуч")
pxSetGravity(0, -10, 0)

Global camera,mys#,mzs#,mxs#,znam#=5,MouseMove=1,lx#,ly#,lz#,Getx#=20,Gety#=20
Global mzP#,cameraPiv

Const WiHi#=2

cameraPiv=xCreatePivot()
camera = xCreateCamera()
xPositionEntity camera, 0, 10, -15
xEntityParent(camera,cameraPiv)

Textura=xLoadTexture ("Textures\terrain2.jpg")

light_1=xCreateLight  (1)
xPositionEntity(light_1,10,5,10)
plan=xCreateCube()
xScaleEntity(plan,1000,0.1,1000)
xEntityTexture(plan,Textura)
xScaleTexture(Textura,0.01,0.01)
xEntityPickMode plan,2

Cup_1=xCreateCube()
xPositionEntity Cup_1, 0, 8, 0
xScaleMesh(Cup_1,0.5,0.5,0.5)

Cup1_1=xCreateCube()
xPositionEntity Cup1_1, 0, 8, 0
xPositionMesh Cup1_1, 0, -1.5, 0
xScaleMesh(Cup1_1,0.5,1.5,0.5)

Cup1_2=xCreateCube(Cup1_1)
xPositionEntity Cup1_2, 0, -3.5, 0
xPositionMesh Cup1_2, 0, -1, 0
xScaleEntity(Cup1_2,0.5,1.5,0.5)

xWorldSetGravity (0,-20,0)

Global Rot2#,Rot#

point3=xCreateSphere()
xScaleEntity(point3,0.5,0.5,0.5)
xPositionEntity(point3,1, 0, 0)

CM=xCreateSphere()

Function sqrt#(x)
        x=x*x
        Return x
End Function

Function RadToGrad#(x)
        x=(x*180)/Pi
        Return x
End Function

;_____________________________________________________________________________________________________
While Not xKeyDown(1)

L1=3
L2=3

XHand#=xEntityX(Cup1_1)-xEntityX(point3)
YHand#=xEntityY(Cup1_1)-xEntityY(point3)
B#=Sqr((sqrt#(XHand)+sqrt#(YHand)));xEntityDistance(Cup_1,point3)

q1#=ATan2#(XHand#,YHand#)
q2#=(ACos#((sqrt#(L1)-sqrt#(L2)+sqrt#(B))/(2*L1*B)))

;If Sqr((sqrt#(XHand)+sqrt#(YHand)))<B
        Q1#=q1+q2
        Q2#=ACos#((sqrt#(L1)+sqrt#(L2)-sqrt#(B))/(2*L1*L2))
;        Q1#=RadToGrad(Q1)
;        Q2#=RadToGrad(Q2)
;Else
;        Q1=90
;        Q2=90
;EndIf

xRotateEntity(Cup1_1, 0, 0, Q1)
xRotateEntity(Cup1_2, 0, 0, Q2)

        DebugLog("Dist(1-3)= "+B)

        DebugLog("Q1= "+Q1)
        DebugLog("Q2= "+Q2)
       
        If xKeyDown (57) xEntityApplyTorque(Cup1_1,-20,30,-5):xEntityApplyForce(Cup1_1,-5,6,-5,0,0,0)

        mys=xMouseYSpeed()
        mxs=xMouseXSpeed()
        mzs=xMouseZSpeed()
       
        If xKeyDown(32)=True Then xMoveEntity point3,0.2,0,0
        If xKeyDown(30)=True Then xMoveEntity point3,-0.2,0,0
        If xKeyDown(31)=True Then xMoveEntity point3,0,-0.2,0
        If xKeyDown(17)=True Then xMoveEntity point3,0,0.2,0

        If xKeyDown(205)=True Then xMoveEntity camera,0.4,0,0
        If xKeyDown(203)=True Then xMoveEntity camera,-0.4,0,0
        If xKeyDown(208)=True Then xMoveEntity camera,0,0,-0.4
        If xKeyDown(200)=True Then xMoveEntity camera,0,0,0.4

        Update_user(camera,mxs,mys)
        xUpdateWorld ()
        xRenderWorld()

        Text 10,10, "text="
        xFlip()
       
       
Wend
;----------------------------
End

Function Update_user(camera,mxs#,mys#)
If mys>30 Then mys=30
If mys<-30 Then mys=-30
If mxs>30 Then mxs=30
If mxs<-30 Then mxs=-30
If MouseMove=1
xTurnEntity camera,mys/znam,0,0
xTurnEntity camera,0,-mxs/znam,0,1
EndIf

u#=80
xMoveMouse xGraphicsWidth()*0.5,xGraphicsHeight()*0.5
;xHidePointer
If Abs(xEntityPitch#(camera))>u# xRotateEntity camera,(u#)*Sgn(xEntityPitch#(camera)),xEntityYaw(camera),0
End Function


dsd 22.01.2012 13:33

Ответ: Обратная кинематика. Правильные формулы?
 
Function sqrt#(x)
x=x*x
Return x
End Function

вообще судя по названию там корень должен считаться, а у тебя возводится в квадрат. Так что вполне может быть, что все косяки из-за этой ф-ции.

Mr_F_ 22.01.2012 14:40

Ответ: Обратная кинематика. Правильные формулы?
 
в блице есть же корень, только называется sqr.
если не втыкаешь почему формулы именно такие как написаны, то ничего не выйдет с тупого их списывания. надо теоретически понимать алгоритм.
мне кажется сайт неподходящий. там нифига непонятно что написано. ищи инфу для разработчиков игр, а не роботостроителей.
--
вот самая понятная дока, которую я нашёл: http://www.darwin3d.com/gamedev/articles/col0998.pdf

CRASHER 22.01.2012 18:40

Ответ: Обратная кинематика. Правильные формулы?
 
Mr_F_,dsd, да знаю я что такое sqrt и sqr. В блице корень sqr, а квадрата нет, вот я и сделал чтоб не мучится, ну и назвал так. Кажется где то видел что в си принято такое обозначение. Если ошибся, ну так тогда как обозначить? Одно ясно под sqrt я подразумеваю квадрат и в формулах где я его использую тоже квадрат. Здесь что то в этих формулах не то кажется.

CRASHER 22.01.2012 18:57

Ответ: Обратная кинематика. Правильные формулы?
 
Цитата:

вот самая понятная дока, которую я нашёл: http://www.darwin3d.com/gamedev/articles/col0998.pdf
Mr_F_, а ты уверен что там есть что мне нужно?

dsd 22.01.2012 19:49

Ответ: Обратная кинематика. Правильные формулы?
 
А что не так с кинематикой? Есть система стержней соединенных шарнирами. Есть её текущее положение. Есть точка куда должен уткнуться конец системы.

Конец последнего стержня может перемещаться по поверхности сферы с центром на шарнире и радиусом в длину стержня. Если координаты цели есть решение уравнения сферы, значит последний элемент можно повернуть относительно его шарнира связующего его с родителем и цель достигнута.

Если нет. Смотрим на пересечение сферы родителя со сферой радиусом в длину последнего стержня вокруг точки цели. Если есть пересечение то можно поставить в ближайшую точку от текущего положения родителя и уткнуть последний стержень в цель.

Если пересечений нет, то проверяем сферу досягаемости родителя уровнем выше и сферу вокруг цели радиусом в сумму длины последнего и предпоследнего стержня. И т.д.

Если предки кончились, а точка так и не достигнута, то тупо прицеливаем усе стержни в цель. Как то так :)

CRASHER 22.01.2012 20:23

Ответ: Обратная кинематика. Правильные формулы?
 
dsd, я попытался понять. Не буду врать, не уверен что всё что ты сказал мне понятно.) Ты сейчас говоришь о статье которую Mr_F предложил?

dsd 22.01.2012 20:24

Ответ: Обратная кинематика. Правильные формулы?
 
Нет, я говорю о термехе и геометрии в пространстве.

CRASHER 22.01.2012 23:03

Ответ: Обратная кинематика. Правильные формулы?
 
dsd, возможно в закодированном виде было бы понятнее))

dsd 22.01.2012 23:21

Ответ: Обратная кинематика. Правильные формулы?
 
[|xqѪTѤzѤyqѤt~ѤѤ~|yqxt|~z}ѻѤQѤ|qxtѤqryq}Ѥzqp|yqyyѤt y|tx|ѪѤQѤqѤq~
qqѤ{zzrqy|qѪѤQѤz~tѤ~ptѤpzrqyѤ~yѤ~zyqѤ|qxѪщщ^zyqѤ {zqpyqwzѤqryѤxzrqѤ{qqxq
tѤ{zѤ{zvqyz|ѤqѤѤqyzxѤytѤty|qѤ|Ѥtp|zxѤvѤp|yѤqryѪѤQ |Ѥ~zzp|ytѤq|ѤqѤqqy|qѤtvyqy|ѤqѨѤsyt|Ѥ{zqpy|}Ѥ qxqyѤxzryzѤ{zvqyѤzyz|qyzѤqwzѤty|tѤvs

qwzѤqwzѤѤzp|qqxѤ|ѤqѤpz|wytѪщщQ|ѤyqѪѤexz|xѤytѤ{q qqqy|qѤqѤzp|qѤzѤqz}Ѥtp|zxѤvѤp|yѤ{zqpyqwzѤqryѤvz ~wѤz~|Ѥq|ѪѤQ|ѤqѤ{qqqqy|qѤzѤxzryzѤ{ztv|ѤvѤu|r t}
Ѥz~ѤzѤq~
qwzѤ{zzrqy|Ѥzp|qѤ|Ѥ~yѤ{zqpy|}ѤqrqyѤvѤqѪщщQ|Ѥ{ qqqqy|}ѤyqѨѤzѤ{zvqqxѤqѤpzwtqxz|Ѥzp|qѤzvyqxѤvqѤ|Ѥq Ѥvz~wѤq|Ѥtp|zxѤvѤxxѤp|yѤ{zqpyqwzѤ|Ѥ{qp{zqpyqwz ѤqryѪѤ\ѤѪpѪщщQ|Ѥ{qp~|Ѥ~zy||ѨѤtѤz~tѤt~Ѥ|ѤyqѤpz|wy tѨѤzѤ{zѤ{|q|vtqxѤqѤqry|ѤvѤqѪѤ^t~ѤzѤt~

символ шифровки: ф

http://codedecode.ru/



Вааще там самое сложное это найти нужную точку пересечения двух сфер.
Када сферы пересекаюца или касаюца? Когда расстояние между центрами меньше равно суммы радиусов. Какова нормаль плоскости по которой пересекаются две сферы? Совпадает с линией проходящей через их центры.
Где точка на линии соединяющей центры сфер принадлежащая плоскости сечения?
Отмеряем от центра первой радиус второй. Находим разницу между радиусами. Прибавляем ко второму радиусу разницу умноженную на соотношение радиусов.
Каков радиус окружности на этой плоскости? Расстояние от центра до точки сечения это косинус угла на радиус. => синус на радиус = радиус окружности на плоскости. Дальше ищем пересечение прямой по которой стержень лежит с плоскостью сечения. Получается точка.
Считаем вектор от этой точки до центра окружности. делим его на его длину и умножаем на его длину минус радиус окружности. Получилась нужная точка куда воткнуть текущий стержень. Считаем вектор от шарнира до этой точки. xAlignEntityToVector(). Про точку места сечения может и наврал :)

CRASHER 23.01.2012 10:21

Ответ: Обратная кинематика. Правильные формулы?
 
dsd, псиб терь все понятно. Да еще, закодированный вид я подразумевал код языка программирования, если ты не понял. :)

CRASHER 25.01.2012 22:13

Ответ: Обратная кинематика. Правильные формулы?
 
Вообщем, глупые формулы! Нашел рабочие и реализовал. а эти в топку.

H@NON 25.01.2012 22:28

Ответ: Обратная кинематика. Правильные формулы?
 
код в студию)

CRASHER 27.01.2012 12:32

Ответ: Обратная кинематика. Правильные формулы?
 
Иш ты налетели)) Как помоч так нету, а как код так они тут уже))
Лан, вам какой с вычислением точки или с углами?

H@NON 28.01.2012 08:07

Ответ: Обратная кинематика. Правильные формулы?
 
у меня был пример вычисления на углах, я еще на блитц.пп выкладывал, но после полета диска демка исчезла.

Давай с вычислением углов.

H@NON 28.01.2012 08:10

Ответ: Обратная кинематика. Правильные формулы?
 
вот, нашел на blitzmax.ru
Код:

;====================================================================
; Project: Invers Kinematics for rag doll
; Version: 0.01c
; Author: H@non
; Email: [email protected]
; Copyright: © H@non, 2010 г.
; Description:    http://www.gamedev.ru/articles/?id=30035
;                книга Рика Пэрента
; http://number-none.com/product/IK%20with%20Quaternion%20Joint%20Limits/index.html               
;====================================================================
 
 
Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()
 
 
Type StepTank
        Field korpus
        Field bone1[5], bone2[5]
        Field targetX#[5], targetY#[5], targetZ#[5]
End Type
Global ST.StepTank
 
Global Camera=CreateCamera ()
MoveEntity Camera, 0, 0, -10
 
Local lit = CreateLight()
RotateEntity lit, 45, 45, 0
 
SetFont LoadFont("arial cyr", 20, True)
 
Const GameUPS=60 ; Updates per second
Local Period=1000/GameUPS
Local FrameTime=MilliSecs()-Period
 
Local Tween#, Ticks,i,Remaining,StartTime,Elapsed
 
Global bone = CreateCube()
PositionMesh bone, 0, 0, 1
ScaleMesh bone, 0.4, 0.4, 3
HideEntity bone
 
Global target = CreateCube()
EntityColor target, 255, 0, 0
 
AddStepTank(0, 0, 0)
 
While Not KeyHit(1)
       
        StartTime = MilliSecs()
       
        Repeat
                Elapsed=MilliSecs()-FrameTime
        Until Elapsed
       
        Ticks=Elapsed / Period
        Tween=Float(Elapsed Mod Period)/Float(Period)
       
        For i=1 To Ticks
                FrameTime=FrameTime+Period
                If i=Ticks Then
                        CaptureWorld
                End If
                UpdateStepTank()
                MoveCamera(Camera)
               
                TranslateEntity target, KeyDown(205)-KeyDown(203), 0, KeyDown(200)-KeyDown(208)
               
                UpdateWorld
        Next
        RenderWorld Tween
       
        Text 10, 10, "Control :"
        Text 10, 30, "Camera : wasd + mouse"
        Text 10, 50, "target(red cube) : arrows(стрелки)"
       
        Remaining = Period - (MilliSecs() - StartTime)
        If Remaining > 1 Then
                Delay (Remaining-1) ; Free some CPU time
        End If
       
        Flip 0
       
Wend
 
End
 
;=========================================================================
 
 
Function AddStepTank(x#, y#, z#)
        ST.StepTank = New StepTank
        ST\bone1[0] = CopyEntity(bone)
        PositionEntity ST\bone1[0], x, y, z
        ;ScaleEntity ST\bone1[0], 0.4, 0.4, 6
       
        ST\bone2[0] = CopyEntity(bone)
        PositionEntity ST\bone2[0], x, y, z+6
        ;ScaleEntity ST\bone2[0], 0.4, 0.4, 6
        EntityColor ST\bone2[0], 255, 255, 0
        EntityParent ST\bone2[0], ST\bone1[0]
       
        ST\targetX[0] = 0;5
        ST\targetY[0] = 8
        ST\targetZ[0] = 5
       
        PositionEntity target, ST\targetX[0], ST\targetY[0], ST\targetZ[0]
End Function
 
Function UpdateStepTank()
        Local dx#, dy#, dz#
        Local torque#, diff#
        Local pitch#, yaw#, roll#
       
        TFormVector 0, 0, 6, ST\bone2[0], 0
        torque = CalculateAngleJoint(ST\bone1[0], TFormedX(), TFormedY(), TFormedZ(), target, 0.2)
        torque = limit(torque, -2, 2)
        TurnEntity ST\bone1[0], torque, 0, 0
       
       
        TFormVector 0, 0, 6, ST\bone2[0], 0
        torque = CalculateAngleJoint(ST\bone1[0], TFormedX(), TFormedY(), TFormedZ(), target, 0.2, 2)
        torque = limit(torque, -2, 2)
        TurnEntity ST\bone1[0], 0, torque, 0;, False
        ;TurnEntity ST\bone1[0], 0, 0, -EntityRoll(ST\bone1[0],1)
        ;RotateEntity ST\bone1[0], EntityPitch(ST\bone1[0],1), EntityYaw(ST\bone1[0],1), 0, True
       
       
        TFormVector 0, 0, 6, ST\bone1[0], 0
        torque = CalculateAngleJoint(ST\bone2[0], TFormedX(), TFormedY(), TFormedZ(), target, 0.2)
        torque = limit(torque, -2, 2)
        TurnEntity ST\bone2[0], torque, 0, 0
       
        TFormVector 0, 0, 6, ST\bone1[0], 0
        torque = CalculateAngleJoint(ST\bone2[0], TFormedX(), TFormedY(), TFormedZ(), target, 0.2, 2)
        torque = limit(torque, -2, 2)
        TurnEntity ST\bone2[0], 0, torque, 0;, True
End Function
 
Function CalculateAngleJoint#(joint, boneX#, boneY#, boneZ#, target, Sens#=1.0, Axis=1)
        Local Rx#, Ry#, Rz#
        Local Fx#, Fy#, Fz#
        Local Ax#, Ay#, Az#
        Local mag#
       
        Fx# = EntityX(target,1) - boneX
        Fy# = EntityY(target,1) - boneY
        Fz# = EntityZ(target,1) - boneZ
       
        mag# = Sqr(Fx*Fx + Fy*Fy + Fz*Fz)
       
        Select Axis
                ;-------------------------------------------------------
                Case 1
                ;- вектор вдоль оси шарнира
                TFormVector 1, 0, 0, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Rx = Sin(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                ;- вектор вдоль кости
                TFormVector 0, 0, 1, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Ry = Sin(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                ;- вектор перпендикулярный векторам оси шарнира и кости
                TFormVector 0, 1, 0, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Rz = -Cos(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                ;-------------------------------------------------------
                Case 2
                TFormVector 0, 1, 0, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Rx = Sin(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                TFormVector 0, 0, 1, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Ry = Sin(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                TFormVector 1, 0, 0, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Rz = -Cos(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                ;-------------------------------------------------------
                Case 3
                TFormVector 0, 0, 1, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Rx = Sin(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                TFormVector 1, 0, 0, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Ry = Sin(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                TFormVector 0, 1, 0, joint, 0
                Ax# = TFormedX()
                Ay# = TFormedY()
                Az# = TFormedZ()
                Rz = -Cos(VectorAngle#(Ax#,Ay#,Az#, Fx#,Fy#,Fz#))
                ;------------------------------------------
        End Select
       
        Return (mag*Rx*Ry*Sgn(Rz))*Sens
End Function
 
Function MoveCamera(camera, speed#=0.5)
        If MouseDown(1) Then
                Local mxs# = MouseXSpeed()
                Local mys# = MouseYSpeed()
                If MouseHit(1) Then
                        mxs = 0
                        mys = 0
                EndIf
                RotateEntity camera, EntityPitch(camera)+mys*0.5, EntityYaw(camera)-mxs*0.5, 0
                MoveMouse 400, 300
        EndIf
       
        Local up = KeyDown(17)
        Local down = KeyDown(31)
        Local Left = KeyDown(30)
        Local Right = KeyDown(32)
       
        MoveEntity camera, (Right-Left)*speed, 0, (up-down)*speed
End Function
 
 
Function RotEntity(ent, pit#=0, yaw#=0, roll#=0)
        RotateEntity ent, EntityPitch(ent,1)+pit, EntityYaw(ent,1)+yaw, EntityRoll(ent,1)+roll, True
End Function
 
Function VectorAngle#(Ax#,Ay#,Az#, Bx#,By#,Bz#)
        Local d# = VectorDot(Ax#,Ay#,Az#, Bx#,By#,Bz#)
        Local m# = VectorMagnitude(Ax#,Ay#,Az#)*VectorMagnitude(Bx#,By#,Bz#)
        Return ACos(d#/m#)
End Function
 
Function VectorDot#(Ax#,Ay#,Az#, Bx#,By#,Bz#)
        Return (Ax*Bx) + (Ay*By) + (Az*Bz)
End Function
       
Function VectorMagnitude#(Ax#,Ay#,Az#)
        Return Sqr(Ax*Ax + Ay*Ay + Az*Az)
End Function
 
Function AngleDiff#(angle1#,angle2#)
        Return ((angle2 - angle1) Mod 360 + 540) Mod 360 - 180
End Function
 
Function limit#(val#, min#, max#)
        If val < min Then
                Return min
        ElseIf val > max Then
                Return max
        Else
                Return val
        EndIf
End Function
 
Function DELTAroll#( Source , Target )
        TFormPoint 0,0,0 , Target, Source
        Return VectorYaw ( TFormedX() , 0 , TFormedY() )
End Function


CRASHER 29.01.2012 21:09

Ответ: Обратная кинематика. Правильные формулы?
 
Мой код конечно не настолько мобилен. но вот он кажется попроще))

Код:

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

Я развиваю пока идею с точкой, чтобы можно было вертетьв трех плоскостях.

DarkInside 30.01.2012 17:48

Ответ: Обратная кинематика. Правильные формулы?
 
Цитата:

Сообщение от CRASHER (Сообщение 217508)
Mr_F_,dsd, да знаю я что такое sqrt и sqr. В блице корень sqr, а квадрата нет, вот я и сделал чтоб не мучится

оу:4to: а это что по вашему x^2? Вот это "внатуре алоэ" - писать функцию для возведения в квадрат:-D Простите, не удержался...

По теме, к сожалению, ничего сказать не могу, у меня всегда было плохо с физикой...

Вот еще парочка полезных функций:super:
Код:

Function plus#(a, b)
c=a+b
Return c
End Function

Function minus#(a, b)
c=a-b
Return c
End Function


CRASHER 30.01.2012 18:04

Ответ: Обратная кинематика. Правильные формулы?
 
DarkInside, не знал об этом ну и что?

CRASHER 30.01.2012 18:08

Ответ: Обратная кинематика. Правильные формулы?
 
DarkInside, тебе занятся нечем? По теме ничего сказать не можешь? Проверять чужой код на синтаксис решил?

DarkInside 30.01.2012 18:08

Ответ: Обратная кинематика. Правильные формулы?
 
теперь знай;) Ну зачем так грубо сразу))

CRASHER 30.01.2012 18:11

Ответ: Обратная кинематика. Правильные формулы?
 
DarkInside, потому что это не красиво! Одно дело когда ошибка ведт к не рабочему коду, и другое дело когда тебе хочется сконцентрировать внимание на интерпритации.


Часовой пояс GMT +4, время: 18:16.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot