以任意角度绘制倾斜线

时间:2016-03-12 12:26:50

标签: c# graphics

我正在尝试在位图上绘制角度。问题是,一个像素只有8个方向的邻居,所以通过逐个像素绘制,我们只能绘制倾斜0度,45度,90度,135度,180度,225度,270度,315度和360度的线。

那么,我如何在其他倾向上绘制线条 - 例如35或65度?像这里(90x90位图):

 Look here at Angles Image

是否有任何限制 - 例如最小画布尺寸?我应该能够在30 x 30的图像中做到这一点。

1 个答案:

答案 0 :(得分:2)

您只需要设置该行的起点和终点,然后让c#完成剩下的工作(如果您想自己动手,可以搜索Bresenham's algorithm)。 因此,如果要构建具有x度的线,则可以执行以下操作:

  1. 从点(0,30)开始。

  2. 如果你的角度小于45,你的终点应该是[30,30 *(1-tan(angle))]。

  3. 如果没有,它的[30 * tan(90-angle),0]。

  4. 代码:

    public partial class Form1 : Form
    {
        private int angle;
        public Form1(int angle)
        {
            InitializeComponent();
            this.angle = angle;   
        }
    
        private Point EndPoint(int angle)
        {
            var endPoint = new Point();
            if (angle <= 45)
            {
                endPoint.X = 30;
                endPoint.Y = (int) (30 - 30*Math.Tan(Radian(angle)));
            }
            else
            {
                endPoint.Y = 0;
                endPoint.X = (int) (30*Math.Tan(Radian(90-angle)));
            }
            return endPoint;
        }
    
        private double Radian(int angle) { return (Math.PI/180.0)*angle; }
    
        public void Draw()
        {
            var myPen = new System.Drawing.Pen(System.Drawing.Color.Red);
            var endPoint = EndPoint(angle);
            var formGraphics = this.CreateGraphics();
            formGraphics.DrawLine(myPen, 0, 30, endPoint.X, endPoint.Y);
            myPen.Dispose();
            formGraphics.Dispose();
        }
    
    }