libreria funcion ejemplos c++ c math trigonometry

c++ - funcion - Dado un ángulo y longitud, ¿cómo calculo las coordenadas?



pow c++ (5)

Suponiendo que la esquina superior izquierda es (0,0) y me dan un ángulo de 30 grados, un punto inicial de (0,300), una longitud de línea de 600, ¿cómo calculo el punto final de la línea para que Es representativo del ángulo dado.

El pseudocódigo C es

main() { int x,y; getEndPoint(30, 600, 0, 300, &x, &y); printf("end x=%d, end y=%d", x, y); } // input angle can be from 0 - 90 degrees void getEndPoint(int angle, int len, int start_x, int start_y, int *end_x, int *end_y) { calculate the endpoint here for angle and length *end_x = calculated_end_x; *end_y = calculated_end_y; }


La gente está olvidando la complex biblioteca en C ++, que hace conversiones polares a rectangulares para nosotros.

complex<double> getEndPoint(complex<double> const &startPoint, double magnitude, double radians) { return startPoint + polar<double>(magnitude, radians); } int main() { complex<double> startingPoint(0.0, 300.0); auto newPoint = getEndPoint(startingPoint, 600, 0.523598776); cout << newPoint << endl; }

También tendría cuidado con su terminología elegida. Cuando veo get un nombre, lo considero como recuperar una respuesta almacenada en algún lugar. En este ejemplo, estamos calculando algo, y eso podría ser una falsa seguridad dada a un usuario de su código.


No dice a qué se mide el ángulo en relación con, o incluso a qué dirección van sus ejes. Esto hará una diferencia.

Primero debe convertir de grados a radianes (multiplicar por PI y dividir por 180). Luego necesitas tomar el seno y el coseno de tu ángulo y multiplicarlos por la longitud de la línea. Ahora tiene dos números para sus coordenadas, pero depende de qué direcciones vayan sus ejes y de dónde mida sus ángulos, cuál de estos valores es la coordenada x y cuál es la y, y si es necesario negar alguno de ellos.


math.h tiene todas las funciones trigonométricas que necesitas. Es posible que deba entregar -lm a su enlazador, dependiendo del sistema en el que esté construyendo (a veces es automático).


// Here is a complete program with the solution in C and command-line parameters // Compile with the math library: // gcc -Wall -o point_on_circle -lm point_on_circle.c // // point_on_circle.c #include <stdio.h> #include <stdlib.h> #include <math.h> double inline degree2radian(int a) { return (a * 0.017453292519); } void getEndPoint(double angle, int len, int start_x, int start_y, int *end_x, int *end_y) { *end_x = start_x + len * cos(angle); *end_y = start_y + len * sin(angle); } // getEndPoint int main(int argc, char *argv[]) { double angle = atoi(argv[1]); int length = atoi(argv[2]); int start_x = atoi(argv[3]); int start_y = atoi(argv[4]); int x, y; getEndPoint(degree2radian(angle), length, start_x, start_y, &x, &y); printf("end x=%d, end y=%d/n", x, y); return 0; } // main


// edit to add conversion #define radian2degree(a) (a * 57.295779513082) #define degree2radian(a) (a * 0.017453292519) x = start_x + len * cos(angle); y = start_y + len * sin(angle);