找到不等边三角形的第三个点,有 2 个点和一个度数?

问题描述 投票:0回答:1

我有一个未完成的三角形,我所知道的是:

  • A 点坐标
  • B 点坐标
  • AB 的长度

我正在尝试根据以 A 开头的给定度数在 B 的同一个 Y 轴上放置一个临时点。在下图中,我需要找到绘制

Temp C
的位置,以便使我的AC 的线为指定度数。

enter image description here

我正在尝试用 JS 来做到这一点,但我总是遇到先有鸡后有蛋的情况,我认为我需要知道 BC 的距离才能绘制 AC 的线。

const plotTempPoint = (deg, distance) => {
    const points = [p1, p2];
    const radian = deg * (Math.PI/180);
  const a = points[0].getBoundingClientRect();
  const b = points[1].getBoundingClientRect();
  let c = {x: '', y:''};

  const angleAB = Math.atan2(a.y - b.y, a.x - b.x);
  if (deg > 0) {
    c.x = b.x + distance*Math.cos(angleAB + angle)
    c.y = b.y + distance*Math.sin(angleAB + angle)
  }
  
  return c.y;
}

这几乎可行,但它是基于 AB 上的距离,所以当我绘制 C 时,它没有正确的距离。因此任何高于 22 度或低于 -22 度的值都会出错。

javascript svg trigonometry
1个回答
0
投票

只需使用

tan(theta) = opposite/adjacent

let a, b, angle;

calculateTempC = (a, b, angle) => {
  return {
    x: b.x,
    y: b.y + (b.x - a.x) * Math.tan((angle * Math.PI) / 180)
  };
}

a = {x: 0, y: 0};
b = {x: 5, y: 0};
angle = 40;

console.log(calculateTempC(a, b, angle));


a = {x: 3, y: 0};
b = {x: 10, y: 0};
angle = 10;

console.log(calculateTempC(a, b, angle));



a = {x: -1, y: 0};
b = {x: 5, y: 0};
angle = -45;

console.log(calculateTempC(a, b, angle));

© www.soinside.com 2019 - 2024. All rights reserved.