¿Cómo se puede implementar la siguiente función en varios idiomas?
Calcule el (x,y)
punto en la circunferencia de un círculo, dados los valores de entrada de:
- Radio
- Ángulo
- Origen (parámetro opcional, si es compatible con el idioma)
¿Cómo se puede implementar la siguiente función en varios idiomas?
Calcule el (x,y)
punto en la circunferencia de un círculo, dados los valores de entrada de:
Respuestas:
La ecuación paramétrica para un círculo es
x = cx + r * cos(a)
y = cy + r * sin(a)
Donde r es el radio, cx, cy el origen y a el ángulo.
Eso es bastante fácil de adaptar a cualquier idioma con funciones trigonométricas básicas. Tenga en cuenta que la mayoría de los idiomas usarán radianes para el ángulo en las funciones trigonométricas, por lo que, en lugar de recorrer 0..360 grados, está recorriendo 0..2PI radianes.
+
y te *
gusta en esas dos ecuaciones y sin paréntesis, siempre vas por el *
primero y luego por el +
.
Aquí está mi implementación en C #:
public static PointF PointOnCircle(float radius, float angleInDegrees, PointF origin)
{
// Convert from degrees to radians via multiplication by PI/180
float x = (float)(radius * Math.Cos(angleInDegrees * Math.PI / 180F)) + origin.X;
float y = (float)(radius * Math.Sin(angleInDegrees * Math.PI / 180F)) + origin.Y;
return new PointF(x, y);
}
Quién necesita trigonometría cuando tienes números complejos :
#include <complex.h>
#include <math.h>
#define PI 3.14159265358979323846
typedef complex double Point;
Point point_on_circle ( double radius, double angle_in_degrees, Point centre )
{
return centre + radius * cexp ( PI * I * ( angle_in_degrees / 180.0 ) );
}
Implementado en JavaScript (ES6) :
/**
* Calculate x and y in circle's circumference
* @param {Object} input - The input parameters
* @param {number} input.radius - The circle's radius
* @param {number} input.angle - The angle in degrees
* @param {number} input.cx - The circle's origin x
* @param {number} input.cy - The circle's origin y
* @returns {Array[number,number]} The calculated x and y
*/
function pointsOnCircle({ radius, angle, cx, cy }){
angle = angle * ( Math.PI / 180 ); // Convert from Degrees to Radians
const x = cx + radius * Math.cos(angle);
const y = cy + radius * Math.sin(angle);
return [ x, y ];
}
Uso:
const [ x, y ] = pointsOnCircle({ radius: 100, angle: 180, cx: 150, cy: 150 });
console.log( x, y );
a
debe estar en radianes, eso fue muy difícil para mí como principiante de entender.