首页 > 代码库 > 椭圆伸缩之思考

椭圆伸缩之思考

我们讨论的椭圆缩放基于二维空间,首先给出以下定义及性质:

1 基点:如果选择一个能控制图形比例(缩放)变换的点,使该点再变换后仍保持不变,则称其为基点(不动点)。

2 比例因子:Sx,Sy分别控制x轴和y轴坐标值的缩小和放大,Sx,Sy为大于0的任何数(两者小于零时会发生镜像,不在我们讨论的范围内),Sx,Sy小于1,图形缩小;Sx,Sy大于1,图形放大。

3 椭圆中心及直径:椭圆是有心曲线,它存在这样的点,该点平分通过它的所有弦,把该点称作是椭圆的中心,把通过中心的弦叫做椭圆的直径。

4 椭圆的共轭直径:对于椭圆的任意直径,容易知道平行于该直径的弦的中点组成弦也是椭圆的直径,这两条直径互为对方的共轭直径。

5 椭圆的轴:在众多的共轭直径中有一对是主方向,该方向对应的直径即共轭又垂直,把这两条直径称为椭圆的轴,称较长的轴为长轴较短的轴为短轴。

6 共轭直径仿射不变性:椭圆的共轭直径在经过仿射变换后仍为共轭直径。

在CAD应用软件程序中,会根据椭圆中心点及长短轴对椭圆进行绘制,但是当椭圆发生伸缩变换后长短轴的位置及大小都会发生改变,需要重新确定长短轴,如下图:

技术分享

图中红色部分是一个椭圆及其外切长方形,通过观察也可以发现原来的长轴和短轴在经过拉伸(Sx≠Sy)后已不是新椭圆的长轴和短轴,但是根据性质6可知它们仍为新椭圆的共轭直径,之后我们可以根据罗敏雪的《根据椭圆共轭直径绘制椭圆曲线的算法》,由拉伸后的共轭直径求新椭圆的长短轴。罗的算法及配图如下:

技术分享

(1)给出参数

已知椭圆中心O1(x0,y0),第1条共轭直径的端点为M(xm,ym),第2条共轭直径的端点为N(xn,yn)。

(2)已O1为圆心,以O1n为半径,将N(xn,yn)点顺时针转90度得N1(xn1,yn1)点。

(3)求MN1的中点K(xk,yk)。

(4)求O1K的距离,在直线MN1上取KF=KG=O1K,分别求出FM、GM的距离。

(5)确定椭圆的长半轴大小,短半轴大小,及长短轴方向。

如果fm>gm,

则a=fm,b=gm,

此时,a=fm为长半轴大小,b=gm为短半轴大小,O1F为短轴方向,O1G为长轴方向;

否则a=gm,b=fm,

此时,a=gm为长半轴大小,b=fm为短半轴大小,O1G为的短轴方向,O1F为长轴方向。

参考文献:

罗敏雪:根据椭圆共轭直径绘制椭圆曲线的算法

王穗:圆和椭圆的透视仿射对应

强会英:椭圆拉伸变形长短轴的计算及应用

 

椭圆伸缩之思考