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