Как вписать точки больших двойных значений в нарисованную систему координат? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть система координат (см. Скриншот ниже), и я хочу разместить на ней точки. Однако значения точек больше пикселей панели (например, 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);
}

enter image description here

...