Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 
Polski Portal COLOBOTa
COLOBOT Polish Portal

Ciekawe programy - Ruch falowy i spiralny

Berserker - 24-11-2010, 17:59
Temat postu: Ruch falowy i spiralny
Prezentuje efekt nudy i tego co wynioslem z ostatnich lekcji fizyki czyli zmierzanie do celu poruszajac sie do niego "fala" albo zataczajac wokol niego spirale.
Kod:
void object::wave(point c, float A, float len, float p, int sgn, float dist)
{
    float dir, alfa = orient(c);
    float x, y;
    float k;
    point dest;
    k = 360/len;
    x = distance2d(position, c);
    while(distance2d(position, c) > dist)
    {
        dest = c;
        dest.x += x*cos(alfa);
        dest.y += x*sin(alfa);
        y = sgn*A*sin(k*x);
        dest.x += y*sin(alfa);
        dest.y += y*cos(alfa);
        while(distance2d(dest, position) > 2)
        {
            dir = direction(dest);
            motor(1-dir/45, 1+dir/45);
        }
        x -= p;
        produce(position, orientation, TNT, "");
    }
}
void object::arch(point center, int n, float p, int sgn, float dist)
{
    if(pow(sgn, 2) != 1 || p <= 0)
    {
        throw(1);
        return;
    }
    float k = 360*n+orient(center);
    float gamma = k;
    float alfa;
    float r = distance2d(center, position);
    float a = r/gamma;
    point dest;
    float dir;
    do
    {
       
        gamma -= p;
        dest = center;
        r = gamma*a;
        alfa = k-sgn*(k-gamma);
        dest.x += r*cos(alfa);
        dest.y += r*sin(alfa);
        while(distance2d(dest, position) > 2)
        {
            dir = direction(dest);
            motor(1-dir/45, 1+dir/45);
        }
        produce(position, orientation, TNT, "");
    }
    while(distance2d(center, position) > dist);
}
float object::orient(point center)
{
    float angle;
    angle = orientation+direction(center)+180;
    while(angle > 360) angle -= 360;
    while(angle < 0) angle += 360;
    return angle;
}

Krotkie objasnienie argumentow
c/center - pozycja docelowa.
n - ilosc okrazen w trybie "mniej wiecej"
p - dokladnosc
A - amplituda fali
l - dlugosc fali
sgn - kierunek (prawo/lewo)
dist - odleglosc od celu wymagana by zakonczyc funkcje

Moze sie komus przyda, ja uzylem tego do robienia programow dla os.

Korniszon - 10-12-2010, 17:43

A gdzie funkcja główna? :-?
adiblol - 10-12-2010, 23:23

@Korniszon: Sam sobie zrób na podstawie objaśnień.
Korniszon - 11-12-2010, 08:29

@up: Dzięki

Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group