我有一个未完成的三角形,我所知道的是:
我正在尝试根据以 A 开头的给定度数在 B 的同一个 Y 轴上放置一个临时点。在下图中,我需要找到绘制
Temp C
的位置,以便使我的AC 的线为指定度数。
我正在尝试用 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 度的值都会出错。
只需使用
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));