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度即可

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值