Using two diagonal points to find remaining points of rectangle

I have two Vector3 points which will define the diagonal points of a rectangle in world-space. I can acquire the unknown points of the rectangle simply by combining the x and z values of both A and B

Known diagonal points:
Vector3 a = (4, 1, 16)
Vector3 b = (18, 1, 4)

Remaining points…
Vector3 c = (a.x, 1, b.z)
Vector3 d = (b.x, 1, a.z)

Rather then setting all the points manually I’m curious if there’s a loop formula (given 2 Vector3’s) that can find the remaining points of a rectangle as well as 4 additional points on a higher Y axis to make up a 3d rectangle? Ideally the points will be in consecutive order that way I can linecast between each one

You could use a function like this:

``````    //using System.Collections.Generic;

Vector3 a = new Vector3(4, 1, 16);
Vector3 b = new Vector3(18, 1, 4);

void Start () {
List<Vector3> firstRect = GetRect(a, b); //Your first Rectangle specified
List<Vector3> secondRect = GetRect(a, b, 0.5f); //A second Rectangle 0.5 units above the first
}

public List<Vector3> GetRect(Vector3 a, Vector3 b, float yOffset = 0)
{
return new List<Vector3> {new Vector3(a.x, a.y + yOffset, a.z), new Vector3(b.x, b.y + yOffset, b.z),
new Vector3(a.x, a.y + yOffset, b.z), new Vector3(b.x, a.y + yOffset, a.z)};
}
``````

You could just store the two points in their own variable like this:

``````    Vector3 c = new Vector3 (a.x, 1, b.z);
Vector3 d = new Vector3 (b.x, 1, a.z);
``````

Otherwise I’m not sure how you would do this.