当前位置: 首页 > 编程语言 > C#

如何获取重叠的矩形坐标分享

时间:2023-04-10 22:30:44 C#

如何获取重叠的矩形坐标假设我有以下重叠的矩形(“a”和“b”):如何计算内部矩形区域(“c”)的想法,但我如何获得它的实际/左/下/右坐标?调用矩形。相交。可以按照下面的逻辑找到两个矩形重叠区域的X坐标。要找到Y坐标,请将四个假设中的最后一个以及所有三个假设中的X替换为Y。假设:案例1-无重叠:+--------+|A|||+----+|||乙|||+----+||+--------+AxminAxmaxBxminBxmax?无重叠。情况2-一些重叠:+--------+|A||+--+-+||乙|||+--+-+||+--------+AxminBxminAxmaxBxmax?重叠X坐标:Bxmin–Axmax情况3–完全重叠:+-------+|A||+----+|||乙|||+----+|||+--------+AxminBxminBxmaxAxmax?重叠的X坐标:Bxmin–BxmaxPS:您实际上可以进一步简化此算法。重叠X坐标始终为:max(Axmin,Bxmin)-min(Axmax,Bxmax)除非第二个值小于第一个;这意味着没有重叠。staticinternalRectangleintersect(Rectanglelhs,Rectanglerhs){尺寸lhsLeft=lhs.Location.X;维度rhsLeft=rhs.Location.X;尺寸lhsTop=lhs.Location.Y;维度rhsTop=rhs.Location.Y;尺寸lhsRight=lhs.Right;维度rhsRight=rhs.Right;尺寸lhsBottom=lhs.Bottom;尺寸rhsBottom=rhs.Bottom;维度左=Dimension.max(lhsLeft,rhsLeft);维度顶部=Dimension.max(lhsTop,rhsTop);维权=Dimension.min(lhsRight,rhsRight);维度底部=Dimension.min(lhsBottom,rhsBottom);点位置=新点(左,上);尺寸宽度=(右>左)?(右-左):新维度(0);尺寸高度=(底部>顶部)?(底部-顶部):新维度(0);返回新矩形(位置,新尺寸(宽度,高度));}假设:矩形R1的点:R1.A(x,y),R1.B(x,y),R1.C(x,y),R1.D(x,y)矩形R2的点:R2。A(x,y),R2.B(x,y),R2.C(x,y),R2.D(x,y)重叠矩形RO:RO.A(x,y),RO.B(x,y),RO.C(x,y),RO.D(x,y)标准笛卡尔坐标(正为右上)。重叠矩形RO使用C#计算如下:RO.Ax=Math.Min(R1.Ax,R2.Ax);RO.Ay=Math.Max(R1.Ay,R2.Ay);RO.Cx=Math.Max(R1.Cx,R2.Cx);RO.Cy=Math.Min(R1.Cy,R2.Cy);RO.B(x,y)andRO.D(x,y)=....innerrectangleRI:在上述解决方案中交换最小值和最大值以重叠RO中的矩形我为我的项目使用了一个抽象验证器并检查一些布局控件是否重叠我在布局图中创建矩形:以上是C#学习教程:如何获取重叠矩形坐标的所有内容分享,如果对你有用又需要了解更多C#学习教程,我希望大家多多关注——RuleFor(p=>DoControlsIntersect(p.PageControls.Select(x=>newRectangle(x.Row,x.Column,x.Width,x.Height)).ToList()))。等于(假).WithMessage(OverlappingFields);privateboolDoControlsIntersect(Listrectangles){returnrectangles.Any(rect=>rectangles.Where(r=>!r.Equals(rect)).Any(r=>r.IntersectsWith(rect)));}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: