Math 使用d3检查三角形高度的逻辑
这表明我在工作 在jsbin中,我试图通过点a(1,1)画一条垂直于点B(6,18)和点C(14,6)的线BC的高度线 我解决这个问题的方法是尝试将两个方程转换成Math 使用d3检查三角形高度的逻辑,math,d3.js,geometry,2d,computational-geometry,Math,D3.js,Geometry,2d,Computational Geometry,这表明我在工作 在jsbin中,我试图通过点a(1,1)画一条垂直于点B(6,18)和点C(14,6)的线BC的高度线 我解决这个问题的方法是尝试将两个方程转换成y=mx+c的形式,然后将它们重新排列为y-mx=c,然后使用矩阵通过联立方程求解它们 我有一个海拔高度函数来完成这项工作: function altitude(vertex, a, b) { var slope = gradient(a, b), x1 = - slope, y1 = 1, c1
y=mx+c
的形式,然后将它们重新排列为y-mx=c
,然后使用矩阵通过联立方程求解它们
我有一个海拔高度函数来完成这项工作:
function altitude(vertex, a, b) {
var slope = gradient(a, b),
x1 = - slope,
y1 = 1,
c1 = getYIntercept(a, slope),
perpendicularSlope = perpendicularGradient(a, b),
x2 = - perpendicularSlope,
y2 = 1,
c2 = getYIntercept(vertex, perpendicularSlope);
var matrix = [
[x1, y1],
[x2, y2]
];
var result = solve(matrix, [c1, c2]);
var g = svg.append('g');
g.append('line')
.style('stroke', 'red')
.attr('class', 'line')
.attr('x1', xScale(vertex.x))
.attr('y1', yScale(vertex.y))
.attr('x2', xScale(result.x))
.attr('y2', yScale(result.y));
}
我首先用这个函数得到BC的梯度
var gradient = function(a, b) {
return (b.y - a.y) / (b.x - a.x);
};
这是-1.5,由此我可以用这个函数得到垂直梯度:
var perpendicularGradient = function (a, b) {
return -1 / gradient(a, b);
};
我把它设为0.66666或(2/3)
我得到的两个方程如下所示:
y + 1.5 = 27
y -0.6666666666666666 = 0.33333333333333337
我在jsbin中有一些函数,它们将使用矩阵和cramer规则同时解决这些问题,主要的是解决:
function solve(matrix, r) {
var determinant = det(matrix);
var x = det([
[r[0], matrix[0][1]],
[r[1], matrix[1][1]]
]) / determinant;
var y = det([
[matrix[0][0], r[0]],
[matrix[1][0], r[1]]
]) / determinant;
return {x: Math.approx(x), y: Math.approx(y)};
}
function det(matrix) {
return (matrix[0][0]*matrix[1][1])-(matrix[0][1]*matrix[1][0]);
}
我得到了截距的坐标,大概是(12.31,8.54)
问题是,它在图表上看起来不正确
我是不是走错了一步?我认为我的计算是对的,但我不排除他们是错的。可能会缩小比例。您希望找到点A到线BC的投影 让我们制作向量
Q=C-B
P=A-B
标准化(单位长度):
uQ=Q/|Q| 所需投影点D为
D=B+uQ*点产品(P,uQ) 比如你的例子A(1,1),B(6,18),C(14,6) Q=(8,-12)
|Q|=Sqrt(8*8+12*12)~14.4
uQ=(0.55,-0.83)
P=(-5,-17)
点积(P,uQ)=0.55*(-5)-(0.83*-17)=11.39
D=(6+0.55*11.39,18-0.83*11.39)=(12.26,8,54) 所以,您的计算给出了正确的结果(虽然这种方法不是很有效),但图片并不精确-X轴和Y轴的不同比例会使角度变形
p.S:第二行
width=660-margin.left-margin.right,
使图片更可靠我没有遇到矢量。在你的照片上,比例有什么不同?在OY轴上,20个单位约为10厘米,在OX轴上约为17厘米。试着在网格纸上画画哈,你是对的,我有不同的比例。非常感谢。使用向量的数学技术是什么?你有链接吗?