minhlap.allgoo.us
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.


When we control the event,we control your lives
 
Trang ChínhLatest imagesTìm kiếmĐăng kýĐăng Nhập
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
» Tô màu theo vùng quét
Tô màu theo vùng quét Icon_minitimeTue Aug 13, 2013 4:18 pm by minhlap

» authentischen Hermes Lindy Taschen
Tô màu theo vùng quét Icon_minitimeWed Jan 23, 2013 11:15 am by cangliang

» Hermes Bag
Tô màu theo vùng quét Icon_minitimeWed Jan 23, 2013 11:14 am by cangliang

» Hermes Evelyn pm
Tô màu theo vùng quét Icon_minitimeWed Jan 23, 2013 11:13 am by cangliang

» Hermes Kelly bag billig
Tô màu theo vùng quét Icon_minitimeMon Jan 21, 2013 8:57 am by cangliang

» Hermes Constance Bag
Tô màu theo vùng quét Icon_minitimeMon Jan 21, 2013 8:56 am by cangliang

» Discout Hermes Belt
Tô màu theo vùng quét Icon_minitimeMon Jan 21, 2013 8:55 am by cangliang

» Christian Louboutin Love Flats
Tô màu theo vùng quét Icon_minitimeTue Jan 15, 2013 12:25 pm by cangliang

» Christian Louboutin Love Flats
Tô màu theo vùng quét Icon_minitimeTue Jan 15, 2013 12:25 pm by cangliang

Navigation
 Portal
 Diễn Đàn
 Thành viên
 Lý lịch
 Trợ giúp
 Tìm kiếm
May 2024
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendarCalendar
Diễn Đàn
Affiliates
free forum


 

 Tô màu theo vùng quét

Go down 
3 posters
Tác giảThông điệp
minhlapb
Thành viên bậc 2
Thành viên bậc 2



Tổng số bài gửi : 32
Points : 90
Reputation : 2
Join date : 22/07/2009

Tô màu theo vùng quét Empty
Bài gửiTiêu đề: Tô màu theo vùng quét   Tô màu theo vùng quét Icon_minitimeMon Nov 09, 2009 1:20 pm

bài này được cài đặt trên BorlanC nhưng về thuật toán thì no change

#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
int x,y;

typedef struct {
int x;
int y;
}POINT;//Dia chi con tro co toa do(x,y)

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;
POLYGON P; XINTERSECT a;EDGELIST 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<P.NumVertex)
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<P.NumVertex; 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<EdgeList.NumEdge-1) &&(EdgeList.aEdge[LastId+1].yMin<=yScan))
LastId++;
} // UpdateActiveEdgeList

void SortOnX(XINTERSECT & aIntersectPt)
{
for(int i=0; i<aIntersectPt.NumPt-1; i++)
{
int Min = i, t;
for(int j=i+1; j<aIntersectPt.NumPt; 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

// To mau cac doan giao duoc tao boi tung cap hoanh do ke tiep nhau
#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;
}
}
} //UpdateEdgeList

void ScanLineFill(POLYGON P)
{
EDGELIST EdgeList;
XINTERSECT aIntersectPt;
int TopScan, BottomScan, FirstId, LastId;
//Tao danh sach tat ca cac canh ET
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);

//To mau cac doan duoc giao tao boi tung cap hoanh do ke tiep nhau
FillLine(aIntersectPt, i);

// Cap nhat lai thong tin cua cac canh de su dung cho dong quet ke tiep
UpdateEdgeList(EdgeList, FirstId, LastId);
}
delay(200);
}

void input()
{
int i;
printf("Nhap so canh cua da giac: "); scanf("%d",&P.NumVertex);
for(i=1;i<=P.NumVertex;i++)
{
printf("Nhap toa do dinh %d (x%d,y%d)=",i,i,i); scanf("%d%d",&P.aVertex[i].x,&P.aVertex[i].y);
}
}

void main()
{

int TopScan;
int BottomScan;
int n=DETECT,m;
initgraph(&n,&m,"");
input();
setcolor(GREEN);
MakeSortedEdge( P, EdgeList, TopScan, BottomScan);
x=getmaxx()/2,y=getmaxy()/2;
ScanLineFill(P);
getch();
closegraph;
}
Về Đầu Trang Go down
anan
Thành viên bậc 1
Thành viên bậc 1



Tổng số bài gửi : 3
Points : 3
Reputation : 0
Join date : 25/01/2010

Tô màu theo vùng quét Empty
Bài gửiTiêu đề: Re: Tô màu theo vùng quét   Tô màu theo vùng quét Icon_minitimeMon Jan 25, 2010 10:30 pm

anh ah. em dang hoc ve thuat toan nay nhung doc thuat toan thay kho hieu. bai code nay anh da chay duoc chua. anh co the lay 1 vi du cu the ko. cach nhap toa do cac canh cua da giac phai co luu y gi ko. anh hay tra loi nhanh giup em nha. em dang rat can bai toan nay. Cam on anh nhieu
Về Đầu Trang Go down
symphonyenigmatic
Thành viên bậc 3
Thành viên bậc 3
symphonyenigmatic


Tổng số bài gửi : 61
Points : 104
Reputation : 6
Join date : 26/07/2009
Age : 35
Đến từ : http:://thienthancntt.tk

Tô màu theo vùng quét Empty
Bài gửiTiêu đề: Re: Tô màu theo vùng quét   Tô màu theo vùng quét Icon_minitimeMon Jan 25, 2010 11:56 pm

Bạn tham khảo thêm ở 2 trang này, nó nói cũng tương đối kĩ. Có minh họa luôn cách cài đặt thuật toán.
http://www.uit.edu.vn/data/gtrinh/TH109/Htm/Chuong2.htm
Giáo trình tô màu
Về Đầu Trang Go down
http://http:://thienthancntt.tk
anan
Thành viên bậc 1
Thành viên bậc 1



Tổng số bài gửi : 3
Points : 3
Reputation : 0
Join date : 25/01/2010

Tô màu theo vùng quét Empty
Bài gửiTiêu đề: Re: Tô màu theo vùng quét   Tô màu theo vùng quét Icon_minitimeTue Jan 26, 2010 10:14 pm

em cảm ơn anh rất nhiều
Về Đầu Trang Go down
anan
Thành viên bậc 1
Thành viên bậc 1



Tổng số bài gửi : 3
Points : 3
Reputation : 0
Join date : 25/01/2010

Tô màu theo vùng quét Empty
Bài gửiTiêu đề: Re: Tô màu theo vùng quét   Tô màu theo vùng quét Icon_minitimeThu Jan 28, 2010 1:05 am

anh ơi, em đã gõ code rồi, ko có lỗi nào cả. khi chạy thi chỉ chạy thì chỉ nhập dữ liệu dữ liệu thôi. và khi chạy chương trình rồi ấn F7 thì các hàm khác vẫn chậy. có thiếu hàm vẽ hình đa giác ko anh.
anh giúp em với, em cần gấp. Cảm ơn anh
Về Đầu Trang Go down
Sponsored content





Tô màu theo vùng quét Empty
Bài gửiTiêu đề: Re: Tô màu theo vùng quét   Tô màu theo vùng quét Icon_minitime

Về Đầu Trang Go down
 
Tô màu theo vùng quét
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Tô màu theo vùng quét

Permissions in this forum:Bạn không có quyền trả lời bài viết
minhlap.allgoo.us :: Lập trình :: Lập Trình Hướng Đối Tượng,Đồ Họa OpenGL C, C++-
Chuyển đến