BRESEHAM Elliptic Painting Algorithm evolved out!

xiaoxiao2021-03-06  26

The main idea of ​​this program is from the BRESEHAM algorithm, the evolutionary thing is to increase the rotation! The algorithm description is not written, and it is tired to beat!

List the program!

The MFC code is as follows:

// BREELLIPSE

// (XC, YC) ---------- Elliptic Center

// Fla, FLB ---------- The radius of the horizontal axis and the vertical axis

// Double ---------- The angle of rotation

Void Breellipse (CDC * PDC, Float XC, Float Yc, Float Fla, Float FLB, Double Angle)

{

INT I;

Float A, B, X, Y;

Double DX, DY, DI, AA, BB, SINA, COSA;

COSA = COS (ANGLE);

sina = sin (Angle);

A = FLA;

B = FLB;

AA = a * a;

BB = b * b;

Float flx [4], fly [4];

X = 0;

y = b;

DX = 0;

DY = 2 * aa * y;

Di = BB-AA * B AA / 4;

FLX [0] = XC X * COSA-Y * SINA;

FLX [1] = XC X * COSA Y * SINA;

FLX [2] = XC-X * COSA-Y * SINA;

FLX [3] = XC-X * COSA Y * SINA;

Fly [0] = YC Y * COSA X * SINA;

Fly [1] = YC-Y * COSA X * SINA;

Fly [2] = YC Y * COSA-X * SINA;

Fly [3] = YC-Y * COSA-X * SINA;

i = 0;

While (DX

{

i ;

IF (i == 5)

{

PDC-> MoveTo (FLX [0], Fly [0]);

PDC-> LINETO (XC X * COSA-Y * SINA, YC Y * COSA X * SINA);

PDC-> MoveTo (FLX [1], Fly [1]);

PDC-> LineTo (XC X * COSA Y * SINA, YC-Y * COSA X * SINA);

PDC-> MoveTo (FLX [2], Fly [2]);

PDC-> LINETO (XC-X * COSA-Y * SINA, YC Y * COSA-X * SINA);

PDC-> MoveTo (FLX [3], Fly [3]);

PDC-> LINETO (XC-X * COSA Y * SINA, YC-Y * COSA-X * SINA);

FLX [0] = XC X * COSA-Y * SINA;

FLX [1] = XC X * COSA Y * SINA;

FLX [2] = XC-X * COSA-Y * SINA;

FLX [3] = XC-X * COSA Y * SINA;

Fly [0] = YC Y * COSA X * SINA;

Fly [1] = YC-Y * COSA X * SINA;

Fly [2] = YC Y * COSA-X * SINA;

Fly [3] = YC-Y * COSA-X * SINA;

i = 0;

}

X ;

DX = 2 * BB;

Di = DX BB;

IF (di> = 0)

{

DY- = 2 * aa;

Di- = DY;

Y--

}

}

PDC-> MoveTo (FLX [0], Fly [0]);

PDC-> LINETO (XC X * COSA-Y * SINA, YC Y * COSA X * SINA);

PDC-> MoveTo (FLX [1], Fly [1]); PDC-> LineTo (XC X * COSA Y * SINA, YC-Y * COSA X * SINA);

PDC-> MoveTo (FLX [2], Fly [2]);

PDC-> LINETO (XC-X * COSA-Y * SINA, YC Y * COSA-X * SINA);

PDC-> MoveTo (FLX [3], Fly [3]);

PDC-> LINETO (XC-X * COSA Y * SINA, YC-Y * COSA-X * SINA);

DI = INT ((3 * (AA-BB) -2 * (DX-DY)) / 4 0.5);

FLX [0] = XC X * COSA-Y * SINA;

FLX [1] = XC X * COSA Y * SINA;

FLX [2] = XC-X * COSA-Y * SINA;

FLX [3] = XC-X * COSA Y * SINA;

Fly [0] = YC Y * COSA X * SINA;

Fly [1] = YC-Y * COSA X * SINA;

Fly [2] = YC Y * COSA-X * SINA;

Fly [3] = YC-Y * COSA-X * SINA;

i = 0;

While (Y> 0)

{

i ;

IF (i == 5)

{

PDC-> MoveTo (FLX [0], Fly [0]);

PDC-> LINETO (XC X * COSA-Y * SINA, YC Y * COSA X * SINA);

PDC-> MoveTo (FLX [1], Fly [1]);

PDC-> LineTo (XC X * COSA Y * SINA, YC-Y * COSA X * SINA);

PDC-> MoveTo (FLX [2], Fly [2]);

PDC-> LINETO (XC-X * COSA-Y * SINA, YC Y * COSA-X * SINA);

PDC-> MoveTo (FLX [3], Fly [3]);

PDC-> LINETO (XC-X * COSA Y * SINA, YC-Y * COSA-X * SINA);

FLX [0] = XC X * COSA-Y * SINA;

FLX [1] = XC X * COSA Y * SINA;

FLX [2] = XC-X * COSA-Y * SINA;

FLX [3] = XC-X * COSA Y * SINA;

Fly [0] = YC Y * COSA X * SINA;

Fly [1] = YC-Y * COSA X * SINA;

Fly [2] = YC Y * COSA-X * SINA;

Fly [3] = YC-Y * COSA-X * SINA;

i = 0;

}

Y--

DY- = 2 * aa;

Di = aa-dy;

IF (di <0)

{

DX = 2 * BB;

Di = DX;

X ;

}

}

PDC-> MoveTo (FLX [0], Fly [0]);

PDC-> LINETO (XC X * COSA-Y * SINA, YC Y * COSA X * SINA);

PDC-> MoveTo (FLX [1], Fly [1]);

PDC-> LineTo (XC X * COSA Y * SINA, YC-Y * COSA X * SINA);

PDC-> MoveTo (FLX [2], Fly [2]);

PDC-> LINETO (XC-X * COSA-Y * SINA, YC Y * COSA-X * SINA);

PDC-> MoveTo (FLX [3], Fly [3]);

PDC-> LINETO (XC-X * COSA Y * SINA, YC-Y * COSA-X * SINA);

转载请注明原文地址:https://www.9cbs.com/read-77048.html

New Post(0)