通过一个点的角度T并延伸一定长度的线的等式

时间:2014-06-06 22:08:06

标签: line point

如何获得Line的起点和终点,其中心位于Point(x,y)且与x轴的角度为T?线的长度是2 * L.

enter image description here

2 个答案:

答案 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; }
    }
}