Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Obliczanie współrzędnych, układ kartezjański ?
snerf
post 18.09.2018, 17:19:39
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


hej

na początku dodam że jestem ZIELONY z matematyki i nigdy jej nie zrozumiem smile.gif


Oś Z to obracany u mnie kąt B

Przykładowe dane
VZOFX[1]=000.000 VZOFY[1]=421.0000 VZOFZ[1]=185.000 ( B0 )

Po obliczeniu np kąta B122 powinno wyjść coś takiego
VZOFX[3]=-55.971 VZOFY[3]=421.000 VZOFZ[3]=-34.975 ( B122 )
inne przykładowe cyferki
VZOFX[4]=58.275 VZOFY[4]=421.000 VZOFZ[4]=-30.985 ( B242 )
VZOFX[5]=-66.000 VZOFY[5]=421.000 VZOFZ[5]=000.000 ( B90 )
VZOFX[6]=33.000 VZOFY[6]=421.000 VZOFZ[6]=57.158 ( B330 )
VZOFX[7]=185.000 VZOFY[7]=421.000 VZOFZ[7]=000.000 ( B270 )

jak napisać algorytm na postawie "sinus cosinus" który po podaniu współrzędnych X Z wyliczy mi dowolny kąt od 0 do 359* questionmark.gif
Z formularzem i samym kodem sobie poradzę ale jak wspomniałem matematyk zemnie taki że kalkulator potrafię odpalić wink.gif

pozdrawiam
Go to the top of the page
+Quote Post
Pyton_000
post 18.09.2018, 17:24:28
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Ile masz lat?
Go to the top of the page
+Quote Post
snerf
post 18.09.2018, 17:28:42
Post #3





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 18.09.2018, 18:24:28 ) *
Ile masz lat?


20, rozumiem że to podstawa podstaw czy że nie te forum facepalmxd.gif, jak coś z tego to niech administrator usunie ten wątek thumbsdownsmileyanim.gif
Go to the top of the page
+Quote Post
trzczy
post 19.09.2018, 00:40:09
Post #4





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Chodzi o obliczenie kąta między osią X a odcinkiem, którego pierwszy koniec umieszczony jest w punkcie x=0, y=0, a drugi koniec w punkcie x=A, y=B, gdzie A i B to zadane liczby?


To będzie arcus tangens B/A

http://php.net/manual/pl/function.atan2.php


  1. $valueA=15;
  2. $valueB=37;
  3. $ang = atan2($valueB, $valueA);


Ten post edytował trzczy 19.09.2018, 00:44:24
Go to the top of the page
+Quote Post
snerf
post 19.09.2018, 15:03:02
Post #5





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


Cytat(trzczy @ 19.09.2018, 01:40:09 ) *
Chodzi o obliczenie kąta między osią X a odcinkiem, którego pierwszy koniec umieszczony jest w punkcie x=0, y=0, a drugi koniec w punkcie x=A, y=B, gdzie A i B to zadane liczby?


To będzie arcus tangens B/A

http://php.net/manual/pl/function.atan2.php


  1. $valueA=15;
  2. $valueB=37;
  3. $ang = atan2($valueB, $valueA);




Bardziej chodzi o to że mam np kąt 0 i podane współrzędne X i Z

VZOFX[1]=000.000 VZOFY[1]=421.0000 VZOFZ[1]=185.000 ( B0 )

chciałbym wyliczyć przesunięcie współrzędnych po podaniu innego kąta np 45 lub 279



Go to the top of the page
+Quote Post
trueblue
post 19.09.2018, 16:36:16
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Cytat(snerf @ 18.09.2018, 18:19:39 ) *
Oś Z to obracany u mnie kąt B

Przykładowe dane
VZOFX[1]=000.000 VZOFY[1]=421.0000 VZOFZ[1]=185.000 ( B0 )

Po obliczeniu np kąta B122 powinno wyjść coś takiego
VZOFX[3]=-55.971 VZOFY[3]=421.000 VZOFZ[3]=-34.975 ( B122 )

Ewidentnie coś jest nie tak.
Jeśli dokonujesz obrotu wokół osi Z, to współrzędna Y na pewno się zmieni, a Z pozostanie bez zmian.


--------------------
Go to the top of the page
+Quote Post
snerf
post 19.09.2018, 18:17:28
Post #7





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


zrobiłem chaos przepraszam, wygląda to tak

obrót wokół osi Y

próbuje zrobić w ten sposób
  1. <?php
  2. function Getasinh($kat, $xx, $zz)
  3. {
  4. $srodek_x = 0;
  5. $srodek_z = 0;
  6. $x=$xx-$srodek_x;
  7. $z=$zz-$srodek_z;
  8. $l104 = atan2($x, $z);
  9. $l105 = $z/cos($l104);
  10.  
  11. $l106 = $kat; //angle
  12. $show_x = $srodek_x+sin($l104-$l106)*$l105;
  13. $show_z = $srodek_z+cos($l104-$l106)*$l105;
  14. return 'os X ['.$l106.']: '.$show_x.' <br>os Z ['.$l106.']: '.$show_z;
  15. }
  16. echo '<hr> '.Getasinh(180, 0, 185);
  17. ?>


otrzymuje:
os X [180]: 148.21323761076
os Z [180]: -110.7151127757


a powinno być VZOFX[2]=000.000 VZOFZ[2]=185.000 ( B180 )

Ten post edytował snerf 19.09.2018, 18:18:30
Go to the top of the page
+Quote Post
trueblue
post 19.09.2018, 18:35:11
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Jeżeli:
Cytat
Przykładowe dane
VZOFX[1]=000.000 VZOFY[1]=421.0000 VZOFZ[1]=185.000 ( B0 )


