我正在尝试绘制一个有4个角的形状。角部细节以X和Y坐标给出(如下图所示)。我尝试了这个链接给出的方法: Drawing Colors in a picturebox?。但问题是它只适用于矩形。
任何人都可以提出一些建议。我基本上需要它来生成汽车的扫掠路径(驾驶时乘车的区域)。所以,我在X和Y中得到了汽车的中心,在度数上得到了方向。从那里我确定了X和Y空间中汽车的角点。现在我需要展示它可视化它。请帮忙。
答案 0 :(得分:2)
您可以在表单/控件的Graphics.DrawPolygon
方法中使用Graphics.FillPolygon
(或OnDraw
)方法,如下所示:
protected override void OnPaint(PaintEventArgs e)
{
// If there is an image and it has a location,
// paint it when the Form is repainted.
base.OnPaint(e);
PointF[] rotatedVertices = // Your rotated rectangle vertices
e.Graphics.DrawPolygon(yourPen, rotatedVertices);
// OR
e.Graphics.FillPolygon(new SolidBrush(Color.Red), rotatedVertices);
}
答案 1 :(得分:1)
由于你知道旋转度,你可以使用Graphics.RotateTransform
。这样你就不需要自己计算角落(猜测这个实现更快)。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.RotateTransform(45 /* your degrees here */);
e.Graphics.FillRectangle(Brushes.Red, 10, 10, 200, 100);
}
请注意,它会围绕(0;0)
旋转,因此您可能需要翻译它(使用Graphics.TranslateTransform
)。
答案 2 :(得分:1)
您可以使用Rectangle
类和Matrix
类创建一个矩形,然后按照您的方向旋转它,如下所示:
Graphics g = new Graphics()
Rectangle car = new Rectangle(200, 200, 100, 50)
Matrix m = new Matrix()
m.RotateAt(orientation, new PointF(car.Left + (car.Width / 2), car.Top + (car.Height / 2)));
g.Transform = m
g.FillRectangle(Pens.Red, car)