slej slej
417
BLOG

Składowe F momentu siły M=Lxw

slej slej Nauka Obserwuj temat Obserwuj notkę 12

    Wszystko jest kwestią względną. Patrząc na pozycje wektora krętu poniżej przedstawiony algorytm, można powiedzieć że jest skuteczny (wektor krętu zmienia pozycje o tysięczne części na 10 tyś kroków). Jedni powiedzą że to dużo drudzy że mało, ja osobiście będę dążył do znacznego zmniejszenia tego błędu, ale na dzień dzisiejszy jestem z takiego błędu zadowolony. Nie znam algorytmów które metodą krokową uzyskiwały by lepszą dokładność.

    Co znaczy że algorytm jest skuteczny? Znaczy to że wynik uzyskany za jego pomocą pozwala odtworzyć z dość dobrą dokładnością zachowanie się mechaniki obrotu BS. Chcę tu zaznaczyć że skuteczny nie oznacza prawdziwy, to że wynik się zgadza nie oznacza że założenia są prawdziwe, to dopiero trzeba udowodnić.

    Skąd wiem że moje symulacje odpowiadają rzeczywistości? Zakładam że wzory Eulera poprawnie opisują mechanikę obrotu BS i pierwsze symulacje były oparte na tych wzorach. Oczywiście moje symulacje nie zostały zweryfikowane przez profesjonalistów (nikt na poważnie się tym nie zainteresował), jednak wszelkie próby weryfikacji na podstawie ogólnie dostępnej wiedzy na ten temat wypadają pozytywnie. Nie znalazłem nic co by mogło sugerować że moje symulacje znacząco odbiegają od rzeczywistości. Wyniki nowych algorytmów na innych założeniach weryfikuje ze starymi i dopiero po uzyskaniu odpowiedniej dokładności przedstawiam nowe rozwiązania (często jest to eliminacja mnóstwa błędnych założeń).

    Ostatnio przedstawiłem algorytm działający na podstawie momentu siły wyliczonego ze wzoru

M = L x ω                                                     (1)

    Skąd ten wzór opisałem w poprzedniej notce

https://www.salon24.pl/u/przestrz/826080,uproszczony-algorytm-symulacji-obrotu-bs

    Teraz trzeba pokazać skąd ten moment siły się bierze. Aby to zobaczy należy rozebrać wzór (1) na czynniki pierwsze.

Iɛ = Iω x ω                                              (2a)

I(dω /dt) + ω x Iω = 0                          (2b)

    Na podstawie tego wzoru wyprowadzamy równania Eulera

Ixɛx = Iyωyωz – Izωzωy              (3)

Iyɛy = Izωzωx – Ixωxωz

Izɛz = Ixωxωy – Iyωyωx

    Trzeba pamiętać że pracujemy na idealistycznym modelu gdzie wcześniej wyznaczono główne momenty bezwładności i umieszczono je na osiach głównych. Masy zostały wyidealizowane do pojedynczych punktów po dwa na każdej osi głównej. Wygląda to mniej więcej tak.

image

    Teraz rozkładamy na czynniki pierwsze jeden z parametrów.

