Hiển thị các bài đăng có nhãn Kỹ thuật đồ họa. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Kỹ thuật đồ họa. Hiển thị tất cả bài đăng
Thứ Năm, 29 tháng 8, 2013
Giải thuật sinh đường Ellipse
Posted By:
adm
on 05:31
#include <graphics.h>
#include <conio.h>
#define ROUND(a) ((long)(a+0.5))
void plot(int xc, int yc, int x, int y, int color){
putpixel(xc+x, yc+y, color);
putpixel(xc-x, yc+y, color);
putpixel(xc+x, yc-y, color);
putpixel(xc-x, yc-y, color);
}
void Mid_ellipse(int xc, int yc, int a, int b, int color){
long x, y, fx, fy, a2, b2, p;
x = 0;
y = b;
a2 = a * a;
b2 = b * b;
fx = 0;
fy = 2 * a2 * y;
plot(xc, yc, x,y, color);
p = ROUND(b2-(a2*b)+(0.25*a));
while (fx < fy){
x++;
fx += 2*b2;
if (p<0)
p += b2*(2*x +3);
else{
y--;
p+= b2*(2*x +3) + a2*(-2*y +2);
fy -= 2*a2;
}
plot(xc, yc, x, y, color);
}
p = ROUND(b2*(x+0.5)*(x+0.5) + a2*(y-1)*(y-1) - a2*b2);
while (y>0){
y--;
fy -= 2*a2;
if (p>=0)
p+=a2*(3 - 2*y);
else{
x++;
fx += 2*b2;
p += b2*(2*x+2) + a2*(-2*y +3);
}
plot(xc, yc, x, y, color);
}
}
void main(){
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "");
Mid_Ellipse(getmaxx() / 2, getmaxy() / 2, 150, 80, 4);
getch();
closegraph();
}
Các giải thuật sinh đường tròn trong C/C++
Posted By:
adm
on 04:13
1. Giải thuật sinh đường tròn Bresenham:
void Bre_circle(int xc, int yc, int Radius, int color) {
int x, y, p;
x = 0;
y = Radius;
p = 3 - 2 * Radius;
while (x <= y) {
putpixel(xc + x, yc + y, color);
if (p < 0)
p += 4 * x + 6;
else {
p += 4 * (x-y) + 10;
y--;
}
x++;}
}
2. Giải thuật sinh đường tròn Midpoint :
void Mid_circle(int xc, int yc, int Radius, int color) {
int x, y, d;
x = 0;
y = Radius;
d = 1- Radius;
while (x <= y) {
putpixel(xc + x, yc + y, color);
if (d< 0)
d +=2 * x + 3;
else {
d += 2 * (x-y) + 5;
y--;
}
x++;
}
}
Thứ Bảy, 17 tháng 8, 2013
Các thuật toán vẽ đoạn thẳng trong C/C++
Posted By:
adm
on 16:07
1. Thuật toán vẽ đoạn thẳng thông thường:
void dline(int x1,int y1, int x2,int y2, int color) {
float y;
int x;
for (x=x1; x<=x2; x++) {
y = y1 + (x-x1)*(y2-y1)/(x2-x1) ;
putpixel(x, Round(y), color );
}
}
2. Thuật toán DDA (Digital Differential Analizer):
void ddaline (int x1,int y1,int x2,int y2,int c){
int x=x1;
float y=y1;
float k=(float)(y2-y1)/(x2-x1);
putpixel(x,round(y),c);
for(int i=x1;i<=x2;i++) {
x++;
y=y+k;
putpixel(x,round(y),c);
}
}
3. Thuật toán Bresenham
/*Thuat toan Bresenham ve dthang (0<k<1) */
void Bre_line(int x1, int y1, int x2, int y2, int c)
{int x, y, dx, dy,p,const1,const2;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
p = 2*dy - dx;
const1 = 2*dy;
const2 = 2*(dy-dx);
for (x=x1; x<=x2; x++) {
putpixel(x, y, c);
if (p < 0)
p += const1; // p=p + 2dy
else {
p +=const2; //p=p+2dy-2dx
y++;
}
}
}
4. Thuật toán Trung điểm - Midpoint
/* Thuat toan Midpoint de ve doan thang (0<k<1) */
void Mid_line(int x1, int y1, int x2, int y2, int c){
int x, y, dx, dy,d;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
d= dy - dx/2;
for (x=x1; x<=x2; x++){
putpixel(x, y, c);
if (d <= 0)
d = d + dy;
else {
y ++;
d = d + dy - dx;
}}
}
Đăng ký:
Bài đăng (Atom)


