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

检查一个点是否在旋转的矩形内(C#)分享

时间:2023-04-10 21:00:32 C#

Checkifapointisinarotatedrectangle(C#)它们也可以以一定角度绘制(旋转)。我知道每个矩形的起点(左上角)、它们的大小(宽度+高度)和角度。由于旋转,起点不一定是左上角,但这并不重要。然后当我点击图片框时,我需要检查我点击的是哪个矩形(如果有的话)。所以我需要一些方法来检查一个点是否在矩形中,但我还需要考虑每个矩形的旋转。有谁知道在C#中执行此操作的方法吗?是否可以将应用于矩形的相同旋转应用到反向点?比如矩形A从原点(左上角)顺时针旋转45度,那么你将点B绕同一个原点顺时针旋转45度COUNTER,然后检查它是否属于矩形A预旋转你可以留下第二个未显示的图像,其中绘制了矩形的副本,每个矩形都具有独特的颜色。当用户点击图片框时,在第二张图片中找到对应像素点的颜色,从而识别出点击的矩形。我知道这已经得到回答,但我不得不做类似的事情。我为System.Windows.Point类创建了一个扩展方法,它有助于执行Neil建议的操作:publicstaticdoubleGetAngle(thisPointpt){returnMath.Atan2(pt.X,-pt.Y)*180/Math.PI;}publicstaticPointSetAngle(thisPointpt,doubleangle){varrads=angle*(Math.PI/180);vardist=Math.Sqrt(pt.X*pt.X+pt.Y*pt.Y);pt.X=Math.Sin(rads)*dist;pt.Y=-(Math.Cos(rads)*dist);返回点;这将允许我使用0,0角附近的点。因此,如果您知道要测试的矩形的中心,则可以将该点偏移该值的负数(例如:pt.X-=32;pt.Y-=32),然后应用矩形的负旋转(Neil建议:pt.SetAngle(-45);)...现在,如果该点在64,64以内,您就知道您击中了矩形。更具体地说,我正在检查旋转图像的像素以确保我击中了特定颜色的像素。编辑:回顾过去,我正在使用MonoGame,而OP正在使用Windows窗体。以下是MonoGame。我已经弄乱了一段时间,找到了几个答案,但没有一个真正起作用。这是一个C#函数,它完全按照OP的描述执行操作,如果没有OP,其他人会像我一样用谷歌搜索它。想出这个问题很头疼。很多典型的猜测。boolPointIsInRotatedRectangle(Vector2P,Rectanglerect,floatrotation){矩阵rotMat=Matrix.CreateRotationZ(-rotation);Vector2Localpoint=P-(rect.Location).ToVector2();Localpoint=Vector2.Transform(Localpoint,rotMat);Localpoint+=(rect.Location).ToVector2();如果(rect.Contains(Localpoint)){返回true;}返回假;这里只有一行代码。使用起来可能会更快。boolPointIsInRotatedRectangle(Vector2P,Rectanglerect,floatrotation){if(rect.Contains(Vector2.Transform(P-(rect.Location).ToVector2(),Matrix.CreateRotationZ(-rotation))+(rect.Location).ToVector2())){返回真;}返回假;矩形是否允许重叠?如果是这样,你想要所有的矩形在一个点上,还是只在顶层?如果您知道矩形角的坐标,这里有一个快速、优雅的解决方案,仅涉及几个点和标量积:https://math.stackexchange.com/a/190373/178768以上是关于C#学习教程的全部内容:Checkpoints是旋转矩形(C#)里分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——本文收集自网络,不代表个人观点位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: