s-shape control
Dependents: wheel_test7 2019NHK_A_manual_red 2019NHK_A_manual_blue
Diff: proto01.cpp
- Revision:
- 5:8dce5092a719
- Parent:
- 4:40c5ac00bb5b
- Child:
- 6:16a24200ab68
--- a/proto01.cpp Mon Aug 26 06:10:05 2019 +0000 +++ b/proto01.cpp Wed Sep 04 10:01:50 2019 +0000 @@ -3,11 +3,11 @@ Proto1::Proto1(double accdis_, double decdis_, double maxspeed_, double s_vector_) { accdis = accdis_; - accdis2 = accdis; + accdis2 = accdis_; decdis = decdis_; - decdis2 = decdis; + decdis2 = decdis_; maxspeed = maxspeed_; - maxspeed2 = maxspeed; + maxspeed2 = maxspeed_; s_vector = s_vector_; } @@ -21,17 +21,17 @@ decdis = decdis2; consdis = targetDis - accdis - decdis; } else { - maxspeed /= 2; - accdis = targetDis / 2; - decdis = targetDis / 2; - consdis = 0; + maxspeed = maxspeed2 / 2.0; + accdis = targetDis / 2.0; + decdis = targetDis / 2.0; + consdis = 0.0; } /*秘伝のコード*/ /*いじるな*/ accsec = 2.0 / maxspeed * accdis; decsec = 2.0 / maxspeed * decdis; } -void Proto1::target_xy(int targetx_, int targety_, int startx_, int starty_) +void Proto1::targetXY(int targetx_, int targety_, int startx_, int starty_) { targetDis = hypot((float)(startx_-targetx_), (float)(starty_-targety_)); startx = startx_; @@ -44,10 +44,10 @@ decdis = decdis2; consdis = targetDis - accdis - decdis; } else { - maxspeed /= 2; - accdis = targetDis / 2; - decdis = targetDis / 2; - consdis = 0; + maxspeed = maxspeed2 / 2.0; + accdis = targetDis / 2.0; + decdis = targetDis / 2.0; + consdis = 0.0; } /*秘伝のコード*/ /*いじるな*/ accsec = 2.0 / maxspeed * accdis; @@ -60,7 +60,7 @@ nowDis = now - start; } -void Proto1::Input_nowxy(int now_x, int now_y) +void Proto1::Input_nowXY(int now_x, int now_y) { nowx = now_x; nowy = now_y; @@ -70,17 +70,25 @@ void Proto1::calculate() { - if (nowDis < accdis) { - counter = sqrt(2.0*accsec/maxspeed*nowDis); - vector = s_vector + (-1 * sin((2.0*PI/accsec)*counter) + (2.0*PI/accsec)*counter) / ((2.0*PI)/(maxspeed-s_vector)); - } else if (nowDis >= accdis && nowDis < accdis+consdis) { - vector = maxspeed; - } else if (nowDis > (accdis+consdis)) { - counter = sqrt(2.0*decsec/maxspeed*fabs(targetDis-nowDis)); - vector = (-1 * sin((2.0*PI/decsec)*counter) + (2.0*PI/decsec)*counter) / (2.0*PI/maxspeed); - } else { - vector = 0; - } +// if(targetDis <= (accdis+decdis)){ +// if(nowDis >= (accdis+decdis)){ +// vector = 0; +// }else{ +// vector = maxspeed - s_vector; +// } +// }else{ + if (nowDis < accdis) { + counter = sqrt(2.0*accsec/maxspeed*fabs(nowDis)); + vector = s_vector + (-1 * sin((2.0*PI/accsec)*counter) + (2.0*PI/accsec)*counter) / ((2.0*PI)/(maxspeed-s_vector)); + } else if (nowDis >= accdis && nowDis < accdis+consdis) { + vector = maxspeed; + } else if (nowDis > (accdis+consdis)) { + counter = sqrt(2.0*decsec/maxspeed*fabs(targetDis-nowDis)); + vector = (-1 * sin((2.0*PI/decsec)*counter) + (2.0*PI/decsec)*counter) / (2.0*PI/maxspeed); + } else { + vector = 0; + } +// } } double Proto1::getvalue()