首页 > 编程知识 正文

Schmidt正交化,施密特正交化推导过程

时间:2023-05-05 13:48:52 阅读:41147 作者:4807

九交模型用于表示二维点线面几何对象的关系,在网上有很多介绍。 本文结合geos的实现和工作中遇到的问题探讨九交模型。

(一)九交模型定义

【英文名】dimensionallyextendednine-intersection model (de-9im ) )。

九交矩阵被用于表示图形之间的关系。 其纵横分别为两对象AB的内部interior、边界boundary、外部exterior的交叉的维数,参照下表。 维的可能值表示0-为1点,1-表示线,2-表示面,F-表示-1,即不相交。 请参考下表。

双边界存储器(I ) a,I(b ) dim (I ) a,b ) b ) ) dim (I (a,e ) b ) )边界存储器(I )

(二) geos九交模式方面

调试语法分析程序时,用geos实现的九交模型去除重复面总是存在各种问题,怀疑有geos用的问题,马上列出并测试画画的各种情况。 由于到目前为止对九交模型还不十分了解,我们当然希望第一个多边形及其自身与其他七个多边形之间的八种关系应该是不同的九交矩阵,如下图所示。 显示了geos的结果。

很明显,虚线框内2和7相对于多边形1的关系是相同的九交叉矩阵。 即,b (现在的比较图形,plgId的右Id )在a )第1个图形,plgId的左Id ) "内部"时,不能区别内涵和边的接触,两者可以区别为点的接触。 )常见文字的“内部”、“外部”一词给人一种模糊的感觉,不足以区分点、线、交错面。

另一方面,在b在a的外部的情况下,由plgId中的13、14、15的mx可知,第5个元素(中心元素)分别为f、0、1,能够很好地区分差异。

请考虑另一个例子。 图中4、5号面与1号面相交的边的端点是1号面上也存在的端点,3、6号面与1号面相交的边的端点不是1号面的端点,而是在绘图时通过捕捉与1号面的边的交点而产生的。 理论上4、5的九交矩阵一致,3、6的也一致。 实际上,表中4、5一致,2、6一致。 说明3,6图测试生成的矩阵具有随机性。 从测试后求大面和交叉求差的结果来看,intersectedNum字段为从1号面减去交叉区域的ring个数(-后为外轮的顶点)。 3、4、5号面拉开差就是一个圈,2、6号面拉开差就是两个圈。 如果6号应该是2个的话,3号面为什么不是2个? 是精度的错吗?

geos : geom : precision model * pm=new geos 33603360 geom :3360 precision model (1000,0 );

geos : geom : geometryfactorygeomfact (pm;

下表是根据pm到0.001的精度得出的结果。 实测0.01的精度下,结果也相同。 返回结构面过程重复过程,由于以前中断了该步骤,因此不存在3和6图形,但在比较涉及的两面为包含关系时,只能判断大面和交叉的环数是否包含,不存在内接。

(三) geos区域比较——差异) ) )。

下图显示了在表中添加intersectN列,将plgId的两个多边形求出a-difference(b )后,多边形的内外环总数。 多边形7和多边形10在视觉上相同,但intersectN的值不同。 这是因为,多边形7和1的共同部分边的两个节点m、n在多边形1中没有这两个节点,而是捕捉最近的点来描绘的,多边形10和1的共同部分边的两个节点m、n也是多边形1的节点。 我个人认为,geos等问题处理的理想状态是,与6和9相比,对于7和8的多边形,与1相比,difference之后都应该是一个环。

最后,对于containscoversoverlapstouchescrossesdisjoint的区别,本人的英语so so必须从图、表结合才能正确理解。 以下矩阵格式来源于geos头文件注释,提前研究其漏洞需要制图考证。

isequals(dima,DimB ) ——T*F**FFF*。

isContains——完全包含,点、边相接或相等,九交矩阵为T*****FF*;

包括isWithin——,与contains相反,T*F**F***是contains矩阵的倒置;

isCovers——包含contains,九交矩阵为T*****FF*、*T****FF*、**t***ff*、****t**ff*;

isCoveredBy——其矩阵是covers的倒置;

ISOverlaps(dima,DimB ) ——面重叠,面(点为T*T***T**,线为1*T***T**;

istouches(DIMA,DimB ) ——边或点外接触,九交矩阵可以是FT*******、f**t***、f**t***,第一个表示接触只能是外部。

iscrosses(dima,DimB ) ——非面间关系,虚线、点面、线面为T*T******,线为0********;

isDisjoint——外距离、FF*FF****只有图中的1和3的关系是外距离,只有在外距离的情况下,a-distance(b )返回0以外的值。

除isintersects——disjoint之外的所有内容都返回true;

【参考】

3359 blog.csdn.net/summer _ dew/article/details/8223423

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。