Как я могу представить векторное уравнение отрезка в C ++?
Я работаю с компьютерной графикой.
Я хотел бы представить линию с двумя конечными точками, а затем я хотел бы мойLine2d
класс, чтобы иметь метод, который возвращаетVector2d
объект.
Предположим, у меня есть следующие классы:
struct Point2d
{
int x;
int y;
};
Затем я могу легко представить отрезок, используя две точки:
class LineSegment2d
{
private:
Point2d start;
Point2d end;
public:
...
...
};
Согласно определению, вектор состоит из величины и направления.
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);
};
Один объектPoint2d
достаточно, чтобы представить вектор. Например, величина вектора =sqrt(p.x*p.x + p.y*p.y);
, А также,p.x
а такжеp.y
коллективно представлять направление.
С другой стороны, мы знаем, что векторное уравнение прямой, проходящей через(x0,y0,z0)
является,r =r0 + tv
Куда,r
вектор для предметной линии.r0
вектор положения, указывающий на направление точки(x0, y0, z0)
, Поскольку r0 является позиционным вектором, очевидно, что начало r0 будет(0,0,0)
. t
любое действительное пронумерованное значение, где−∞<t<∞ –
. v
это вектор, который параллелен нашей предметной прямой линии.
Векторное уравнение отрезка между точкамиP(1, 3, 2)
а такжеQ(-4, 3, 0)
:
Согласно приведенной выше формуле, векторное уравнение прямойPQ
может быть либо
r =<1,3,2> + tv
или же,
r =<-4,3,0> + tv
Вектор, соединяющий две точкиP
а такжеQ
является,
PQ = <(-4-1), (3-3), (0-2)>
= <-5, 0, -2>
И этот вектор точно параллелен нашей теме.
Итак, мы можем написать,
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>
В соответствии с векторным уравнением отрезка, я думаю, мой класс Vector должен выглядеть следующим образом:
class LineVector2d
{
private:
Vector2d v;
double t;
public:
..........
};
Это правильное представление?
Если это так, как я могу рассчитать / установить / найти значениеt
?