首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetTopologySuite :旋转一个LineSegment

NetTopologySuite :旋转一个LineSegment
EN

Stack Overflow用户
提问于 2022-11-22 05:44:05
回答 1查看 21关注 0票数 0

在NetTopologySuite中,如何旋转LineSegment?

我有一个叫LineRing的outerBoundary。由于找不到一个直接的方法来提取这个LineRing的各个片段,所以我创建了一个扩展方法,如下所示;

`

代码语言:javascript
复制
public static List<LineSegment> GetSegments(this LinearRing lineRing)
{
    List<LineSegment> segments = new List<LineSegment>();
    Coordinate[] coordinates = lineRing.Coordinates;
    for (int i = 0; i < coordinates.Length; i++)
    {
        segments.Add(new LineSegment(coordinates[i], coordinates[(i + 1 )% coordinates.Length]));
    }
    return segments;
}

`

因此,我在GetSegments上调用outerBoundary方法,它将各个边的列表作为LineSegments的列表返回。现在,我想用一个角度旋转每一个片段。如果GetSegments返回了一个LineStrings列表,我就可以用旋转的方式对AffineTransformation实例进行微格化,并将其应用于这些片段中的每一个。但是我觉得有一个LineSegment列表是直觉的,因为每个边都只有两个端点,而LineString允许有两个以上的顶点。现在,如何对LineSegments进行同样的处理?由于LineSegment没有继承几何基类,所以我理解AffineTransformation不能应用于LineSegments。有人能帮忙吗?

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-22 14:50:06

我会使用一个小的三角函数,在每个段中按原点(在这里是中点)移动P0和P1。

使用上面的代码,循环每个段

代码语言:javascript
复制
foreach (LineSegment segment in segments)
        Rotate(segments, seg.MidPoint, rotation);

以及要旋转的代码:

代码语言:javascript
复制
public void Rotate(LineSegment segment, Coordinate origin, double radAngle)
{
    double x = origin.X + (Math.Cos(radAngle) * (segment.P0.X - origin.X) - Math.Sin(radAngle) * (segment.P0.Y - origin.Y));
    double y = origin.Y + (Math.Sin(radAngle) * (segment.P0.X - origin.X) + Math.Cos(radAngle) * (segment.P0.Y - origin.Y));
    segment.P0.X = x;
    segment.P0.Y = y;

    x = origin.X + (Math.Cos(radAngle) * (segment.P1.X - origin.X) - Math.Sin(radAngle) * (segment.P1.Y - origin.Y));
    y = origin.Y + (Math.Sin(radAngle) * (segment.P1.X - origin.X) + Math.Cos(radAngle) * (segment.P1.Y - origin.Y));
    segment.P1.X = x;
    segment.P1.Y = y;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74527981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档