C# 两条线获取角度,角度原点距离获取另一点
// 获得鼠标点击位置和原点组成的线与原点垂线的角度
private double GetAngel()
{
int X = Convert.ToInt32(numericUpDown1.Value);
int Y = Convert.ToInt32(numericUpDown2.Value);
Point pictureBox1Point = pictureBox1.PointToClient(Control.MousePosition);
Point a1 = new Point(X, Y);
Point a2 = new Point(X, 300);
Point b1 = new Point(X, Y);
Point b2 = new Point(pictureBox1Point.X, pictureBox1Point.Y);
var a = Math.Atan2(a2.Y - a1.Y, a2.X - a1.X);
var b = Math.Atan2(b2.Y - b1.Y, b2.X - b1.X);
double angle = 180 * (b - a) / Math.PI;
return (angle > 0 ? angle : angle + 360);
}
/// <summary>
/// 通过三角函数求终点坐标
/// </summary>
/// <param name="angle">角度</param>
/// <param name="startPoint">起点</param>
/// <param name="distance">距离</param>
/// <returns>终点坐标</returns>
private static double[] getEndPointByTrigonometric(double angle, double[] startPoint, double distance)
{
double[] endPoint = new double[2];
//角度转弧度
double radian = (angle * Math.PI) / 180;
//计算新坐标 r 就是两者的距离
endPoint[0] = startPoint[0] + distance * Math.Cos(radian);
endPoint[1] = startPoint[1] + distance * Math.Sin(radian);
return endPoint;
}
// 根据角度和原点垂线画线的方法
private void SettingOutByAngel(Graphics g, float angel)
{
float X = Convert.ToInt32(numericUpDown1.Value);
float Y = Convert.ToInt32(numericUpDown2.Value);
g.TranslateTransform(X, Y);
g.RotateTransform(angel + 90);
g.DrawLine(new Pen(Color.Red), 0, 0, 300, 0);
g.ResetTransform();
}