Vamos a calcular el vértice de una parábola, a partir de tres puntos X/Y dados, que forman parte de la misma.
La forma general de una parábola se da por la ecuación:
A * x ^ 2 + B * x + C = y
Donde A, B y C son constantes reales arbitrarias.
Tienes tres pares de puntos, que son pares ordenados de (x ,
y).
(x1,y1) (x2,y2) (x3,y3)
Sustituye los valores de “x” y “y” de cada punto en la
ecuación de la parábola y se multiplica el vector por la matriz.
Podemos expresarlo en pseudocódigo de la siguiente manera:
denom = (x1 - x2)(x1 - x3)(x2 - x3) A = (x3 * (y2 - y1) + x2 * (y1 - y3) + x1 * (y3 - y2)) / denom B = (x3^2 * (y1 - y2) + x2^2 * (y3 - y1) + x1^2 * (y2 - y3)) / denom C = (x2 * x3 * (x2 - x3) * y1 + x3 * x1 * (x3 - x1) * y2 + x1 * x2 * (x1 - x2) * y3) / denom
Y a partir de este pseudocódigo, podemos
expresarlo en cualquier lenguaje de programación, por ejemplo:
Java:
Java:
double denom = (x1 - x2)(x1 - x3)(x2 - x3): double A = (x3 * (y2 - y1) + x2 * (y1 - y3) + x1 * (y3 - y2)) / denom; double B = (x3^2 * (y1 - y2) + x2^2 * (y3 - y1) + x1^2 * (y2 - y3)) / denom; double C = (x2 * x3 * (x2 - x3) * y1 + x3 * x1 * (x3 - x1) * y2 + x1 * x2 * (x1 - x2) * y3) / denom;
C#:
public static void CalcVerticeParabola(int x1, int y1, int x2, int y2, int x3, int y3, out double xv, out double yv) { double denom = (x1 - x2) * (x1 - x3) * (x2 - x3); double A = (x3 * (y2 - y1) + x2 * (y1 - y3) + x1 * (y3 - y2)) / denom; double B = (x3*x3 * (y1 - y2) + x2*x2 * (y3 - y1) + x1*x1 * (y2 - y3)) / denom; double C = (x2 * x3 * (x2 - x3) * y1 + x3 * x1 * (x3 - x1) * y2 + x1 * x2 * (x1 - x2) * y3) / denom; xv = -B / (2*A); yv = C - B*B / (4*A); }
Dinos, ¿cómo lo expresarías en otro lenguaje? Déjanos un
comentario en la sección inferior.
No hay comentarios:
Publicar un comentario