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();
}