如何获得Line
的起点和终点,其中心位于Point(x,y)
且与x轴的角度为T
?线的长度是2 * L.
答案 0 :(得分:2)
起点是
(x - L·sin(T), y - L·cos(T))
终点是
(x + L·sin(T), y + L·cos(T))
答案 1 :(得分:1)
出于某种不可思议的原因,我发现自己对这个问题非常着迷。但我会根据C#代码提供我的答案。根据Donald Berk的回答(我发现最初发布的错误,请参阅我对他的回答的评论),我创建了以下控制台应用程序。
为了证明这个等式,我绘制了一条带坐标(2,1)(6,5)的已知线。线的角度是45度,或0.7853弧度。该线的总长度为5.6569,中点坐标为(4,3)。当我插入中点坐标,线长和角度的值时,我得到了正确的起点和终点。这就是我发现唐纳德的原始答案不正确的原因 - 可能是复制/粘贴错误。
using System;
namespace LineMuncher
{
class Program
{
static void Main(string[] args)
{
Line myLine = CoordinateGeometry.GetLineFromMidpointCoord(0.7853d, 4.0d, 3.0d, 5.6569d);
Console.WriteLine("Start({0},{1}) : End({2},{3})"
, Math.Round(myLine.StartPoint.X)
, Math.Round(myLine.StartPoint.Y)
, Math.Round(myLine.EndPoint.X)
, Math.Round(myLine.EndPoint.Y));
Console.ReadKey();
}
}
public class CoordinateGeometry
{
public static Line GetLineFromMidpointCoord(
double Angle, double MidPointX, double MidPointY, double Len)
{
Line theLine = new Line();
theLine.StartPoint.X = MidPointX - ((Len / 2.0d) * Math.Sin(Angle));
theLine.StartPoint.Y = MidPointY - ((Len / 2.0d) * Math.Cos(Angle));
theLine.EndPoint.X = MidPointX + ((Len / 2.0d) * Math.Sin(Angle));
theLine.EndPoint.Y = MidPointY + ((Len / 2.0d) * Math.Cos(Angle));
return theLine;
}
}
public class Line
{
public Line()
{
StartPoint = new Coordinate();
EndPoint = new Coordinate();
}
public Coordinate StartPoint { get; set; }
public Coordinate EndPoint { get; set; }
}
public class Coordinate
{
public Coordinate()
{
X = 0.0d;
Y = 0.0d;
}
public double X { get; set; }
public double Y { get; set; }
}
}