Hirdetés

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

  • 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);

    }

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