¿Cómo puedo representar una ecuación vectorial de un segmento de línea en C ++?
Estoy trabajando con gráficos por computadora.
Me gustaría representar una línea con dos puntos finales, y luego me gustaríaLine2d
clase para tener un método que devuelve unVector2d
objeto.
Supongamos que tengo las siguientes clases:
struct Point2d
{
int x;
int y;
};
Entonces, puedo representar fácilmente un segmento de línea usando dos puntos:
class LineSegment2d
{
private:
Point2d start;
Point2d end;
public:
...
...
};
Según la definición, un vector se compone de una magnitud y una dirección.
class Vector2d
{
private:
Point2d p;
public:
double Magnitude(void);
Point Component(void);
Vector2d Normal();
Vector2d & Add(Vector & rhs);
Vector2d & Subtract(Vector & rhs);
Vector2d & Multiply(int scalar);
int DotProduct(Vector2d rhs);
Vector2d & CrossProduct(Vector2d rhs);
};
Un objeto dePoint2d
es suficiente para representar un vector. Por ejemplo, la magnitud de un vector =sqrt(p.x*p.x + p.y*p.y);
. Y,p.x
yp.y
representan colectivamente la dirección.
Por otro lado, sabemos que la ecuación vectorial de una línea que pasa a través de(x0,y0,z0)
es,r =r0 + tv
Dónde,r
es el vector para la línea de asunto.r0
es un vector de posición que apunta a la dirección del punto(x0, y0, z0)
. Dado que r0 es un vector de posición, obviamente, el origen de r0 sería(0,0,0)
. t
es cualquier valor numerado real, donde,−∞<t<∞ –
. v
es un vector que es paralelo a nuestra línea recta del sujeto.
Ecuación vectorial de un segmento de línea entre los puntos.P(1, 3, 2)
yQ(-4, 3, 0)
:
De acuerdo con la fórmula anterior, la ecuación vectorial de la líneaPQ
podría ser cualquiera
r =<1,3,2> + tv
o,
r =<-4,3,0> + tv
El vector que conecta los dos puntos.P
yQ
es,
PQ = <(-4-1), (3-3), (0-2)>
= <-5, 0, -2>
Y, este vector es paralelo a nuestra línea de asunto seguro.
Entonces, podemos escribir,
r =<1, 3, 2> + t <-5, 0, -2>
=<1, 3, 2>+<-5t, 0, -2t>
= <(1-5t), (3+0), (2-2t)>
=<1-5t, 3, 2-2t>
De acuerdo con la ecuación vectorial de un segmento de línea, creo que mi clase de Vector debería tener el siguiente aspecto:
class LineVector2d
{
private:
Vector2d v;
double t;
public:
..........
};
¿Es esta la representación correcta?
Si es así, ¿cómo puedo calcular / establecer / encontrar el valor det
?