给定已知长度和夹角的两条线段(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)
}
我正在创建一个绘制路径的 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)
}