Home > Mobile >  C Getting points between 2 points
C Getting points between 2 points

Time:06-21

So I have 2 points where I want to get points in between them for smoother teleport travel.

POINT a; //Character Position
POINT b; //Some random map position

I was using this formula to get a middle point first, but I want to add more points of travel before reaching POINT 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;
    }

I thought I could just calculate middle points more frequently to get shorter positions but I was wondering if there was a more dynamic way of doing this instead of coding in several different middle points.

I don't want to keep doing this simple approach:

POINT middlepoint = midpoint(a, b);
POINT closerpoint = midpoint(a, middlepoint);

How I want it to travel - number of points don't matter too much

CodePudding user response:

It's all just using proportions.

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 );
    }
}

CodePudding user response:

If your POINT class implements multiplication of a point by a float or double, and addition of two points (which are two handy operations to support), just make a float or double that changes from 0 to 1 over time, and do this:

float t = ...;  // changes from 0 to 1 over time
POINT intermediate = a * (1 - t)   b * t;
  •  Tags:  
  • c
  • Related