我正在尝试使用Surfaceview和canvas drawing在Android中创建自定义组件。这些组件可以通过触摸来调整大小和旋转。考虑创建一个图像视图,它的上、右、下和左边缘可通过触摸和拖动所需的边缘来缩放。我使用< code>RectF来保持组件的边界,对于旋转,我使用< code>canvas.rotate(angle,bounds.centerX()、bounds.centerY())方法。问题是,当调整顶部边缘的大小时,左边、右边和底部边缘应该是固定的,如果旋转角度不是0度,我就无法修复它。我需要一个数学解来找出旋转矩形相对于实际矩形边界的x,y坐标。
我可以借助一些图像来解释它。下图显示了两个矩形,它们的边界也是已知的,并以各自的颜色显示。将绿色矩形视为组件的初始边界,即。旋转-45度,中心为(10,10)。现在要重新调整矩形的顶部边缘的大小,并显示在下一个图2中。
从图2中可以看出,Y位置从6减少到4。旋转的矩形也以粉红色显示。请记住,当组件处于旋转角度-45度时,我正在调整大小,因此在拖动顶部边缘时,矩形的左、右和底部位置不应更改。因此,图2的粉色矩形的左、右和底部坐标应与图1的绿色矩形相同。获得的矩形与预期矩形的比较如图3所示。
在图3中,黄色矩形是预期/要求的输出。与绿色旋转矩形相比,所获得的矩形粉红色向上移动,并且这取决于旋转角度而变化。
我如何计算黄色矩形的边界/中心?以便我可以正确地调整组件的大小?让我知道有没有可以应用的数学?
所需的点/坐标在图3中标记为红色圆圈。
这个答案中的所有颜色都指你的图3。
如果我正确地理解了你的问题,你就知道如何计算粉红色矩形和绿色矩形的所有细节。因此,只需取粉红色矩形的一角与绿色矩形的相应角之间的差异。将该差值(双元素向量,即分别x和y差)添加到粉红色矩形的中心将为您提供黄色三角形的所需中心。
如果还需要计算粉红色矩形的尺寸,则可能需要在未旋转的坐标系中执行此操作。将绿色矩形与要向其扩展矩形的点的坐标一起,然后向后旋转 45°。然后,您可以将矩形的高度扩展到所需的值,这将为您提供蓝色矩形,然后通过旋转粉红色矩形。
关键是:“如果旋转角度不是0度,我无法修复它。”
假设您的矩形旋转10度。
1)将鼠标坐标围绕屏幕上的某个点旋转-10度
2) 将矩形的中心旋转-10度
...现在,您将问题简化为一个 0 度的矩形。矩形移动了,是的,鼠标移动了,但它们是相对于彼此的,因为它们应该是这样的。
3)现在做矩形操作。矩形中心将会移动。
4) 将新矩形中心旋转10度
这样你就不用去想它,你总是在不旋转的坐标下工作。
点在[x, y]
旋转角度a
将结束于[x*cos(a)-y*sin(a), x*sin(a)y*cos(a)]
如何获得旋转矩形的角坐标(以矩形为中心)? 我已经尝试了以下链接中的所有解决方案,但似乎没有任何运气。 将一个点绕另一个点旋转(2D) 找到给定中心点和旋转的旋转矩形的角 https://game dev . stack exchange . com/questions/86755/how-to-calculate-corner-positions-marks-of-a-rotated-tilte
我刚开始使用JavaFX,有一个问题。在我的项目中,我想使用旋转矩形。但矩形只围绕其中心旋转,我希望它围绕其左上角旋转。 就像这张照片(从这里开始): 下面是我的项目中的一些代码: 在这种情况下,如果按下箭头键,矩形会旋转。
正如我在标题中指出的,我已经开始开发一个简单的应用程序,它包含在主框架窗口中,一个双缓冲面板。在这个面板中可以绘制一些图形,让我们把这个面板看作是一个简单的视窗,用来显示在里面绘制的元素。 这里添加了两个功能,平移和缩放可以缩放变换,并使用MouseDown和Move事件上更新的增量在paint事件内平移变换,OnMouseWheel用于更新缩放变换。 当缩放大于1(比例100%)时,尝试添加支持
问题内容: 我到处搜索,但找不到答案。 如何在Java中旋转矩形? 这是我的一些代码: 我尝试了g2d.rotate(100D); 但它没有用。提前致谢。 这是我编辑的代码: 问题答案: 对于图像,必须将Graphics2D的drawImage方法与相对的AffineTransform一起使用。 对于形状,您可以旋转Graphics2D本身: 顺便说一句,您应该重写paintComponent方法
问题内容: 我需要创建围绕其中心旋转的矩形(因此它们不必平行于坐标系的轴)。因此,基本上每个矩形都可以由 center-X , center-Y , width , height 和 angle定义 。然后,我要做的是对这些矩形中是否包含某些点进行计算(因此不会涉及任何绘图)。我想我不能使用该类,因为这些矩形将始终与坐标系的x和y轴平行。是通过编写自己的矩形类来获得此功能的唯一方法,还是可以使用任
在上面的图片中,我展示了两个矩形 矩形1,其x可以从-900到13700不等,Y可以从-600到6458 矩形2,其坐标X可以从0到3000变化,而y可以从0到2000变化 同样:矩形2的起点位于左上角位置(0,0),而矩形1的起点位于左上角位置(宽度/2,高度/2)。 我需要做的是:使用缩放或平移将矩形1的点转换为矩形2的点。 那么,为了将矩形1的坐标转换为矩形2的坐标,< code>x和< c