【发布时间】:2023-02-25 02:31:36
【问题描述】:
我正在开发一个应用程序,其中我有一个 Canvas 控件,用户可以添加一条或多条线和/或一个矩形形状并将它们分组。分组后,用户可以使用鼠标事件调整父组的大小。类似于 Microsoft powerpoint 允许用户添加形状并对它们进行分组的方式。
画布内形状的层次结构
- 组
- 角度为 30 的矩形
- 粗细为 10、角度为 45 的线
对于组和子形状我有以下信息: Top_Left Point:形状的顶部,左侧位置,即使旋转形状也将保持不变的参考点
Point_1_Top_Left:形状的顶部、左侧位置,将根据形状的角度变化 Point_2_Top_Right:形状的顶部,右侧位置将根据形状的角度而变化 Point_3_Bottom_Right:底部,形状的右侧位置,将根据形状的角度而变化 Point_4_Bottom_Left:形状的底部、左侧位置,将根据形状的角度变化
宽度:形状的宽度 高度:形状的高度 Shape_Center:形状的中心点(宽/2,高/2)
我正在使用 RotateTransform 来实现 0.5、0.5 的旋转。我正在使用以下逻辑来计算围绕另一个点旋转一个角度的点的位置。
public static PointF RotatePointAroundByAngle(PointF pointToRotate, PointF centerPoint, double angleInDegrees)
{
double angleInRadians = angleInDegrees * (Math.PI / 180);
double cosTheta = Math.Cos(angleInRadians);
double sinTheta = Math.Sin(angleInRadians);
return new PointF
{
X = (float) Math.Round((cosTheta * (pointToRotate.X - centerPoint.X) - sinTheta * (pointToRotate.Y - centerPoint.Y) + centerPoint.X),2),
Y = (float)Math.Round((sinTheta * (pointToRotate.X - centerPoint.X) + cosTheta * (pointToRotate.Y - centerPoint.Y) + centerPoint.Y),2)
};
}
现在,如果通过宽度 Delth_Width 和高度 Delta_Height 调整组矩形的大小,我如何计算子形状的新旋转点及其宽度/高度?
谢谢, 英石
- 我试过:
使用上述函数
RotatePointAroundByAngle更新旋转形状的位置并允许用户对它们进行分组。 现在,在调整父组的大小后,需要知道找到所有新形状点及其新宽度/高度的步骤和计算逻辑。
【问题讨论】:
标签: c# wpf math geometry rotation