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
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Ruch falowy i spiralny
Autor Wiadomość
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 24-11-2010, 17:59   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 
Me Gusta: PPC


Twoja ulubiona misja: Spying...
Pomógł: 1 raz
Wiek: 17
Dołączył: 01 Paź 2010
Posty: 108
Skąd: Stamtąd, gdzie ty.
Wysłany: 10-12-2010, 17:43   

A gdzie funkcja główna? :-?
_________________
Nazywajcie mnie KL582 (nick w Minecraft)
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 10-12-2010, 23:23   

@Korniszon: Sam sobie zrób na podstawie objaśnień.
_________________
1Tbps Project && Telecomix Network

 
 
     
Korniszon 
Me Gusta: PPC


Twoja ulubiona misja: Spying...
Pomógł: 1 raz
Wiek: 17
Dołączył: 01 Paź 2010
Posty: 108
Skąd: Stamtąd, gdzie ty.
Wysłany: 11-12-2010, 08:29   

@up: Dzięki
_________________
Nazywajcie mnie KL582 (nick w Minecraft)
 
     
Wyświetl posty z ostatnich:   
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012