Ixωxωy=(mxr2xxωy                                (4)

mx- masa na osi głównej x

rx- ramię masy mx

ωxy jest nachylona do ramienia rx pod pewnym kątem (rysunek poniżej), a więc

ωx=cos(a)                                   (5)

ωy=sin(a)

Z równania (2a) wiemy że wyniku równania (4) otrzymujemy moment siły M. Pamiętając o równaniach (5) Zapiszmy równanie (4) następująco

Mx=(mxr22sin(a)cos(a)           (7a)


    Zauważmy że moment siły (7a) zeruje się gdy wektor ω jest równoległy z wektorem r, sin0°=0 oraz gdy wektory te są do siebie prostopadłe cos90°=0.

    Jak teraz uzyskać ten moment siły? Zaleca się by we wzorach Eulera główne momenty bezwładności pokrywały się osiami głównymi. W takim układzie odniesienia mamy

Mx=(mxr2xωy                      (7b)

Jednak w układzie odniesienia gdzie wektor ω znajduje się na jednej z osi głównych wzór będzie wyglądał na przykład tak

Mx=(mxω2)rxry                        (7c)


Podobny układ rozpatrywałem już wcześniej

image

trochę więcej, chociaż zapewne nieprecyzyjnie i chaotycznie pisałem o tym wcześniej.

https://www.salon24.pl/u/przestrz/771163,mechanika-obrotu-punktu-bryly-sztywnej


    Przypomnijmy teraz wzór na siłę dośrodkową

Fd=-mrω2                         (8)

    Gdzie r jest wektorem położenia prostopadły do osi obrotu. Bierzemy teraz model wahadła stożkowego.

https://pl.wikipedia.org/wiki/Wahad%C5%82o_sto%C5%BCkowe

image

    Ponieważ do wzoru (8) potrzebujemy r prostopadłe do wektora ω ustalamy zależność

r=rsin(a)                                (9)

    Jak widzimy siła więzów jest to

Fw=-mω2 *rsin(a)                   (10)

    Składowa pionowa Fw unosząca masę w wahadle stożkowym, która to jest równoległa do wektora ω to:

Fwp=Fwcos(a)                         (11)

Fwp tworzy moment siły który wyliczamy z iloczynu wektorowego

M = r x F                               (12)

    Podstawiając teraz (10) do (11) a następnie korzystając ze wzoru (12) otrzymujemy wzór (7a). W ten sposób mamy szczegóły równań Eulera (3) oraz przyczynę sumarycznego momentu siły ze wzoru (1). Nie ma niespodzianek sprawdzałem to już wcześniej ze skutkiem pozytywnym.

https://www.salon24.pl/u/przestrz/812610,momenty-sil-w-mechanice-bs-pierwsza-proba-pozytywnie

    Problem polega na interpretacji wzoru na silę dośrodkową (8). Niestety nie doczytałem się jednoznacznej odpowiedzi jaki ten wektor ma kierunek. Z jednej strony są podręczniki które twierdzą że siła ta musi być siłą centralną, gdyż tylko wtedy wypadkowa sił będzie równa zero, z drugiej strony podręczniki opisują wahadło stożkowe, twierdząc że jest to siła do-osiowa jednak w takiej interpretacji skutkowało by to powstaniem jawnego Momentu sił. W takiej interpretacji wypadkowa sił się nie zeruje, pokazuje to ten schemat.

image

    Większość komentatorów mojego bloga twierdzi że siły te muszą być do-osiowe, ale nie są oni konsekwentni w swoim stwierdzeniu, gdyż nie przeszkadza im to twierdzić że mimo że są to siły do-osiowe to i tak wypadkowa sił równa się zero. Niestety żaden z nich nigdy nie zadał sobie trudu by to sprawdzić i nie widzą oni że przeczą sami sobie. Niestety podobna sytuacja jest z momentem sił, twierdzą oni że M=Iɛ jest prawdziwe ale tak naprawdę w tych wzorach M=Iɛ jest fałszywe. Niestety nie umiem się z nikim dogadać gdyż nikt nie trzyma się konsekwentnie swoich stwierdzeń i przeczą sami sobie. Nikt z nich nie chce się przyznać do pomyłki i uparcie twierdzą że 2=3 jest prawdziwe. Choćbyście powtarzali tysiąckroć że siły więzów są do-osiowe i jednocześnie wypadkowa tych sił równa się zero i nie daje żadnego momentu sił, to i tak stwierdzenie takie jest fałszywe i nie zmienicie tego siła waszej woli. Mylić się jest rzeczą ludzką ale ten kto tkwi uparcie w błędzie jest głupcem. Jeżeli macie racje (jest taka możliwość) to należy poprawić podręczniki które twierdza że jest to siła centralna, a jeżeli podręczniki mają racje ma to też pewne konsekwencje które również Fizyką się nie spodobają.

    Ponieważ równania (7) można uzyskać na kilka sposobów a nie wiem jeszcze który jest prawdziwy, na pierwszy ogień wybrałem interpretacje z do-osiowymi siłami więzów, ponieważ taki model był dla mnie najłatwiejszy do napisania.

    Poniżej skuteczny algorytm, ale nie jestem przekonany czy prawdziwy, przypuszczam że będę umiał napisać co najmniej jeszcze jeden algorytm oparty na interpretacji o centralnych siłach więzów. Pytanie jest który jest prawdziwy i jak to sprawdzić? Być może uda mi się to zrobić przy pomocy wektora krętu, ale jeżeli również ta próba nie udowodni błędności którejś z interpretacji, pozostanie już chyba tylko weryfikacja eksperymentalna.


from visual import *


m1=1           #masy na osiach 1-x, 2-y, 3-z
m2=0.5
m3=0
rx=1              #dlugosc ramion
ry=1
rz=1

wx=0.                         #omega startow
wy=1.
wz=0.1
W=vector(wx,wy,wz)

Ix=(m2*ry*ry)+(m3*rz*rz)   #moment bezwaladnosci
Iy=(m1*rx*rx)+(m3*rz*rz)
Iz=(m2*ry*ry)+(m1*rx*rx)

L=vector((W.x*Ix),(W.y*Iy),(W.z*Iz))    #L=WI
print "L0",mag(L),L

bryla=frame()    #definowanie BS
masa11=sphere(frame=bryla, pos = vector(rx,0,0), radius =0.02, color = color.red)
masa12=sphere(frame=bryla, pos = vector(-rx,0,0), radius =0.02, color = color.red)
masa21=sphere(frame=bryla, pos = vector(0,ry,0), radius =0.02, color = color.blue)
masa22=sphere(frame=bryla, pos = vector(0,-ry,0), radius =0.02, color = color.blue)
masa31=sphere(frame=bryla, pos = vector(0,0,rz), radius =0.02, color = color.green)
ramiex=cylinder(frame=bryla, pos = masa11.pos, radius =0.005, axis=masa12.pos-masa11.pos)
ramiey=cylinder(frame=bryla, pos = masa21.pos, radius =0.005, axis=masa22.pos-masa21.pos)

oX=arrow(axis=vector(1,0,0), shaftwidth=0.01, color =vector(0.7,0.9,0.5))     #osie ukladu inercjalnego
oY=arrow(axis=vector(0,1,0), shaftwidth=0.01, color =vector(0.7,0.9,0.5))
oZ=arrow(axis=vector(0,0,1), shaftwidth=0.01, color =vector(0.7,0.9,0.5))

#kropkaw=sphere(pos=vector(W.x,W.y,W.z), radius=0.01, color= color.blue, make_trail=True)

omega=arrow(axis=vector(W.x,W.y,W.z), color= color.blue, shaftwidth=0.01)
#epsilon=arrow(axis=vector(0,0,0), color= color.green, shaftwidth=0.01)
#momentsi=arrow(axis=vector(0,0,0), shaftwidth=0.01)
os=cylinder(axis=-vector(W.x,W.y,W.z),  radius=0.005)
kret=arrow(axis=vector(L.x,L.y,L.z), color= color.red, shaftwidth=0.01)

predkos1=arrow(pos=vector(1,0,0), axis=vector(0,0,0.01), color= color.yellow, shaftwidth=0.01)
predkos2=arrow(pos=vector(0,1,0), axis=vector(0,0,0.01), color= color.yellow, shaftwidth=0.01)
predkos3=arrow(pos=-vector(1,0,0), axis=-vector(0,0,0.01), color= color.yellow, shaftwidth=0.01)
predkos4=arrow(pos=-vector(0,1,0), axis=-vector(0,0,0.01), color= color.yellow, shaftwidth=0.01)

#sila wiezow
sila1=arrow(pos=vector(1,0,0), axis=vector(0,0.1,0), color= vector(0.,0.8,0.8), shaftwidth=0.02)
sila2=arrow(pos=vector(0,1,0), axis=vector(0.1,0,0), color= vector(0.,0.8,0.8), shaftwidth=0.02)
sila3=arrow(pos=-vector(1,0,0), axis=-vector(0,0.1,0), color= vector(0.,0.8,0.8), shaftwidth=0.02)
sila4=arrow(pos=-vector(0,1,0), axis=-vector(0.1,0,0), color= vector(0.,0.8,0.8), shaftwidth=0.02)

#skladowa dosrodkowa sily wiezow
sila1d=arrow(pos=vector(1,0,0), axis=vector(0,0.1,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)
sila2d=arrow(pos=vector(0,1,0), axis=vector(0.1,0,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)
sila3d=arrow(pos=-vector(1,0,0), axis=-vector(0,0.1,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)
sila4d=arrow(pos=-vector(0,1,0), axis=-vector(0.1,0,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)

#skladowa sily wiezow dajaca M
sila1p=arrow(pos=vector(1,0,0), axis=vector(0,0.1,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)
sila2p=arrow(pos=vector(0,1,0), axis=vector(0.1,0,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)
sila3p=arrow(pos=-vector(1,0,0), axis=-vector(0,0.1,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)
sila4p=arrow(pos=-vector(0,1,0), axis=-vector(0.1,0,0), color= vector(0.4,0.2,0.8), shaftwidth=0.02)


dt=0.001
t=0
n=0

while t<10000:<br />     rate(100)

    r1=bryla.frame_to_world(masa11.pos)     #pozycje mas
    r2=bryla.frame_to_world(masa21.pos)
    r3=bryla.frame_to_world(masa31.pos)

    v1=vector((W.y*r1.z)-(W.z*r1.y),(W.z*r1.x)-(W.x*r1.z),(W.x*r1.y)-(W.y*r1.x))   #predkosci mas
    v2=vector((W.y*r2.z)-(W.z*r2.y),(W.z*r2.x)-(W.x*r2.z),(W.x*r2.y)-(W.y*r2.x))
 
    WW=mag(W)      #dlugosc W
    Wo=vector(W.x/(WW*WW),W.y/(WW*WW),W.z/(WW*WW))  #1/W odwrotnosc omegi

    rxp=vector((v1.y*Wo.z)-(v1.z*Wo.y),(v1.z*Wo.x)-(v1.x*Wo.z),(v1.x*Wo.y)-(v1.y*Wo.x))    # wektor doosiowy r = v x 1/w
    ryp=vector((v2.y*Wo.z)-(v2.z*Wo.y),(v2.z*Wo.x)-(v2.x*Wo.z),(v2.x*Wo.y)-(v2.y*Wo.x))    

    a=diff_angle(W,r1)     #katy miedzy r, W
    b=diff_angle(W,r2)    

    F1=-(m1*WW*WW)*rxp       #sila dosrodkowa Fx`=mrx`w^2  rx=r*sina
    F2=-(m2*WW*WW)*ryp

    Fxc=-vector(r1.x,r1.y,r1.z)    #kierunek sily dosrodkowej
    Fyc=-vector(r2.x,r2.y,r2.z)

    Fxc.mag=mag(F1)*sin(a)      #wartosc sily dosrodkowej
    Fyc.mag=mag(F2)*sin(b)

    Fxm=F1-Fxc            #wektor sily dajacej M
    Fym=F2-Fyc

    #Momenty sil z osi x` i y`
    Mx=vector((r1.y*Fxm.z)-(r1.z*Fxm.y),(r1.z*Fxm.x)-(r1.x*Fxm.z),(r1.x*Fxm.y)-(r1.y*Fxm.x))
    My=vector((r2.y*Fym.z)-(r2.z*Fym.y),(r2.z*Fym.x)-(r2.x*Fym.z),(r2.x*Fym.y)-(r2.y*Fym.x))
    MM=Mx+My

    predkos1.pos=vector(r1.x,r1.y,r1.z)
    predkos1.axis=vector(v1.x,v1.y,v1.z)/3
    predkos2.pos=vector(r2.x,r2.y,r2.z)
    predkos2.axis=vector(v2.x,v2.y,v2.z)/3
    predkos3.pos=-vector(r1.x,r1.y,r1.z)
    predkos3.axis=-vector(v1.x,v1.y,v1.z)/3
    predkos4.pos=-vector(r2.x,r2.y,r2.z)
    predkos4.axis=-vector(v2.x,v2.y,v2.z)/3

    sila1.pos=vector(r1.x,r1.y,r1.z)
    sila1.axis=vector(F1.x,F1.y,F1.z)
    sila2.pos=vector(r2.x,r2.y,r2.z)
    sila2.axis=vector(F2.x,F2.y,F2.z)
    sila3.pos=-vector(r1.x,r1.y,r1.z)
    sila3.axis=-vector(F1.x,F1.y,F1.z)
    sila4.pos=-vector(r2.x,r2.y,r2.z)
    sila4.axis=-vector(F2.x,F2.y,F2.z)

    sila1d.pos=vector(r1.x,r1.y,r1.z)
    sila1d.axis=vector(Fxc.x,Fxc.y,Fxc.z)
    sila2d.pos=vector(r2.x,r2.y,r2.z)
    sila2d.axis=vector(Fyc.x,Fyc.y,Fyc.z)
    sila3d.pos=-vector(r1.x,r1.y,r1.z)
    sila3d.axis=-vector(Fxc.x,Fxc.y,Fxc.z)
    sila4d.pos=-vector(r2.x,r2.y,r2.z)
    sila4d.axis=-vector(Fyc.x,Fyc.y,Fyc.z)

    sila1p.pos=vector(r1.x,r1.y,r1.z)
    sila1p.axis=vector(Fxm.x,Fxm.y,Fxm.z)
    sila2p.pos=vector(r2.x,r2.y,r2.z)
    sila2p.axis=vector(Fym.x,Fym.y,Fym.z)
    sila3p.pos=-vector(r1.x,r1.y,r1.z)
    sila3p.axis=-vector(Fxm.x,Fxm.y,Fxm.z)
    sila4p.pos=-vector(r2.x,r2.y,r2.z)
    sila4p.axis=-vector(Fym.x,Fym.y,Fym.z)
    
    #tensor momentu bezwladnosci
    TIxx=(m1*((r1.y*r1.y)+(r1.z*r1.z)))+(m2*((r2.y*r2.y)+(r2.z*r2.z)))
    TIyy=(m1*((r1.x*r1.x)+(r1.z*r1.z)))+(m2*((r2.x*r2.x)+(r2.z*r2.z)))
    TIzz=(m1*((r1.x*r1.x)+(r1.y*r1.y)))+(m2*((r2.x*r2.x)+(r2.y*r2.y)))
    TIxy=-(m1*r1.x*r1.y)-(m2*r2.x*r2.y)
    TIxz=-(m1*r1.x*r1.z)-(m2*r2.x*r2.z)
    TIyx=-(m1*r1.y*r1.x)-(m2*r2.y*r2.x)
    TIyz=-(m1*r1.y*r1.z)-(m2*r2.y*r2.z)
    TIzx=-(m1*r1.z*r1.x)-(m2*r2.z*r2.x)
    TIzy=-(m1*r1.z*r1.y)-(m2*r2.z*r2.y)

    #wyznacznik macierzy
    A=(TIxx*TIyy*TIzz)+(TIxy*TIyz*TIzx)+(TIxz*TIyx*TIzy)-(TIxx*TIzy*TIyz)-(TIyy*TIzx*TIxz)-(TIzz*TIyx*TIxy)

    #I^-1
    OTIxx=((TIyy*TIzz)-(TIyz*TIzy))/A
    OTIyy=((TIxx*TIzz)-(TIxz*TIzx))/A
    OTIzz=((TIxx*TIyy)-(TIxy*TIyx))/A
    OTIxy=((TIxz*TIzy)-(TIxy*TIzz))/A
    OTIxz=((TIxy*TIyz)-(TIxz*TIyy))/A
    OTIyx=((TIyz*TIzx)-(TIyx*TIzz))/A
    OTIyz=((TIxz*TIyx)-(TIyz*TIxx))/A
    OTIzx=((TIyx*TIzy)-(TIzx*TIyy))/A
    OTIzy=((TIxy*TIzx)-(TIzy*TIxx))/A

    #L=vector((W.x*TIxx+W.y*TIxy+W.z*TIxz),(W.x*TIyx+W.y*TIyy+W.z*TIyz),(W.x*TIzx+W.y*TIzy+W.z*TIzz))
    #print t, "L", mag(L),L

    #M=vector((L.y*W.z)-(L.z*W.y),(L.z*W.x)-(L.x*W.z),(L.x*W.y)-(L.y*W.x))  #M=Lxw
    #print t, M+MM
    M=-vector(MM.x,MM.y,MM.z)
    
    if n<1000:<br />         n=n+1
    else:
        LL=vector((W.x*TIxx+W.y*TIxy+W.z*TIxz),(W.x*TIyx+W.y*TIyy+W.z*TIyz),(W.x*TIzx+W.y*TIzy+W.z*TIzz))
        print t,mag(LL),LL
        n=1
        
    E=vector((M.x*OTIxx+M.y*OTIxy+M.z*OTIxz),(M.x*OTIyx+M.y*OTIyy+M.z*OTIyz),(M.x*OTIzx+M.y*OTIzy+M.z*OTIzz))   #e=M*I^-1
    E=E.rotate(angle=mag(W)*dt,axis=W)
 
    bryla.rotate (angle=mag(W)*dt,axis=W)

    W.x=W.x+E.x*dt                   #wspolrzedne omegi
    W.y=W.y+E.y*dt
    W.z=W.z+E.z*dt

    omega.axis=vector(W.x,W.y,W.z)
    os.axis=-vector(W.x,W.y,W.z)
#    epsilon.axis=vector(E.x,E.y,E.z)
#    momentsi.axis=vector(M.x,M.y,M.z)
    kret.axis=vector(L.x,L.y,L.z)

    t=t+1

L=vector((W.x*TIxx+W.y*TIxy+W.z*TIxz),(W.x*TIyx+W.y*TIyy+W.z*TIyz),(W.x*TIzx+W.y*TIzy+W.z*TIzz))
print mag(L),L  

slej
O mnie slej

Wiem że nic nie wiem a to już coś

Nowości od blogera

Komentarze

Inne tematy w dziale Technologie