我正在创建一个绘制路径的C#代码。问题是我没有路径顶点的坐标。相反,我知道每个线段的长度以及相邻线段之间的角度。
假设路径的第一点具有坐标(0; 0),我想绘制一条路径,该路径根据给定的线段长度和角度计算每个顶点。我的三角学不好,但我希望有可能。
我尝试遍历线段的集合以计算每一步的下一个点坐标。因此,在任何一步,我都有以下数据:
给出长度为L1的第一段AB,长度为L2的下一段BC,段AB和BC之间的角度ABC。已知点A和B的坐标,因为它们在上一步中进行了评估。
如果可能,如何根据给定数据计算点C的坐标?
这是细分集合的示例:
public ObservableCollection<SequenceStep> Sequence { get; set; }
其中:
public class SequenceStep
{
public double Length { get; set; }
public double Angle { get; set; }
}
我循环执行以下顺序:
for (var i = 1; i < Sequence.Count; i++)
{
var sequenceStep = Sequence[i];
var angleInRadians = Math.PI * sequenceStep.Angle / 180.0;
// Calculate next point coordinates from (0,0)
var x = Math.Cos(angleInRadians) * sequenceStep.Length;
var y = Math.Sin(angleInRadians) * sequenceStep.Length;
}
// I start from segment[1], because segment[0] has points (0,0) and (segment[0].Length, 0).
但是评估的坐标仅适用于点和X轴之间的角度。我想我需要旋转那些x,y坐标,以与BC线段的方向相对应。但是我总是得到错误的坐标。
我将不胜感激,希望提供任何帮助,C#方法或一组公式。
答案 0 :(得分:1)
您可以像已经进行的那样累积角度并计算位置:
double angle = 0.0;
double x = Seqence[0].Length;
double y = 0.0;
for (var i = 1; i < Sequence.Count; i++)
{
var sequenceStep = Sequence[i];
var angleInRadians = Math.PI * sequenceStep.Angle / 180.0;
// update the current angle
angle += Math.PI - angleInRadians;
// ^-- might also be -= depending on your definition of orientation
// Calculate next point coordinates
x += Math.Cos(angle) * sequenceStep.Length;
y += Math.Sin(angle) * sequenceStep.Length;
// Now use (x, y)
}