给定已知长度和夹角的两条线段(AB 和 BC),如果已知 A 和 B 的坐标,如何计算 C 点的坐标?

Given two segments (AB and BC) of known length and an angle between, how to calculate coordinates of C point, if coordinates of A and B are known?

我正在创建一个绘制路径的 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# 方法或一组公式,我将不胜感激。

您可以像以前一样累积角度并计算位置:

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)
}