to przy obrocie wokół osi Y:
Cytat( @ 19.09.2018, 19:17:28 ) *
a powinno być VZOFX[2]=000.000 VZOFZ[2]=185.000 ( B180 )

na pewno zmieni się współrzędna X i/lub Z.
Tu pokazałeś, że obydwie współrzędne nie zmieniają się. Nie wiem co ze współrzędną Y. Bo jeśli nie zmienia się, to na pewno nie jest to obrót o kąt 180 stopni, a jeśli się zmienia, to nie jest to obrót wokół osi Y.

Podaj jeszcze raz dla jakich danych wejściowych, obrotu wokół której osi, jakie dane wyjściowe powinieneś otrzymać.





--------------------
Go to the top of the page
+Quote Post
snerf
post 19.09.2018, 18:47:09
Post #9





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


hej


X sie nie zmieni ponieważ ma 0 a Z sie nie zmienił z powodu że taki kształt ma mój model po drugiej stronie też ma punt na pozycji 185

inny przykład modelu w osi (wszystkie bazy np B122 są obliczane od bazy B0 po obróceniu i przesunięciu)
VZOFX[1]=000.000 VZOFZ[1]=186.000 ( B0 )
VZOFX[2]=000.000 VZOFZ[2]=184.000 ( B180 )
VZOFX[3]=-56.819 VZOFZ[3]=-35.505 ( B122 )
VZOFX[4]=59.157 VZOFZ[4]=-31.455 ( B242 )
VZOFX[5]=-67.000 VZOFZ[5]=000.000 ( B90 )
VZOFX[6]=33.500 VZOFZ[6]=58.024 ( B330 )
VZOFX[7]=186.000 VZOFZ[7]=000.000 ( B270 )


Dodam że chce właśnie uzyskać coś takiego jak tutaj: http://www.advancedcncsolutions.com/sample...tureOffsetCalc4
Go to the top of the page
+Quote Post
trueblue
post 19.09.2018, 18:58:47
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Po drugiej stronie Z powinno mieć -185 - tak jest dla standardowego układu w trzech wymiarach. Nie wiem na czym polega działanie Twojego modelu.

Jeśli tak, to równania na obrót wokół osi Y wyglądają następująco:
x2=cos(kat)*x-sin(kat)*z
y2=y
z2=sin(kat)*x+cos(kat)*z

co daje:
x2=-1*0-0*185=0
y2=421
z2=0*0+(-1)*185=-185

Może Ci to w jakiś sposób pomoże.


--------------------
Go to the top of the page
+Quote Post
snerf
post 19.09.2018, 19:28:15
Post #11





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


Cytat(trueblue @ 19.09.2018, 19:58:47 ) *
Po drugiej stronie Z powinno mieć -185 - tak jest dla standardowego układu w trzech wymiarach. Nie wiem na czym polega działanie Twojego modelu.

Jeśli tak, to równania na obrót wokół osi Y wyglądają następująco:
x2=cos(kat)*x-sin(kat)*z
y2=y
z2=sin(kat)*x+cos(kat)*z

co daje:
x2=-1*0-0*185=0
y2=421
z2=0*0+(-1)*185=-185

Może Ci to w jakiś sposób pomoże.


dzięki za zaangażowanie smile.gif

  1. <?php
  2. function Getasinh($kat, $x, $z)
  3. {
  4.  
  5. $show_x = cos($kat)*$x-sin($kat)*$z;
  6. $show_z = sin($kat)*$x+cos($kat)*$z;
  7.  
  8. return 'os X ['.$kat.']: '.$show_x.' <br>os Z ['.$kat.']: '.$show_z.'<br>';
  9. }
  10. echo '<hr> '.Getasinh(180, 0, 185);
  11. ?>


zwraca mi:
os X [180]: 148.21323761076
os Z [180]: -110.7151127757

a x pownien 0 , z 185

kąt 330:
os X [330]: 24.490601403009
os Z [330]: -183.37178202471


a powinien:
X[6]=33.000 Z[6]=57.158 ( B330 )


Pytałeś skąd mam te dane:
Są to współrzędne obrabiarki wyliczone przez nią na podstawie kąta np 0 w tym wypadku

Ten post edytował snerf 19.09.2018, 19:29:03
Go to the top of the page
+Quote Post
trueblue
post 19.09.2018, 19:29:47
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Wiesz, że dla funkcji sin i cos powinieneś podać wartości kątów w radianach, prawda?


--------------------
Go to the top of the page
+Quote Post
snerf
post 19.09.2018, 19:39:26
Post #13





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


Cytat(trueblue @ 19.09.2018, 20:29:47 ) *
Wiesz, że dla funkcji sin i cos powinieneś podać wartości kątów w radianach, prawda?



$katy = deg2rad($kat);
$show_x = cos($katy)*$x-sin($katy)*$z;
$show_z = sin($katy)*$x+cos($katy)*$z;


Dodałem ale wyszły jeszcze większe cyrki, no nic chyba się poddaje smile.gif


os X [330]: 92.5
os Z [330]: 160.21469970012
Go to the top of the page
+Quote Post
trzczy
post 19.09.2018, 21:45:17
Post #14





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


https://3v4l.org/fG1aI

Tutaj to zrobiłem. Kod jest "brzydki", bo przerabiałem kod znaleziony na internecie. Ale skupmy się na wynikach funkcji:

Znajdujemy kolejno wynik dla 0, 45, 90, 135, 180 i potem od czapy 22.5

Z grubsza widać że wyniki są ok.

Założeniem moim było, że znajdujemy współrzędne punktu na okręgu, tak jakby chodziła w tył wskazówka zegara. Jak te wyniki są ok, to trzeba ładniej to napisać np. zrobić jedną funkcję, a nie dwie.

Ten post edytował trzczy 19.09.2018, 21:46:06
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 23:59