Produits séchés! Dessinez un piggy Peppa en langage C (code source joint), pas besoin de piquer!

Partagez comment utiliser le  langage C pour dessiner une page de porcelet et utilisez un champ de distance signé (SDF) pour représenter un cercle: file: /// C: \ Users \ Administrator.WIN-

STED6B9V5UI \ AppData \ Local \ Temp \ ksohtml9656 \ wps19.png continue d'utiliser cette méthode pour représenter des formes, mais cette fois, nous voulons utiliser des caractères ASCII | / = \ pour dessiner le cadre extérieur de la forme et remplir l'intérieur, similaire à ceci: =====

// ..... \\

|| ....... ||

\\ ..... //

   ===== Le gradient de SDF représente la direction dans laquelle SDF change le plus. Cette direction peut être utilisée pour déterminer quel caractère utiliser. fichier: /// C: \ Users \ Administrator.WIN-

STED6B9V5UI \ AppData \ Local \ Temp \ ksohtml9656 \ wps20.png Nous obtenons l'approximation du gradient de SDF par différence, puis utilisons atan2 () pour trouver l'angle du gradient: file: /// C: \ Users \ Administrator.WIN -

STED6B9V5UI \ AppData \ Local \ Temp \ ksohtml9656 \ wps21.jpg est simplement implémenté en langage C. Dans le canevas, dessinez un cercle avec un rayon de 0,8 et un cadre extérieur de 0,1: file: /// C: \ Users \ Administrator . WIN-


\AppData\Local\Temp\ksohtml9656\wps22.jpg #include #include #define T doubleT f(T x, T y) {

    return sqrt(x * x + y * y) - 0.8f;}char outline(T x, T y) {

    T delta = 0.001;

    if (fabs(f(x, y)) < 0.05) {

        T dx = f(x + delta, y) - f(x - delta, y);

        T dy = f(x, y + delta) - f(x, y - delta);

        return "|/=\\|/=\\|"[(int)((atan2(dy, dx) / 6.2831853072 + 0.5) * 8 + 0.5)];

    }

    else if (f(x, y) < 0)

        return '.';

    else

        return ' ';}int main() {

    for (T y = -1; y < 1; y += 0.05, putchar('\n'))

        for (T x = -1; x < 1; x += 0.025)

            putchar (outline (x, y));} Le code peut être déplacé à gauche et à droite!  fichier: /// C: \ Users \ Administrator.WIN-STED6B9V5UI \ AppData \ Local \ Temp \ ksohtml9656 \ wps23.png Ensuite, nous pouvons dessiner plusieurs cercles,

Faites-les pivoter et mettez-les à l'échelle de manière appropriée, combinez-les avec une géométrie solide structurelle, puis vous pouvez dessiner Peppa Pig avec 19 lignes de code: le code peut se déplacer à gauche et à droite!

▼// ASCII Peppa Pig by Milo Yip#include #include #include #define T double

T c(T x,T y,T r){return sqrt(x*x+y*y)-r;}

T u(T x,T y,T t){return x*cos(t)+y*sin(t);}

T v(T x,T y,T t){return y*cos(t)-x*sin(t);}

T fa(T x,T y){return fmin(c(x,y,0.5),c(x*0.47+0.15,y+0.25,0.3));}

T no(T x,T y){return c(x*1.2+0.97,y+0.25,0.2);}

T nh(T x,T y){return fmin(c(x+0.9,y+0.25,0.03),c(x+0.75,y+0.25,0.03));}

T ea(T x,T y){return fmin(c(x*1.7+0.3,y+0.7,0.15),c(u(x,y,0.25)*1.7,v(x,y,0.25)+0.65,0.15));}

T ey(T x,T y){return fmin(c(x+0.4,y+0.35,0.1),c(x+0.15,y+0.35,0.1));}

T pu(T x,T y){return fmin(c(x+0.38,y+0.33,0.03),c(x+0.13,y+0.33,0.03));}

T fr(T x,T y){return c(x*1.1-0.3,y+0.1,0.15);}

T mo(T x,T y){return fmax(c(x+0.15,y-0.05,0.2),-c(x+0.15,y,0.25));}

T o(T x,T y,T(*f)(T,T),T i){T r=f(x,y);return fabs(r)<0.02?(atan2(f(x,y+1e-3)-r,f(x+1e-3,y)-r)+0.3)*1.273+6.5:r<0?i:0;}

T s(T x,T y,T(*f)(T,T),T i){return f(x,y)<0?i:0;}

T f(T x,T y){return o(x,y,no,1)?

fmax(o(x,y,no,1),s(x,y,nh,12)):fmax(o(x,y,fa,1),fmax(o(x,y,ey,11),fmax(o(x,y,ea,1),fmax(o(x,y,mo,1),fmax(s(x,y,fr,13),s(x,y,pu,12))))));}

int main(int a,char**b){for(T y=-1,s=a>1?strtod(b,0):1;y<0.6;y+=0.05/s,putchar('\n'))for(T x=-1;x<0.6;x+=0.025/s)putchar(" .|/=\\|/=\\| @!"

[(int)f(u(x,y,0.3),v(x,y,0.3))]);}file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9656\wps24.png 2倍:

file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9656\wps25.png 4倍:

file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9656\wps26.png 8倍:

file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml9656\wps27.png 

que diriez-vous? Se réunit-il maintenant? Vous pouvez également essayer de faire bouger ce Peppa

De plus, si vous souhaitez améliorer vos capacités de programmation, apprenez le langage C et la programmation C ++! Dépassement dans une courbe, un pas plus vite! Je pourrai peut-être vous aider ici ~

UP a mis en ligne des didacticiels vidéo sur l'apprentissage de la programmation C / C ++ sur la page d'accueil. Ceux qui sont intéressés ou qui apprennent doivent y jeter un œil! Cela vous sera utile ~

Partage (code source, vidéo du projet réel, notes de projet, tutoriel d'introduction de base)

Bienvenue aux partenaires qui changent de carrière et apprennent la programmation, utilisent plus d'informations pour apprendre et évoluer plus vite que d'y penser vous-même!

Apprentissage de la programmation:

Apprentissage de la programmation:

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45713725/article/details/115006684
conseillé
Classement