Đại Học Văn Hiến Liên Thông


Join the forum, it's quick and easy

Đại Học Văn Hiến Liên Thông
Đại Học Văn Hiến Liên Thông
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

code do hoa may tinh

Go down

code do hoa may tinh Empty code do hoa may tinh

Bài gửi by yukio_013 Fri Sep 07, 2012 9:28 pm

//function math
float DoDaiDuongThang(int x1, int y1, int x2, int y2)
{
return sqrt((float)(x2-x1)*(x2-x1)+(float)(y2-y1)*(y2-y1));
}

//function draw
void LineDDA(int x1, int y1, int x2, int y2)
{
int x = x1;
float y = y1;
float m = (y2-y1)/(x2-x1);
// Bat dau ve
putpixel(x,round(y),color);
for (int i=x1; i<x2; i++)
{
x++;
y += m;
putpixel(x,round(y),color);
}
}
//ve dg trong
void drawDot(int x, int y)
{
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
glFlush();

}
void put8pixel(int x,int y,int xc,int yc)
{
//x = x+xc;
//y = y+yc;
drawDot(x+xc,y+yc);
drawDot(x+xc,-y+yc);
drawDot(y+yc,x+xc);
drawDot(y+yc,-x+yc);
drawDot(-x+xc,y+yc);
drawDot(-x+xc,-y+yc);
drawDot(-y+yc,x+xc);
drawDot(-y+yc,-x+xc);
}
void DuongTron(int R, int xc, int yc)
{
int p = 3-2*R, x=0, y=R;
put8pixel(x,y,xc,yc);
while(x {
x++;
if(p<0) p+=4*x+6;
else
{
y--;
p+= 4*(x-y)+10;
}
put8pixel(x,y,xc,yc);
}
}
void DuongTron_midpoint(int R, int xc, int yc)//ve dg tron voi midpoint
{
int x=0, y=R, f = 1-R;
put8pixel(x,y,xc,yc);
while(x {
if(f<0) f+= 2*x+3;
else
{
y--;
f+=2*(x-y)+5;
}
x++;
put8pixel(x,y,xc,yc);
}
}
//thuat toan ve eclip
void put4pixel(int xc,int yc,int x,int y)
{
drawDot(xc+x,y+yc);
drawDot(xc-x,y+yc);
drawDot(xc-x,yc-y);
drawDot(xc+x,yc-y);
}
void Ellipse_Bresenham(int xc, int yc, int a, int b) {
int x,y;
double z1,z2,P;
x=0;y=b;
z1=(double)(b*b)/(a*a);
z2=(double)1/z1;
P=2*z1-(2*b)+1;
while(z1*(double)x/y<=1){
put4pixel(xc, yc, x, y);
if (P<0) P+=2*z1*(2*x+3);
else{
P+=2*z1*(2*x+3)+4*(1-y);
y--;
}
x++;

}
x=a;y=0;
P=2*z2-2*a+1;
while(z2*(double)y/x<=1){
put4pixel(xc, yc, x, y);
if (P<0) P+=2*z2*(2*y+3);
else{
P+=2*z2*(2*y+3)+4*(1-x);
x--;
}
y++;

}
}
void MidpointEllipse(int xc,int yc,int rx,int ry)
{
int x=0,y=ry;
float p1,p2,t1,t2;
int k;
p1=ry*ry-rx*rx*ry+0.25*rx*rx;
put4pixel(xc,yc,x,y);
for(k=0;(2*ry*ry*x)<=(2*rx*rx*y);k++)
{
t1=2*ry*ry*x+2*ry*ry;
t2=2*rx*rx*y-2*rx*rx;
if(p1<0)
p1=p1+t1+ry*ry;
else
{
p1=p1+t1-t2+ry*ry;
y--;
}
x++;
put4pixel(xc,yc,x,y);

}
p2=ry*ry*(x+0.5)*(x+0.5)+rx*rx*(y-1)*(y-1)-rx*rx*ry*ry;
put4pixel(xc,yc,x,y);
for(k=0;y>=0;k++)
{
t1=2*ry*ry*x+2*ry*ry;
t2=2*rx*rx*y-2*rx*rx;
if(p2>0)
p2=p2-t2+rx*rx;
else
{
p2=p2+t1-t2+rx*rx;
x++;
}
y--;
put4pixel(xc,yc,x,y);

}
}
//ve dg tron noi tiep tam giac
void DuongTronNoiTiepTamGiac(int x1, int y1, int x2, int y2, int x3, int y3)
{
float a,b,c,x,y,R;
a = DoDaiDuongThang(x2,y2,x3,y3);
b = DoDaiDuongThang(x1,y1,x3,y3);
c = DoDaiDuongThang(x2,y2,x1,y1);
x=(a*x1+b*x2+c*x3)/(a+b+c);
y=(a*y1+b*y2+c*y3)/(a+b+c);
R = sqrt((pow(DoDaiDuongThang(x,y,x1,y1),2)*pow(DoDaiDuongThang(x,y,x2,y2),2))/pow(DoDaiDuongThang(x2,y2,x1,y1),2));
DuongTron(R,x,y);
}
//ve tam giac
void VeTamGiac(int x1, int y1, int x2, int y2, int x3, int y3,CDC* pDC)
{
pDC->MoveTo(x1,y1);
LineDDA(x2,y2);
LineDDA(x3,y3);
LineDDA(x1,y1);
}
//to mau

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <graphics.h>

#include <dos.h>

#define MAXVERTEX 20

#define MAXEDGE 20

#define TRUE 1

#define FALSE 0

typedef struct {

int x;

int y;

}POINT;

typedef struct{

int NumVertex;

POINT aVertex[MAXVERTEX];

}POLYGON;

typedef struct {

int NumPt;

float xPt[MAXEDGE];

}XINTERSECT;

typedef struct

{

int yMin; // Gia tri y nho nhat cua 2 dinh

float xIntersect; // Hoanh do giao diem cua canh & dong quet

float dxPerScan; // Gia tri 1/m

int DeltaY;

}EDGE;

typedef struct

{

int NumEdge;

EDGE aEdge[MAXEDGE];

}EDGELIST;

/*

Dat 1 canh vao danh sach canh.

Cac canh duoc sap theo thu tu giam dan cua yMin (yMin la gia tri y lon nhat cua 2 dinh 1 canh)

Xu li luon truong hop dong quet di ngang qua dinh ma tai do chi tinh 1 diem giao

*/

void PutEdgeInList(EDGELIST &EdgeList, POINT p1, POINT p2,

int NextY)

{

EDGE EdgeTmp;

EdgeTmp.dxPerScan = float(p2.x-p1.x)/(p2.y-p1.y); // 1/m

if(p1.y < p2.y)

{

/*

Truong hop dong quet di ngang qua dinh la giao diem

cua 2 canh co huong y cung tang

*/

if(p2.y < NextY)

{

p2.y--;

p2.x -= EdgeTmp.dxPerScan;

}

EdgeTmp.yMin = p1.y;

EdgeTmp.xIntersect= p1.x;

EdgeTmp.DeltaY = abs(p2.y-p1.y)+1;

} // if

else

{

/*

Truong hop dong quet di ngang qua dinh la giao diem cua 2 canh co huong y cung giam

*/

if(p2.y > NextY)

{

p2.y++;

p2.x+= EdgeTmp.dxPerScan;

}

EdgeTmp.yMin = p2.y;

EdgeTmp.xIntersect= p2.x;

EdgeTmp.DeltaY = abs(p2.y-p1.y)+1;

}//else

// xac dinh vi tri chen

int j = EdgeList.NumEdge;

while((j>0) && (EdgeList.aEdge[j-1].yMin>EdgeTmp.yMin))

{

EdgeList.aEdge[j] = EdgeList.aEdge[j-1];

j--;

}

// tien hanh chen dinh moi vao canh

EdgeList.NumEdge++;

EdgeList.aEdge[j] = EdgeTmp;

} // PutEdgeInList

/*

Tim dinh ke tiep sao cho khong nam tren cung duong thang voi dinh dang xet

*/

int FindNextY(POLYGON P, int id)

{

int j = (id+1)%P.NumVertex;

while((j<P.NumVertex)&&(P.aVertex[id].y == P.aVertex[j].y))

j++;

if(j
return (P.aVertex[j].y);

return 0;

} // FindNextY

// Tao danh sach cac canh tu polygon da cho

void MakeSortedEdge(POLYGON P, EDGELIST &EdgeList,

int &TopScan, int &BottomScan)

{

TopScan = BottomScan = P.aVertex[0].y;

EdgeList.NumEdge = 0;

for(int i=0; i
{

// Truong hop canh khong phai la canh nam ngang if(P.aVertex[i].y != P.aVertex[i+1].y)

PutEdgeInList(EdgeList, P.aVertex[i], P.aVertex[i+1], FindNextY(P, i+1));

//else Xu li truong hop canh nam ngang

if(P.aVertex[i+1].y > TopScan)

TopScan = P.aVertex[i+1].y;

}

BottomScan = EdgeList.aEdge[0].yMin;

} //MakeSortedEdge

// Cap nhat lai hai con tro FirstId, LastId cho biet danhsach cac canh active

void UpdateActiveEdgeList(EDGELIST EdgeList, int yScan, int &FirstId, int &LastId)

{

while((FirstId<EdgeList.NumEdge-1) &&(EdgeList.aEdge[FirstId].DeltaY == 0))

FirstId++;

while((LastId
LastId++;

} // UpdateActiveEdgeList

void SortOnX(XINTERSECT & aIntersectPt)

{

for(int i=0; i
{

int Min = i, t;

for(int j=i+1; j
if( aIntersectPt.xPt[j] < aIntersectPt.xPt[Min])

Min = j;

t = aIntersectPt.xPt[Min];

aIntersectPt.xPt[Min] = aIntersectPt.xPt[i];

aIntersectPt.xPt[i] = t;

}

} // SortOnX

/*

Tim cac hoanh do giao diem cua cac canh cua da giac voi dong quet yScan. Sau khi tim cac hoanh do giao diem, ta sap xep lai theo chieu tang cua x

*/

void FindXIntersection(EDGELIST EdgeList, XINTERSECT &aIntersectPt, int FirstId, int LastId)

{

aIntersectPt.NumPt = 0;

for(int i=FirstId; i<=LastId; i++)

{

if(EdgeList.aEdge[i].DeltaY>0)

{

aIntersectPt.xPt[aIntersectPt.NumPt] = EdgeList.aEdge[i].xIntersect;

aIntersectPt.NumPt++;

}

}

SortOnX(aIntersectPt);

} //FindXIntersection

#define Round(x) int(x+0.5)

void FillLine(XINTERSECT aIntersectPt, int yScan)

{

for(int i=0; i<aIntersectPt.NumPt; i+=2)

line(Round(aIntersectPt.xPt[i]), yScan, Round(aIntersectPt.xPt[i+1]), yScan);

} // FillLine

void UpdateEdgeList(EDGELIST &EdgeList,int FirstId,int LastId)

{

for(int i=FirstId; i<=LastId; i++)

{

if(EdgeList.aEdge[i].DeltaY>0)

{

EdgeList.aEdge[i].DeltaY--;

EdgeList.aEdge[i].xIntersect += EdgeList.aEdge[i].dxPerScan;

}

}

} //FillLine

void ScanLineFill(POLYGON P)

{

EDGELIST EdgeList;

XINTERSECT aIntersectPt;

int TopScan, BottomScan, FirstId, LastId;

MakeSortedEdge(P, EdgeList, TopScan, BottomScan);

FirstId = LastId = 0;

for(int i=BottomScan; i<=TopScan; i++)

{

// Cap nhat lai danh sach cac canh active - tuc la cac canh cat dong quet i

UpdateActiveEdgeList(EdgeList, i, FirstId, LastId);

// Tim cac hoanh do giao diem cua dong quet voi cac canh cua da giac va sap xep lai cac hoanh do giao diem truc tiep tren EdgeList

FindXIntersection(EdgeList, aIntersectPt, FirstId, LastId);

FillLine(aIntersectPt, i);

UpdateEdgeList(EdgeList, FirstId, LastId);

}

}
yukio_013
yukio_013
Thành viên lớp 11A101
Thành viên lớp 11A101

Tổng số bài gửi : 21
Join date : 08/06/2012
Age : 34

Về Đầu Trang Go down

code do hoa may tinh Empty Re: code do hoa may tinh

Bài gửi by yukio_013 Fri Sep 07, 2012 9:29 pm

cac ban xem co gi bo xung lai cho may ban thi lai nha.
yukio_013
yukio_013
Thành viên lớp 11A101
Thành viên lớp 11A101

Tổng số bài gửi : 21
Join date : 08/06/2012
Age : 34

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết