c#画平行线和垂线的代码

参考如下绘制平行线的代码
private Point downPoint = Point.Empty; // 鼠标按下的坐标
private Point movePoint = Point.Empty; // 鼠标移动的坐标
private double lineSpace = 12.0f; // 线条之间的距离
private Point offsetPointA = Point.Empty; // 偏移坐标A
private Point offsetPointB = Point.Empty; // 偏移坐标B
private double PointToAngle(Point AOrigin, Point APoint)
{
    if (APoint.X == AOrigin.X)
        if (APoint.Y > AOrigin.Y)
            return Math.PI * 0.5f;
        else return Math.PI * 1.5f;
    else if (APoint.Y == AOrigin.Y)
        if (APoint.X > AOrigin.X)
            return 0;
        else return Math.PI;
    else
    {
        double Result = Math.Atan((double)(AOrigin.Y - APoint.Y) /
            (AOrigin.X - APoint.X));
        if ((APoint.X < AOrigin.X) && (APoint.Y > AOrigin.Y))
            return Result + Math.PI;
        else if ((APoint.X < AOrigin.X) && (APoint.Y < AOrigin.Y))
            return Result + Math.PI;
        else if ((APoint.X > AOrigin.X) && (APoint.Y < AOrigin.Y))
            return Result + 2 * Math.PI;
        else return Result;
    }
} /* PointToAngle */
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    downPoint = e.Location;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    
    if (downPoint != Point.Empty)
    {
        Graphics vGraphics = CreateGraphics();
        if (movePoint != Point.Empty)
        {
            vGraphics.DrawLine(new Pen(BackColor), offsetPointA,
                new Point(movePoint.X + offsetPointA.X - downPoint.X,
                movePoint.Y + offsetPointA.Y - downPoint.Y));
            vGraphics.DrawLine(new Pen(BackColor), offsetPointB,
                new Point(movePoint.X + offsetPointB.X - downPoint.X,
                movePoint.Y + offsetPointB.Y - downPoint.Y));
            vGraphics.DrawLine(new Pen(BackColor), downPoint, movePoint);
        }
        movePoint = e.Location;
        double angle = PointToAngle(downPoint, movePoint);
        offsetPointA.X = (int)(Math.Cos(angle + 0.5f * Math.PI) * lineSpace + 
            downPoint.X);
        offsetPointA.Y = (int)(Math.Sin(angle + 0.5f * Math.PI) * lineSpace + 
            downPoint.Y);
        offsetPointB.X = (int)(Math.Cos(angle - 0.5f * Math.PI) * lineSpace + 
            downPoint.X);
        offsetPointB.Y = (int)(Math.Sin(angle - 0.5f * Math.PI) * lineSpace + 
            downPoint.Y);
        
        vGraphics.DrawLine(Pens.Red, offsetPointA, 
            new Point(movePoint.X + offsetPointA.X - downPoint.X,
            movePoint.Y + offsetPointA.Y - downPoint.Y));
        vGraphics.DrawLine(Pens.Red, offsetPointB,
            new Point(movePoint.X + offsetPointB.X - downPoint.X,
            movePoint.Y + offsetPointB.Y - downPoint.Y));        vGraphics.DrawLine(Pens.Blue, downPoint, movePoint);
        vGraphics.Dispose();
    }
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    downPoint = Point.Empty;
}
垂线的代码只要参照如上代码将角度旋转90度即可

猜你喜欢

转载自blog.csdn.net/lilin8905/article/details/54881214