C# 给定已知长度的两段(AB和BC)及其之间的角度,如果A和B的坐标已知,如何计算C点的坐标?

C# 给定已知长度的两段(AB和BC)及其之间的角度,如果A和B的坐标已知,如何计算C点的坐标?,c#,vector,geometry,trigonometry,C#,Vector,Geometry,Trigonometry,我正在创建一个绘制路径的C代码。问题是我没有路径顶点的坐标。相反,我知道每个线段的长度和相邻线段之间的角度 假设路径的第一个点有坐标(0;0),我想从给定的线段长度和角度计算每个顶点来绘制路径。我不擅长三角学,但我希望这是可能的 我尝试在线段集合中循环,以计算每一步的下一个点坐标。因此,在任何步骤中,我都有以下数据: 给定第一段AB的长度为L1,下一段BC的长度为L2,AB段和BC段之间的角度为ABC。点A和点B的坐标是已知的,因为在上一步中进行了计算 如果可能,如何根据给定数据计算点C的坐标

我正在创建一个绘制路径的C代码。问题是我没有路径顶点的坐标。相反,我知道每个线段的长度和相邻线段之间的角度

假设路径的第一个点有坐标(0;0),我想从给定的线段长度和角度计算每个顶点来绘制路径。我不擅长三角学,但我希望这是可能的

我尝试在线段集合中循环,以计算每一步的下一个点坐标。因此,在任何步骤中,我都有以下数据:

给定第一段AB的长度为L1,下一段BC的长度为L2,AB段和BC段之间的角度为ABC。点A和点B的坐标是已知的,因为在上一步中进行了计算

如果可能,如何根据给定数据计算点C的坐标

这是段集合的一个示例:

    public ObservableCollection<SequenceStep> Sequence { 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).
for(变量i=1;i
但计算的坐标仅用于点和轴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)
}
双角度=0.0;
双x=序列[0]。长度;
双y=0.0;
对于(var i=1;i
这是一个数学问题,与编程无关。谢谢您的帮助。问题是如何用C#编程。正如我提到的,我不擅长三角,所以如果我在math.stackexchange.com上问这个问题,我可能会得到一个我不理解的答案。因此,我正在寻求其他C#开发者的帮助,他们从事这类工作,可以分享自己的部分代码或用C#语言给出公式。我投票将这个问题作为离题题来结束,因为这是一个严格意义上的数学问题,而不是编程问题。尝试寻找答案(强调“寻找”…你肯定应该先在那里搜索,然后再发布实际问题)我们的全部职责是保持网站的特定性、主题性和对未来用户的价值。碰巧这更适合数学网站。仅仅因为8年前就有类似问题的答案,并不意味着这对今天的编程网站仍然有意义。如果您想进一步讨论此问题或要求获得资格证书,欢迎您在StackOverflow元讨论网站上提问。谢谢,非常感谢!你给了我的C#问题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)
}