📜  计算机图形学三角学方法

📅  最后修改于: 2020-12-20 09:37:25             🧑  作者: Mango

三角法:

以下等式用三角函数定义了一个椭圆,如图所示:

x = a * cos(θ)+ h并且
y *正弦(θ)+="" =="" =主轴长度
b="短轴长度
θ=当前角度
(h,k)=椭圆中心其中(x,y)="当前坐标
a">

在这种方法中,θ的值从0变到”三角法”弧度。其余点通过对称找到。

退税:

  • 这是一种低效的方法。
  • 它不是用于生成椭圆的交互式方法。
  • 需要该表才能看到三角值。
  • 需要存储器来存储θ的值。

算法:

步骤1:开始算法

步骤2:声明变量x 1 ,y 1 ,aa 1 ,bb 1 ,aa 2 ,bb 2 ,fx,fy,p1,a1,b1

步骤3:初始化x 1 = 0且y 1 = b / *圆起点的值* /

步骤4:计算aa 1 = a 1 * a 1
计算bb 1 = b 1 * b 1
计算aa 2 = aa 1 * 2
计算bb 2 = bb 1 * 2

步骤5:初始化fx = 0

步骤6:初始化fy = aa_2 * b 1

步骤7:计算p 1的值,如果为整数则四舍五入
p 1 = bb 1 -aa 1 * b 1 + 0.25 * aa 1 /

步骤8:

步骤9: Setpixel(x 1 ,y 1 )

步骤10:计算p1 = bb 1 (x + .5)(x + .5)+ aa(y-1)(y-1)-aa 1 * bb 1

步骤11:

步骤12:停止算法

程序使用三角法绘制一个圆:

#include 
#include 
#include 
#include 
#include 
#include 
# define pi 3.14

class bresen
{
    float a, b, h, k, thetaend,step,x,y;
    int i;
    public:
    void get ();
    void cal ();
};
    void main ()
    {
    bresen b;
    b.get ();
    b.cal ();
    getch ();
   }
    void bresen :: get ()
   {
    cout<<"\n ENTER CENTER OF ELLIPSE";
    cin>>h>>k;
    cout<<"\n ENTER LENGTH OF MAJOR AND MINOR AXIS";
    cin>>a>>b;
    cout<<"\n ENTER STEP SIZE";
    cin>> step;
   }
void bresen ::cal ()
{
    /* request auto detection */
    int gdriver = DETECT,gmode, errorcode;
    int midx, midy, i;
    /* initialize graphics and local variables */
    initgraph (&gdriver, &gmode, " ");
    /* read result of initialization */
    errorcode = graphresult ();
    if (errorcode ! = grOK)    /*an error occurred */
    {
         printf("Graphics error: %s \n", grapherrormsg (errorcode);
        printf ("Press any key to halt:");
        getch ();
        exit (1); /* terminate with an error code */
    }
    theta= 0;
    thetaend=(pi*90)/180;
    whilex (theta

输出:

椭圆轴旋转:

由于椭圆显示四向对称性,因此可以轻松旋转。通过交换a和b(描述长轴和短轴的值)可以找到新的等式。当使用多项式方法时,用于描述椭圆的方程变为

其中(h,k)=椭圆中心
a =="" =主轴长度
b="短轴长度
在三角法中,方程是
x" b="" cos(θ)+="" h和y="a" k<="" p="" sin(θ)+="">

其中(x,y)=当前坐标
a =主轴长度
b="短轴长度
θ=当前角度
(h,k)=椭圆中心

假设您想将椭圆旋转90度以外的角度。椭圆的旋转可以通过旋转x&y轴α度来实现。

x = a cos(0)-b sin(0+∞)+ hy = b(sin 0)+ a cos(0 +∞)+ k


a>


a>


y>