所以我有两个点,我想在它们之间获得点,以便更顺利地传送旅行。
POINT a; //Character Position
POINT b; //Some random map position
我使用这个公式是为了先得到一个中点,但我想在到达b点之前增加更多的旅行点。
POINT midpoint(const POINT& a, const POINT& b)
{
POINT ret;
ret.x = (a.x + b.x) / 2;
ret.y = (a.y + b.y) / 2;
return ret;
}
我想我可以更频繁地计算中点来获得更短的位置,但我想知道是否有一种更动态的方法来做到这一点,而不是在几个不同的中点编码。
我不想继续使用这种简单的方法:
POINT middlepoint = midpoint(a, b);
POINT closerpoint = midpoint(a, middlepoint);
我希望它如何移动-点的数量不太重要
这些都只是使用比例。
void MakePoints( const POINT& a, const POINT& b, int n, std::vector<POINT> & pts )
{
pts.clear();
pts.push_back( a );
int dx = b.x - a.x;
int dy = b.y - a.y;
for( int i = 1; i <= n, i++ )
{
pts.emplace_back( a.x + dx * i / n, a.y + dy * i / n );
}
}
如果您的POINT
类实现了一个点与float
或double
的乘法,以及两个点的加法(这是两个方便的操作来支持),只需制作一个随时间从0到1变化的float
或double
,并执行以下操作:
float t = ...; // changes from 0 to 1 over time
POINT intermediate = a * (1 - t) + b * t;