Zalgorithm

Drawing a point from the slope of two points in the Cartesian plane

This is not a math tutorial. See Why am I writing about math?

Related to notes / Drawing dotted lines between points with Processing.

Get the rise by subtracting the y value of point “a” from the y value of point “b”. Get the run by subtracting the x value of point “a” from the x value of point “b”. Get the slope by dividing rise/run.

The slope is the ratio of rise over run. If the slope is known, a new y value that falls on the line can be calculated for any run.

size(400, 400);
textSize(8);
background(235);
fill(25);

translate(width/2, height/2);
scale(1, -1);

int x1 = -123;
int y1 = -44;
int x2 = 157;
int y2 = 99;

int rise = y2 - y1;
int run = x2 - x1;
float slope = float(rise)/float(run);

pushMatrix();
scale(1, -1);
text("slope: " + str(slope), -width/2 + 8, -height/2 + 8);
popMatrix();

strokeWeight(8);
stroke(158, 41, 28);
point(x1, y1);

stroke(46, 28, 158);
point(x2, y2);

float xOffset = 111;
float calculatedX = float(x1) + xOffset;
float calculatedY = float(y1) + slope * xOffset;
stroke(50, 168, 82);
point(calculatedX, calculatedY);

// visually confirm
stroke(122);
strokeWeight(1);
line(x1, y1, x2, y2);

A dynamic version

Sets the x and y values of the calculated point with the mouseDragged() event:

int x2 = 0;
int y2 = 0;

void setup() {
  size(400, 400);
  textSize(8);
  background(235);
  fill(25);
}

void draw() {
  translate(width/2, height/2);
  scale(1, -1);

  background(235);

  int x1 = -173;
  int y1 = -184;

  strokeWeight(8);
  stroke(158, 41, 28);
  point(x1, y1);
  stroke(46, 28, 158);
  point(x2, y2);

  int rise = y2 - y1;
  int run = x2 - x1;
  float slope = float(rise)/float(run);

  float xOffset = 100;

  float calculatedX = float(x1) + xOffset;
  float calculatedY = float(y1) + xOffset * slope;

  stroke(50, 168, 82);
  point(calculatedX, calculatedY);

  // confirm
  strokeWeight(1);
  stroke(165);
  line(x1, y1, x2, y2);

  pushMatrix();
  scale(1, -1);
  stroke(125);
  text("slope: " + str(slope), -width/2 + 8, -height/2 + 8);
  popMatrix();
}

void mouseDragged() {
  x2 = mouseX - width/2;
  y2 = -1 * (mouseY - height/2);
}

A limitation of relying on the slope to set the new point

The new point is being calculated from the slope some new run value. For example, if the run is 50, the new x is originalX1 + run, the new y is originalY1 + run * slope. This doesn’t make it possible to accurately do something like always have the new point halfway between the original points. There’s a solution to this problem in notes / Drawing a point from the parametric representation of a line.