c#畫平行線和垂線的程式碼
阿新 • • 發佈:2018-12-18
參考如下繪製平行線的程式碼
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度即可