DevStuffz
DevStuffz

Reputation: 39

How to find the other endpoint given an endpoint and the midpoint

I am working on a desktop app that will help students with algebra. I have a class called Vector2 that just stores two variables, x and y. I am working on a method that will return the endpoint of a line given an endpoint and a midpoint. Just to show how I have been doing this here is a method

public static Vector2 midpoint(double xa, double ya, double xb, double yb){
           Vector2 v = new Vector2(0, 0);
           v.x = (xa + xb) / 2;
           v.y = (ya + yb) / 2;
           return v;
    }

Given this how would I make a method that will give me the other endpoint?

Example: if the given endpoint is (-3, -5) and the given midpoint is (-6, -2) then the output should be (-9, 1)

EDIT FOR NEW PPL: I have the answer, it is pretty simple. Here is the final method

  public static Vector2 otherEndpoint(double endPointX, double EndPointY, double midPointX,  double midPointY){
        Vector2 v = new Vector2(0,0);

        v.x = (endPointX + midPointX) / 2;
        v.y = (EndPointY + midPointY) / 2;

        v.multiply(2);

        return v;
    }

v.multiply() is a method that I made that will multiply each point by whatever number you put in

Upvotes: 0

Views: 562

Answers (3)

WJS
WJS

Reputation: 40047

Here is the method that shows how to compute it.

Note that this works because you know that one point is in the middle. So the desired endpoint is just one step away from the middle or two steps away from the other end.

public static Vector2 midpoint(double xe, double ye, double xm,
        double ym) {
    
    // calculate the step to go from the end point to the middle
    // for both x and y.
    double xstep = xm - xe; 
    double ystep = ym - ye;
    
    // then just add the step to the middle to get the end point.
    return new Vector2(xm + xstep, ym + ystep);
        
}

Note that the above will not work to find any point. For that you must simply find the equation of the line y = mx + b by computing the slope, m, and y-intercept, b.

Upvotes: 1

Oleg Cherednik
Oleg Cherednik

Reputation: 18255

public final class Point {
    private final int x;
    private final int y;
    
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public static Point getMidpoint(Point one, Point two) {
    int x = (one.x + two.x) / 2;
    int y = (one.y + two.y) / 2;
    return new Point(x, y);
}

public static Point getEndpoint(Point one, Point mid) {
    int x = (2 * mid.x) - one.x;
    int y = (2 * mid.y) - one.y;
    return new Point(x, y);
}

Upvotes: 1

Slavkó Medvediev
Slavkó Medvediev

Reputation: 1601

public static Vector2 fromEndAndMidpoint(double xa, double ya, double xmid, double ymid) {
    Vector2 v = new Vector2();
    v.x = 2 * xmid - xa;
    v.y = 2 * ymid - ya;
    return v;
}

Upvotes: 1

Related Questions