Μπορεί κανείς να μου τι είναι η αρπάγη του βραχίονα ;
Είχα σήμερα να παραδώσω μία εργασία που λύνει το αντίστροφο κινηματικό πρόβλημα 1ου μέλους ενός βραχίονα.
Δίνουμε τις τα x και y, και ζητάμε από την function να μας κάνει return τις μοίρες της γωνίας θ. Η γωνία αυτή ισούται με το τόξο εφαπτομένης y/x , πράγμα που σημαίνει ότι σε κάθε τεταρτημόριο θα έχω διαφορετικό αποτέλεσμα. Εκτός αυτού, η function atan ή tan, παίρνει τιμές από -π/2 έως π/2 ενώ εγώ θέλω τιμές από [0,2π). Αυτό είναι και το βασικό μας πρόβλημα για την υλοποίηση του κώδικα.
Πρώτο τεταρτημόριο
User Input: x>0 και y>0
Formula: f = atn(y / x)
Δεύτερο τεταρτημόριο
User Input: x<0 και y>0
Formula: f = atn(y / x) + π
Για παράδειγμα: τοξεφ(-1)=-τοξεφαπτ(1) = -45 που είναι λάθος γιατί δεν μπορώ να έχω -45ο μοίρες. Αυτό σημαίνει ότι αν το βρισκόμαστε στο 2ο τεταρτημόριο όπου το x είναι αρνητικό και το y θετικό, τότε η γωνία αντιστοιχεί το 4ο τεταρτημόριο. Επειδή όμως θέλουμε από το [0, 2π] , για αυτό το λόγω προσθέτουμε το ‘π’ ώστε να έχω 180-45=135ο μοίρες.
Τρίτο τεταρτημόριο
User Input: x<0 και y<0
Formula: f = atn(y / x) + π
Για παράδειγμα, το αποτέλεσμα δεν θα βγει σωστό από το πρόσημο χάνεται στο πηλίκο.
Τέταρτο τεταρτημόριο
User Input: x>0 και y<0
Formula: f = atn(y / x) + 2π
Για τον ίδιο λόγο με το δεύτερο τεταρτημόριο.
Επίσης υπάρχουν κάποια ακόμα πραγματάκια που πρέπει να προσέξουμε όπως πχ το ενδεχόμενο το x=0 ή x=κοντά στο μηδέν. Αν λοιπόν το x είναι <= του 0.0001 (δεν βάζουμε ποτέ 0 ), τότε ο βραχίονας εξαρτάτε μόνο από το y:
• Y>0 τότε f = π/2
• Υ<0 τότε f = 3π/2
Σε περίπτωση που το x είναι τελικά >0.0001 τότε ισχύουν οι παραπάνω 4 περιπτώσεις με τα τεταρτημόρια στο καρτεσιανό σύστημα συντ/νων.
Κάτι τελευταίο: για να κάνω το f (rad) σε μοίρες η φόρμουλα είναι: ( F* 180/π )
SOURCE CODE σε QBASIC
Είχα σήμερα να παραδώσω μία εργασία που λύνει το αντίστροφο κινηματικό πρόβλημα 1ου μέλους ενός βραχίονα.
Δίνουμε τις τα x και y, και ζητάμε από την function να μας κάνει return τις μοίρες της γωνίας θ. Η γωνία αυτή ισούται με το τόξο εφαπτομένης y/x , πράγμα που σημαίνει ότι σε κάθε τεταρτημόριο θα έχω διαφορετικό αποτέλεσμα. Εκτός αυτού, η function atan ή tan, παίρνει τιμές από -π/2 έως π/2 ενώ εγώ θέλω τιμές από [0,2π). Αυτό είναι και το βασικό μας πρόβλημα για την υλοποίηση του κώδικα.
Πρώτο τεταρτημόριο
User Input: x>0 και y>0
Formula: f = atn(y / x)
Δεύτερο τεταρτημόριο
User Input: x<0 και y>0
Formula: f = atn(y / x) + π
Για παράδειγμα: τοξεφ(-1)=-τοξεφαπτ(1) = -45 που είναι λάθος γιατί δεν μπορώ να έχω -45ο μοίρες. Αυτό σημαίνει ότι αν το βρισκόμαστε στο 2ο τεταρτημόριο όπου το x είναι αρνητικό και το y θετικό, τότε η γωνία αντιστοιχεί το 4ο τεταρτημόριο. Επειδή όμως θέλουμε από το [0, 2π] , για αυτό το λόγω προσθέτουμε το ‘π’ ώστε να έχω 180-45=135ο μοίρες.
Τρίτο τεταρτημόριο
User Input: x<0 και y<0
Formula: f = atn(y / x) + π
Για παράδειγμα, το αποτέλεσμα δεν θα βγει σωστό από το πρόσημο χάνεται στο πηλίκο.
Τέταρτο τεταρτημόριο
User Input: x>0 και y<0
Formula: f = atn(y / x) + 2π
Για τον ίδιο λόγο με το δεύτερο τεταρτημόριο.
Επίσης υπάρχουν κάποια ακόμα πραγματάκια που πρέπει να προσέξουμε όπως πχ το ενδεχόμενο το x=0 ή x=κοντά στο μηδέν. Αν λοιπόν το x είναι <= του 0.0001 (δεν βάζουμε ποτέ 0 ), τότε ο βραχίονας εξαρτάτε μόνο από το y:
• Y>0 τότε f = π/2
• Υ<0 τότε f = 3π/2
Σε περίπτωση που το x είναι τελικά >0.0001 τότε ισχύουν οι παραπάνω 4 περιπτώσεις με τα τεταρτημόρια στο καρτεσιανό σύστημα συντ/νων.
Κάτι τελευταίο: για να κάνω το f (rad) σε μοίρες η φόρμουλα είναι: ( F* 180/π )
SOURCE CODE σε QBASIC
- Κώδικας:
FUNCTION atan2 (X, Y)
IF ABS(X) < E THEN
IF Y > 0 THEN f = PI / 2
IF Y < 0 THEN f = 3 * P1 / 2
ELSE
IF X > 0 AND Y > 0 THEN
f = ATN(Y / X)
ELSEIF X < 0 THEN
f = ATN(Y / X) + PI
ELSE
f = ATN(Y / X) + 2 * PI
END IF
END IF
atan2 = f
END FUNCTION