已知两点与长度,如何求解三角形的高及顶端坐标?
求解三角形高顶端坐标问题
我正在尝试求解三角形的高(示意图如下):
我已获取startPoint、endPoint和Length,代码如下:
Point startPoint = Start.GetPoint(); Point endPoint = End.GetPoint(); double Length = panel.W + startPoint.X;
我已通过两点算出角度,代码如下:
double diffX = endPoint.X - startPoint.X; double diffY = endPoint.Y - startPoint.Y; double angleRad = Math.Atan2(diffY, diffX); double angleDeg = angleRad * (180.0 / Math.PI);
我尝试过用Math.Cos、Math.Sin和Math.Tan相关公式,但均未成功。请问如何求解高?仅靠现有条件能否求出高顶端的(X,Y)坐标?
仅靠现有条件可以求出高顶端坐标,给你两种可行的实现方式:
方法一:利用向量垂直特性计算
- 先计算底边的方向向量和长度:
double dx = endPoint.X - startPoint.X; double dy = endPoint.Y - startPoint.Y; double baseLength = Math.Sqrt(dx * dx + dy * dy);
- 生成垂直于底边的单位向量(有两个方向,若结果方向不对,把
-dy换成dy、dx换成-dx即可):
double perpUnitX = -dy / baseLength; double perpUnitY = dx / baseLength;
- 计算高顶端坐标(假设从
startPoint作高,若从endPoint出发则替换成endPoint的坐标):
double topX = startPoint.X + perpUnitX * Length; double topY = startPoint.Y + perpUnitY * Length;
方法二:利用角度偏移计算
基于你已经算出的底边与X轴夹角,将角度偏移90度(垂直方向),再用三角函数计算坐标:
// 角度加90度得到垂直方向的弧度,方向不对就改成减90度(angleRad - Math.PI/2) double perpAngleRad = angleRad + Math.PI / 2; double topX = startPoint.X + Math.Cos(perpAngleRad) * Length; double topY = startPoint.Y + Math.Sin(perpAngleRad) * Length;
两种方法本质一致,选你习惯的即可。需要注意:如果Length不是高的实际长度(你代码里Length = panel.W + startPoint.X逻辑较特殊),要先确保Length是你需要的高的长度值。
内容的提问来源于stack exchange,提问作者Contagrrla
相关产品推荐
相关产品推荐

