Keresés

Új hozzászólás Aktív témák

  • Lakers

    tag

    Sziasztok!

    Tudtok ajánlani olyan helyet, ahol grafikai feladatok megvalósítása van C nyelven? Egyszerűre gondolok, mint sokszögek rajzolása, egérrel való mozgatása, háttérszínezése. (Google barátom által talált oldalak példakódjai sokszor vírust is rejt...)

  • Lakers

    tag

    Sziasztok van egy kis problémám, grafika C. A program nem mást csinál, mint egy hermitív ívet/görbét képezz le. Azt mondta a gyakvezér, hogy csak egyet kell megírni, aztán csak mátrix cserét kell végrehajtani, hogy megkapjuk a beizer vagy b-spline görbét.

    nos én ivrajzolo(pontok, M, -1, 2); ezt ivrajzolo(pontok, M, 0, 1);-re modósítottam
    de nem igazán látszik a szépsége...

    MATRIX M = {{
    {-1.0 / 6.0, 0.5, -1.0 / 3.0, 0.0},
    {0.5, -1.0, -0.5, 1.0},
    {-0.5, 0.5, 1.0, 0.0},
    {1.0 / 6.0, 0.0, -1.0 / 6.0, 0.0}}}
    vagy pedig ezt a részt is másra kéne módosítanom?

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

    typedef struct pont
    {
    double x,y;
    } PONT;

    typedef struct{
    float t[4][4];
    }MATRIX;


    void ivrajzolo (PONT G[4], MATRIX M, float a, float b){
    float lepeskoz = (b - a) / 100;
    PONT C[4] ={0,0, 0,0, 0,0, 0,0};

    for(int i = 0; i < 4; i++)
    for(int j = 0; j < 4; j++){
    C[i].x += G[j].x * M.t[j][i];
    C[i].y += G[j].y * M.t[j][i];
    }

    PONT Q;
    float t= a;
    Q.x = C[0].x * t*t*t + C[1].x * t*t + C[2].x * t + C[3].x * 1;
    Q.y = C[0].y * t*t*t + C[1].y * t*t + C[2].y * t + C[3].y * 1;
    moveto(int(Q.x),int(Q.y));

    for ( t=a ; t < b ; t+= lepeskoz ){
    Q.x = C[0].x * t*t*t + C[1].x * t*t + C[2].x * t + C[3].x * 1;
    Q.y = C[0].y * t*t*t + C[1].y * t*t + C[2].y * t + C[3].y * 1;
    lineto(int(Q.x),int(Q.y));
    }
    }


    int main()
    {
    int gd,gm;
    initgraph(&gd,&gm,"");
    gd=VGA;
    gm=VGAMED;

    int page=0;
    int ap;
    int i=0;

    PONT pontok[4] = {290,300,330,200,430,130,500,200};
    MATRIX M = {{
    {-1.0 / 6.0, 0.5, -1.0 / 3.0, 0.0},
    {0.5, -1.0, -0.5, 1.0},
    {-0.5, 0.5, 1.0, 0.0},
    {1.0 / 6.0, 0.0, -1.0 / 6.0, 0.0}}};
    for (;;)
    {
    setactivepage(page);
    cleardevice();

    for ( i=0 ; i<4 ; ++i)
    circle(integer(pontok[i].x),integer(pontok[i].y),3);

    ivrajzolo(pontok, M, -1, 2);

    /* Egerkezeles */
    if (!balgomb) ap = getactivepoint((pont2d*)pontok,4,5);
    if (ap >= 0 && balgomb)
    {
    pontok[ap].x = egerx;
    pontok[ap].y = egery;
    }
    /* Egerkezeles vege */

    setvisualpage(page);
    page = 1-page;
    if (kbhit())
    break;

    }


    closegraph();

    return(0);

    }

  • Lakers

    tag

    A minxy.x és a minxy.y és a többieket, hogyan kell deklarálni? A programnak egy kis részlete volt megadva és tovább magunknak kellett megcsinálni. Nagyon nem tetszik a fordítonak és fogalmam sincs, hogy mit vétettem.

    #include "graphics.h"
    #include <math.h>

    #define R 50;

    double f(double x){
    return sin(x)/x;
    }

    typedef struct pont
    {
    double x,y;
    } pont;


    pont2d w2v(pont2d pont, pont2d minxy, pont2d maxxy, pont2d minuv, pont2d maxuv)
    {
    return (pont2d)
    {
    (pont.x-minxy.x)*(maxuv.x-minuv.x)/(maxxy.x-minxy.x)+minuv.x,
    (pont.y-minxy.y)*(maxuv.y-minuv.y)/(maxxy.y-minxy.y)+minuv.y
    };
    }

    int main(){

    int gd, gm;
    gd=VGA;
    gm=VGAMED;
    initgraph(&gd,&gm,"");
    int minxy, minxx, maxxy, maxxx, minuv, maxuv, vmin, vmax;
    int mx, my;
    mx=getmaxx();
    my=getmaxy();
    double i;

    minxy.x=-(4*M_PI) *R;
    minxy.y=(4*M_PI) *R;
    maxxy.x=mx;
    maxxy.y=my;

    minuv.x=mx/4;
    maxuv.x=mx/4 * 3;
    vmin=my/4;
    vmax=mx/4 * 3;

    rectangle(minuv.y, minuv.y, maxuv.x, maxuv.y);

    line (umin+umax)2, vmin, (umin+umax/2), vmax);
    line (umin, (vmin+vmax)/2, umax(vmin+vmax)/2;

    setcolor(6);
    pont.x=-(4*M_PI) *R +mx/2;
    pont.y=(f(-(4*M_PI))*R +my/2;

    moveto(-(4*M_PI)*R, f(-(4*M_PI);

    for(i=-(4*M_PI); i <= (4*M_PI); i++)

    pont.y=f(i) * R + my /2;
    pont.x=f(i) * R + mx /2


    x=(x-xmin)(umax-umin)/(xmax-xmin)+umin;
    y=(y-ymin)(vmax-vmin)/(ymax-ymin)+vmax;
    lineto(pont.x,pont.y);

    }

    getch();
    closegraph();
    return(0);
    }
    }

  • Lakers

    tag

    válasz Jester01 #1515 üzenetére

    köszi,

    48 C:\Users\Lacc\Documents\beizer.cpp [Warning] passing `double' for converting 1 of `void rectangle(int, int, int, int)'
    50 C:\Users\Lacc\Documents\beizer.cpp [Warning] converting to `int' from `double'

    ezeknél mit vétettem?

  • Lakers

    tag

    válasz shev7 #1517 üzenetére

    csak azt nem tudom, hogy hol kéne explicit módon int-é alakítani, gyakon megadták a felső sorokat, és nem tudom, hogy hol kéne típuskényszerítenem...

Új hozzászólás Aktív témák