|
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
|
|