Viết chương trình vẽ đa giác tự do

March 07, 2023
Viết chương trình vẽ đa giác từ các đỉnh cho trước.


Bài Giải



/*
Name: Ve da giac tu cac dinh cho truoc trong thu vien Graphics
Copyright: None
Author: Tran Anh
Description: https://gimi.vn
*/

#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>

void DDA(int xA,int yA,int xB,int yB,int color){
    int dx=xB-xA;
    int dy=yB-yA;
    int step;
    if(abs(dx)>abs(dy))
        step=abs(dx);
    else
        step=abs(dy);
    float x_inc=(float)dx/step;
    float y_inc=(float)dy/step;
    float x=xA;
    float y=yA;
    putpixel(x,y,color);
    for(int k=1;k<=step;k++){
        x=x+x_inc;
        y=y+y_inc;
        putpixel(round(x),round(y),color);
    }
}

typedef struct Dinh{
    int x,y;
};

void VeDaGiac(Dinh d[],int n, int color){
    for(int i=0;i<n;i++){
        int j = (i+1)%n;
        DDA(d[i].x,d[i].y,d[j].x,d[j].y,color);
    }
}

int Delta3(Dinh a,Dinh b, Dinh c){
    int kq=a.x*b.y+a.y*c.x+b.x*c.y-c.x*b.y-b.x*a.y-c.y*a.x;
    if(kq<0) return -1;
    if(kq>0) return 1;
    return 0;
}
void XetLoiLom(Dinh d[],int n){
 Dinh a=d[0],b=d[1],c=d[2];
 int cua=Delta3(a,b,c);
 for(int i=1;i<n;i++){
    int j = (i+1)%n;
    int k = (i+2)%n;
    if(cua!= Delta3(d[i],d[j],d[k])){
        return;
    }
 }
}


int main(){

    initwindow(640,480);
    Dinh d[4]={{100,100},{400,300},{200,300},{300,100}};
    VeDaGiac(d,4,15);
    XetLoiLom(d,4);
    getch();
    return 0;
}