Find new point based on relative angle and distance

Hi how to find the new point based on relative angle and distance in the graph system. My drawing looks like below

Lets say when I change angle between two points (A and c) 126 to 180 the drawing should change to below

I tried to find new point by using below method but its giving wrong values.

let A={x:97,y:445},
    B={"x":99,"y":325},
    C={"x":218,"y":242}; 
function findNewPoint(point, angle, distance) {           
     angle = angle * 0.0174533;
     let x = Math.round((Math.cos(angle) * distance) + point[0]);
     let y = Math.round((Math.sin(angle) * distance) + point[1]);

     return [x, y];
}
let newPoint=findNewPoint([B.x,B.y],180,145);
line(B.x,B.y,newPoint.x,newPoint.y)

When I draw the line by using B and newPoint the drawing looks like below:

It might be easier to use p5.Vector.
Below is my take.
I am sure there are more efficient ways to do this, which I hope someone will comment below.

let center

function setup() {
  createCanvas(400, 400);
  noStroke()

  center = createVector(width / 2, height / 2)
}

function draw() {
  background(220);

  fill(255, 0, 0)
  ellipse(center.x, center.y, 20, 20)

  const orig = createVector(mouseX, mouseY)
  fill(0, 200, 0)
  ellipse(orig.x, orig.y, 10, 10)

  const rotated = getRotatedVector(center, orig, PI / 2) // rotate 90 deg

  fill(0, 0, 200)
  ellipse(rotated.x, rotated.y, 10, 10)
}

function getRotatedVector(center, v, angle) {
  const diff = p5.Vector.sub(v, center)
  const len = diff.mag()
  const origAngle = diff.heading()

  const rotated = p5.Vector.fromAngle(origAngle + angle, len)
  rotated.add(center)

  return rotated
}
1 Like

I think the above code solved ur problem but still if u are trying to use degrees and don’t want to convert the angle from radian to degrees or vice-versa try using angleMode(DEGREES); in the setup function. try this reference link below if u have any confusion
https://p5js.org/reference/#/p5/angleMode