Как я могу представить векторное уравнение отрезка в 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?

Ответы на вопрос(6)

Ваш ответ на вопрос