如何将旋转应用于由中心和轴长度定义的椭圆?

How to apply rotation to an ellipse defined by center and axis lengths?

这很尴尬,但是。我的椭圆定义为:

我开始绘制长轴平行于 X 轴的椭圆:

theta = 0 : 0.05 : 2*pi;
orientation=orientation*pi/180;
xx = (majorAxis/2) * sin(theta) + centerX;
yy = (minorAxis/2) * cos(theta) + centerY;
%plot(xx,yy)

现在我只需要将这些东西旋转 orientation 度或辐射点。有什么帮助吗?我尝试了很多东西,例如:

出于某种原因,我无法获得想要的结果。当然我需要点围绕中心旋转,而不是原点。

旁注:如果这有任何帮助,我正在尝试使用 Centroid、[=24 绘制由 regionprops 定义的椭圆=]、MinorAxisLengthOrientation 属性。


致@Luis Mendo,这是我得到的:

这是另一个尝试:

对于底部特征,我或多或少得到了 orientation = 8 度,这是完全合理的。但是使用我在下面发布的代码,我得到了一个 -8 椭圆!

       theta = 0 : 0.05 : 2*pi;
       orientation=orientation*pi/180;
       delta_x = (majorAxis/2) * sin(theta);
       delta_y = (minorAxis/2) * cos(theta);
       delta_x_ok = delta_x*cos(orientation) - delta_y*sin(orientation);
       delta_y_ok = delta_x*sin(orientation) + delta_y*cos(orientation);
       plot(delta_x_ok + centerX, delta_y_ok + centerY, 'r', 'LineWidth', 1.3);

orientation 可以是 theta 角度的偏移量。

theta = 0 : 0.05 : 2*pi;
orientation=orientation*pi/180;
xx = (majorAxis/2) * sin(theta + orientation) + centerX;
yy = (minorAxis/2) * cos(theta + orientation) + centerY;
%plot(xx,yy)

更新这只会改变椭圆的起点,没有任何效果。

xx-centerXyy-centerY 可以解释为相对于轴 alignedcentered 的坐标旋转椭圆。要获得相对于实际(非旋转、非居中)轴的坐标,比如 xx2yy2,您只需要应用变换

xx2 = (xx-centerX)*cos(orientation) - (yy-centerY)*sin(orientation) + centerX;
yy2 = (xx-centerX)*sin(orientation) + (yy-centerY)*cos(orientation) + centerY;

然后用

绘制旋转的椭圆
plot(xx2,yy2)

示例:

majorAxis = 2;
minorAxis = 1;
centerX = 10;
centerY = 15;
orientation = -45;

theta = 0 : 0.05 : 2*pi;
orientation=orientation*pi/180;
xx = (majorAxis/2) * sin(theta) + centerX;
yy = (minorAxis/2) * cos(theta) + centerY;

xx2 = (xx-centerX)*cos(orientation) - (yy-centerY)*sin(orientation) + centerX;
yy2 = (xx-centerX)*sin(orientation) + (yy-centerY)*cos(orientation) + centerY;
plot(xx2,yy2)
axis equal
grid

椭圆中的空隙是由于theta步没有划分2*pi而产生的。要更正该问题,请使用例如

theta = linspace(0, 2*pi, 150);

这给出了