У меня есть система координат (см. Скриншот ниже), и я хочу разместить на ней точки. Однако значения точек больше пикселей панели (например, x = 4415615.076; y = 113097.900). Я не могу понять, как адаптировать рисование линий к этим огромным числам и как вписать точки в эту систему координат. Пожалуйста, предложите любое решение.
private void CoordinateSystemPaint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
DrawAxes(g);
}
private void DrawAxes(Graphics g)
{
var m0 = Matrix3x2.CreateTranslation(coordinateSystemPanel.Width / 2, coordinateSystemPanel.Height / 2);
g.Transform = Matrix3x2ToMatrix(m0);
g.DrawLine(Pens.LightBlue, -coordinateSystemPanel.Width / 2, 0, coordinateSystemPanel.Width / 2, 0);
g.DrawLine(Pens.LightBlue, 0, -coordinateSystemPanel.Height / 2, 0, coordinateSystemPanel.Height / 2);
g.DrawString("X", this.Font, Brushes.LightBlue, coordinateSystemPanel.Width / 2 - 20, -20);
g.DrawString("Y", this.Font, Brushes.LightBlue, 5, -coordinateSystemPanel.Height / 2 + 5);
int tick = 50;
StringFormat sf = new StringFormat
{
Alignment = StringAlignment.Far
};
for (int i = -200; i <= 200; i += tick)
{
g.DrawLine(Pens.LightBlue, i, -3, i, 3);
g.DrawLine(Pens.LightBlue, -3, i, 3, i);
SizeF sizeXTick = g.MeasureString(i.ToString(), this.Font);
if(i!=0)
{
g.DrawString(i.ToString(), this.Font, Brushes.LightBlue, i + sizeXTick.Width / 2, 4f, sf);
g.DrawString((-i).ToString(), this.Font, Brushes.LightBlue, -3f, i - sizeXTick.Height / 2, sf);
} else
{
g.DrawString("0", this.Font, Brushes.LightBlue, new PointF(i - sizeXTick.Width / 3, 4f), sf);
}
}
}
private Matrix Matrix3x2ToMatrix(Matrix3x2 m)
{
return new Matrix(m.M11, m.M12, m.M21, m.M22, m.M31, m.M32);
}