Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C: Yksinkertainen gridikaava (tyyliin tk:n editori)

Daiz [20.10.2004 19:04:16]

#

HUOM! Tämä on ensimmäinen koodivinkkini, älkää odottako liikoja :)


Tässä siis hyvin yksinkertainen "grid snapping" kaava käyttämällä modulusta. Alunperin suunnittelin tätä käytettävän aivan eri asioissa kuin c:llä, mutta jokatapauksessa... Kaava on seuraava:
x_pos = x - (x mod tilewidth)
y_pos = y - (y mod tileheight)

Ja selitystä:
x_pos, y_pos = palikan (tai minkä vaan) sijainti mihin piirretään
x, y = koordinaatit josta paikka määrittellään (esim. hiiren x ja y sijainnit)
mod = modulus, joka palauttaa laskun jakojäännöksen.

Ja sitten kaavan selitys:
Oletetaan että haluamme asettaa palikan ruutuun joka sisältää koordinaatit 325 (x) ja 131 (y). Yhden ruudun koko olisi 32 x 32 (tilewidth ja tileheight). Tällöin kaava toimisi seuraavasti:
palikan_x = 325 - (325 mod 32) = 325 - 5 = 320
palikan_y = 131 - (131 mod 32) = 131 - 3 = 128
Ja vóila! Se on siinä! Palikka päätyy onnellisesti oikeaan ruutuun minne sen halutaankiin päätyvän!

Pöf, Cheery tuli ja pilas C-kaavan lausekkeella
int a = int( float i );
mutta ajattelin kuitenkin laittaa tämän tänne.

Ja sitten esimerkkiä (C):

grid.c

#include <stdio.h>
#include <time.h> // satunnaislukuja varten, muuten ei tarpeellinen tässä esimerkissä
#include <stdlib.h> // ks. edellinen kommentti


int main(void)
{
    int x,y,x_pos,y_pos,tilewidth,tileheight;
    tilewidth = 32; // määrittellään ruudun leveys
    tileheight = 32; // määritellään ruudun korkeus
    // satunnaislukugeneraattorin alustus
    time_t ran;
    time(&ran);
    srand(ran);
    x=rand() % 640;
    y=rand() % 480; // 640 ja 480 ovat alueen leveys ja pituus
    // määritellään ruudun vasen yläkulma, johon palikka (tai mikä nyt onkaan) sijoitaan
    x_pos = x - ( x % tilewidth );
    y_pos = y - ( y % tileheight );
    // ja nyt on sitten sijainti määritetty
    // tähän tulis sit omaa koodia
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta