• 椭圆伸缩之思考


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

    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为长轴方向。

    参考文献:

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

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

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

  • 相关阅读:
    【javaFX学习】(二) 面板手册
    Android开发从系统图库中选择一张图片的方法
    用Android studio进行 OpenCV 开发的第一个项目
    【Android学习入门】Android中activity的启动模式
    Android Studio快捷键【Android学习入门】
    【Android学习入门】Android studio基本设置
    安装Android模拟器Genymotion【Android学习入门】
    Android studio 安装与配置【Android学习入门】
    【知乎】日常生活中有哪些十分钟就能学会并可以终生受用的技能?(一)
    C++学生信息处理
  • 原文地址:https://www.cnblogs.com/zhaoweiwei/p/Ellipse.html
Copyright © 2020-2023  润新知