微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 System.Drawing.Graphics

如何解决使用 System.Drawing.Graphics

我有一组地理坐标作为纬度/经度对,我希望将其投影到 2D 表面上。一些坐标由形成形状/轮廓/多边形的线连接。

我了解如何使用墨卡托等众多可用地图投影中的一种来投影单个点,然后使用 Graphics.DrawArc 绘制它们,但是我该如何投影它们之间的连接线?我不能只是投影一条线的两个定义坐标并绘制它 Graphics.DrawLine 因为该线上的每个点也必须被投影,对吗?我对这些事情不太了解,所以我希望你明白我的意思。

是否可以仅使用 System.Drawing.Graphics 类提供的方法来完成我想要做的事情?我可以用投影矩阵来做到这一点吗?如果有人能解释一下我将如何做这件事,我将不胜感激。谢谢。

解决方法

如果您只是画线,最简单的方法可能是将线细分为短线段,投影每个线段点并在它们之间绘制直线。这可能不是最高效或最准确的方法。但它应该很容易实现。

例如:

    public static void DrawSubdivided(this Graphics g,Pen pen,Vector2 p1,Vector2 p2,float subdivisionLength)
    {
        var d = p2 - p1;
        var length = d.Length();
        // Add check for zero-length lines
        var dn = d / length;

        var points = new List<Vector2>();
        for (float l = 0; l < length; l += subdivisionLength)
        {
            points.Add( p1 + dn * l);
        }
        points.Add(p2);

        // apply transformation to the points

        g.DrawLines(pen,points.Select(p => new PointF(p.X,p.Y)).ToArray());
    }

这使用 System.Numerics.Vector2,因为它定义了合理的算术运算,与 PointF 不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。