Problema in un programma per calcolare la rotazione di un punto sul piano.

Salve! Sto tentando di creare un programma in grado di calcolare le coordinate di un punto, sul piano cartesiano, che ha subito una rotazione conoscendo le coordinate di partenza, i gradi della rotazione e le coordinate del punto intorno al quale deve ruotare. Il programma è questo:

/*
 11/04/2020
 */
 int angolo_di_rotazione_in_gradi;
 double angolo_di_rotazione_non_in_gradi;
 double X_punto_di_rotazione;
 double Y_punto_di_rotazione;
 double X_punto_da_ruotare;
 double Y_punto_da_ruotare;
 double X_punto_ruotato;
 double Y_punto_ruotato;
 double differenza_di_X;
 double differenza_di_Y;
#define angolo_di_rotazione_in_gradi 180 //Inserire il valore in gradi.
#define X_punto_di_rotazione 0.0  //Inserire il valore in decimali(obbligatorio usare il punto).
#define Y_punto_di_rotazione 0.0  //Inserire il valore in decimali(obbligatorio usare il punto).
#define X_punto_da_ruotare 0.0    //Inserire il valore in decimali(obbligatorio usare il punto).
#define Y_punto_da_ruotare 5.0    //Inserire il valore in decimali(obbligatorio usare il punto).
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
differenza_di_X = X_punto_da_ruotare-X_punto_di_rotazione;
differenza_di_Y = Y_punto_da_ruotare-Y_punto_di_rotazione;
angolo_di_rotazione_non_in_gradi = map(angolo_di_rotazione_in_gradi, 0, 180, 0, 3.14); 
X_punto_ruotato = (differenza_di_X*cos(angolo_di_rotazione_non_in_gradi))-(differenza_di_Y*sin(angolo_di_rotazione_non_in_gradi));
Y_punto_ruotato = (differenza_di_X*sin(angolo_di_rotazione_non_in_gradi))+(differenza_di_Y*cos(angolo_di_rotazione_non_in_gradi));
Serial.print("X_punto_ruotato: ");
Serial.print(X_punto_ruotato);
Serial.print("\n");
Serial.print("Y_punto_ruotato: ");
Serial.print(Y_punto_ruotato);
Serial.print("\n\n");
}

void loop() {
  // put your main code here, to run repeatedly:

}

I dati che si conoscono vanno inseriti con la direttiva "#include"(come specificato nei commenti). Non ricevo messaggi di errore, infatti il caricamento avviene, il problema sono i risultati impossibili che trovo anche inserendo input dei quali conosco già gli output. Grazie mille!

Buongiorno, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Grazie per la segnalazione!

Di che Arduino stiamo parlando? ... perché su quelli basati sulla famiglia AVR i double NON esistono e tutto viene fatto con i float a 32bit la cui precisione è estremamente scarsa. Il reference riporta:

Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.

.... anche se la cosa è un po' fuorviante come si era discusso a suo tempo QUI

In ogni caso parliamo di 6/7 digit e gli arrotondamenti si sprecano :smiley:

Guglielmo

Non me ne intendo di modelli famiglie, comunque sul mio c'è scritto "UNO R3".

uranios:
Non me ne intendo di modelli famiglie, comunque sul mio c'è scritto "UNO R3".

Appunto, famiglia AVR, ATmega328P :wink: ... vale quanto ti ho scritto sopra.

Guglielmo

Grazie mille!
Ora considero il problema in un programma per calcolare la rotazione di un punto sul piano risolto! :slight_smile: