Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
My super move is not so super after all.
#1
Code:
extern void object::Main()
{
    move(5);
    smove(5);
}

void object::smove(int dist)
{
    point b = chkpos(dist), pos = this.position;
    //while(distance2d(b, this.position)>1) //Y U NO WORK
       while(true)
    {
        point c = chkpos(20);
        if(topo(c)>this.position.z){motor(0.1,0.1); adjalt(7,8);}
        else{motor(1,1);adjalt(4,5);}
    }
}

void object::adjalt(int min, int max)
{
    int alt = this.altitude;
    if(alt<min){while(alt<min){jet(1);alt = this.altitude;}}
    if(alt>max){while(alt>max){jet(-0.65);alt = this.altitude;}}
    if(alt<1 && alt<min){while(alt>min){motor(0.2, 0.2); jet(1);alt = this.altitude;}}
    jet(0);
}

point object::chkpos(int c) //winny bledow przy przelotach w okolicy wysokich struktur
{
    int a, b, ori = this.orientation;
    point t = this.position, p;
    if(0 <= ori && ori <= 90){ori = 90 - ori; a = c*cos(ori); b = c*sin(ori); p.x=(t.x+a); p.y=(t.y+b);} //I
    if(90 <= ori && ori <= 180){ori = 180 - ori;a = c*cos(ori); b = c*sin(ori); p.x=(t.x-a); p.y=(t.y+b);} // II
    if(180 <= ori && ori <= 270){ori = 270 - ori;a = c*cos(ori); b = c*sin(ori); p.x=(t.x-a); p.y=(t.y-b);} //III
    if(270 <= ori && ori <= 360){ori = 360 - ori;a = c*cos(ori); b = c*sin(ori); p.x=(t.x+a); p.y=(t.y-b);} //IV
    p.z = topo(p);
    return p;
}
I've tried everything I could. It should slow down and ascend higher if encountered terrain higher than it's altitude. Written for wasp. Help, I don't know what's wrong ;-;

It won't go for set distance, and sometimes it climbs obstacles properly, sometimes don't. Don't know why.
Si vis pace, para bellum.

#2
What is the chkpos function supposed to actually do? Return a point c meters in front of the robot? (I'm too lazy to try to understand the whole code Tongue)

If so... why not just
Code:
point object::chkpos(int c)
{
   point p;
   p.x = this.position.x + cos(this.orientation) * c;
   p.y = this.position.y + sin(this.orientation) * c;
   p.z = topo(p);
   return p;
}

I can't see any other immediate problems, other than the way you do the altitude choice could probably be done better - I'd just let the wasp stay at around z=max(topo(this.position), chkpos(20))+some_arbitrary_altitude_above_ground. Anyway, your code seems to work fine for me, unless you have some level with terrain changes big enough for it to break.
#3
It seems needlessly complicated to me for some reason.
You can use the wasp's velocity with the chkpos() to return a point x seconds in front of it.
Then adjust the motor to the ratio of these two points' topo().
For jet() I always do a single line:
Code:
jet(( targetPosZ - this.position.z ) / smoothingFactor)
My Code Battle League program: MhrodeBattle.txt

Welcome back, Mrocza. You last visited: Sunday, July 7th, 2013, 02:12 pm 
http://imgur.com/L3Y8bQz
#4
(03-28-2017, 07:57 AM)Mrocza Wrote: You can use the wasp's velocity with the chkpos() to return a point x seconds in front of it.
Oh, I totally forgot object.velocity is now a thing... and I'm the one who implemented it Tongue This solution would be even better probably


Forum Jump:


Users browsing this thread: 2 Guest(s)