我正在尝试在位图上绘制角度。问题是,一个像素只有8个方向的邻居,所以通过逐个像素绘制,我们只能绘制倾斜0度,45度,90度,135度,180度,225度,270度,315度和360度的线。
那么,我如何在其他倾向上绘制线条 - 例如35或65度?像这里(90x90位图):
是否有任何限制 - 例如最小画布尺寸?我应该能够在30 x 30的图像中做到这一点。
答案 0 :(得分:2)
您只需要设置该行的起点和终点,然后让c#完成剩下的工作(如果您想自己动手,可以搜索Bresenham's algorithm)。 因此,如果要构建具有x度的线,则可以执行以下操作:
从点(0,30)开始。
如果你的角度小于45,你的终点应该是[30,30 *(1-tan(angle))]。
如果没有,它的[30 * tan(90-angle),0]。
代码:
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();
}
}