我正在从事计算机图形学相关工作。
我想用两个端点表示一条线段,然后我希望我的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);
};
r = P + t(PQ)
or r = Q + t(QP)
, where PQ
and QP
are vectors representing the direction of the line segment.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
的值?
int
坐标构成的向量的大小并不总是一个int
(例如,(1,1)的大小为sqrt(2))。 - kasterma