Last active
August 29, 2015 14:07
-
-
Save cjxgm/2f0ca59a0c2db6bdd558 to your computer and use it in GitHub Desktop.
a sine wave oscillator without a std::sin call nor a sine table
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <cstdlib> | |
| #include <thread> | |
| #include <chrono> | |
| #include <iostream> | |
| using std::cout; | |
| using std::endl; | |
| static void rep(char ch, int n) | |
| { | |
| while (n--) cout << ch; | |
| } | |
| static void draw_bar(double x, int width=40) | |
| { | |
| x = (x + 1.0) / 2.0; | |
| int pos = x * width; | |
| if (pos < 0) pos = 0; | |
| if (pos >= width) pos = width-1; | |
| auto halfw = width >> 1; | |
| auto pre = std::min(pos, halfw); | |
| auto ndot = std::abs(pos - halfw) + 1; | |
| auto post = width - std::max(pos, halfw) - 1; | |
| rep(' ', pre ); | |
| rep('*', ndot); | |
| rep(' ', post); | |
| } | |
| struct spring | |
| { | |
| spring(double k=0.5, double velocity={}) | |
| : k{k}, lx{-velocity} {} | |
| double pos() const noexcept { return x; } | |
| void pluck(double nx) noexcept { x = nx; } | |
| void mass(double nk) noexcept { k = nk; } | |
| void update() noexcept | |
| { | |
| auto nx = (2-k)*x-lx; | |
| lx = x; | |
| x = nx; | |
| } | |
| void operator()() noexcept { update(); } | |
| private: | |
| double x{}; | |
| double k; | |
| double lx; | |
| }; | |
| int main() | |
| { | |
| spring s{0.001, 0.03}; | |
| for (auto step=0; ; step++) { | |
| draw_bar(s.pos(), 60); | |
| cout << step << ": " << s.pos() << endl; | |
| s(); | |
| using namespace std::literals; | |
| std::this_thread::sleep_for(30ms); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| * 0: 0 | |
| * 1: 0.03 | |
| ** 2: 0.05997 | |
| *** 3: 0.08988 | |
| **** 4: 0.1197 | |
| ***** 5: 0.149401 | |
| ****** 6: 0.178952 | |
| ******* 7: 0.208324 | |
| ******** 8: 0.237488 | |
| ******** 9: 0.266414 | |
| ********* 10: 0.295074 | |
| ********** 11: 0.323439 | |
| *********** 12: 0.35148 | |
| ************ 13: 0.37917 | |
| ************* 14: 0.40648 | |
| ************** 15: 0.433385 | |
| ************** 16: 0.459856 | |
| *************** 17: 0.485867 | |
| **************** 18: 0.511392 | |
| ***************** 19: 0.536405 | |
| ***************** 20: 0.560883 | |
| ****************** 21: 0.584799 | |
| ******************* 22: 0.608131 | |
| ******************* 23: 0.630854 | |
| ******************** 24: 0.652947 | |
| ********************* 25: 0.674387 | |
| ********************* 26: 0.695152 | |
| ********************** 27: 0.715222 | |
| *********************** 28: 0.734577 | |
| *********************** 29: 0.753198 | |
| ************************ 30: 0.771065 | |
| ************************ 31: 0.788161 | |
| ************************* 32: 0.804469 | |
| ************************* 33: 0.819972 | |
| ************************** 34: 0.834656 | |
| ************************** 35: 0.848505 | |
| ************************** 36: 0.861505 | |
| *************************** 37: 0.873644 | |
| *************************** 38: 0.884909 | |
| *************************** 39: 0.895289 | |
| **************************** 40: 0.904774 | |
| **************************** 41: 0.913355 | |
| **************************** 42: 0.921021 | |
| **************************** 43: 0.927767 | |
| ***************************** 44: 0.933585 | |
| ***************************** 45: 0.93847 | |
| ***************************** 46: 0.942416 | |
| ***************************** 47: 0.945419 | |
| ***************************** 48: 0.947478 | |
| ***************************** 49: 0.948588 | |
| ***************************** 50: 0.948751 | |
| ***************************** 51: 0.947964 | |
| ***************************** 52: 0.946229 | |
| ***************************** 53: 0.943548 | |
| ***************************** 54: 0.939924 | |
| ***************************** 55: 0.93536 | |
| **************************** 56: 0.92986 | |
| **************************** 57: 0.923431 | |
| **************************** 58: 0.916078 | |
| **************************** 59: 0.907809 | |
| *************************** 60: 0.898632 | |
| *************************** 61: 0.888556 | |
| *************************** 62: 0.877592 | |
| ************************** 63: 0.865751 | |
| ************************** 64: 0.853043 | |
| ************************** 65: 0.839483 | |
| ************************* 66: 0.825083 | |
| ************************* 67: 0.809858 | |
| ************************ 68: 0.793823 | |
| ************************ 69: 0.776995 | |
| *********************** 70: 0.759389 | |
| *********************** 71: 0.741024 | |
| ********************** 72: 0.721918 | |
| ********************** 73: 0.70209 | |
| ********************* 74: 0.68156 | |
| ******************** 75: 0.660348 | |
| ******************** 76: 0.638476 | |
| ******************* 77: 0.615966 | |
| ****************** 78: 0.59284 | |
| ****************** 79: 0.56912 | |
| ***************** 80: 0.544832 | |
| **************** 81: 0.519999 | |
| *************** 82: 0.494645 | |
| *************** 83: 0.468798 | |
| ************** 84: 0.442481 | |
| ************* 85: 0.415722 | |
| ************ 86: 0.388547 | |
| *********** 87: 0.360984 | |
| ********** 88: 0.333059 | |
| ********** 89: 0.304802 | |
| ********* 90: 0.27624 | |
| ******** 91: 0.247401 | |
| ******* 92: 0.218315 | |
| ****** 93: 0.189011 | |
| ***** 94: 0.159518 | |
| **** 95: 0.129865 | |
| **** 96: 0.100082 | |
| *** 97: 0.0701998 | |
| ** 98: 0.0402469 | |
| * 99: 0.0102538 | |
| ** 100: -0.0197496 | |
| *** 101: -0.0497332 | |
| **** 102: -0.0796671 | |
| ***** 103: -0.109521 | |
| ****** 104: -0.139266 | |
| ******* 105: -0.168871 | |
| ******* 106: -0.198308 | |
| ******** 107: -0.227546 | |
| ********* 108: -0.256557 | |
| ********** 109: -0.285311 | |
| *********** 110: -0.31378 | |
| ************ 111: -0.341935 | |
| ************* 112: -0.369748 | |
| ************* 113: -0.397192 | |
| ************** 114: -0.424238 | |
| *************** 115: -0.45086 | |
| **************** 116: -0.477031 | |
| ***************** 117: -0.502725 | |
| ***************** 118: -0.527916 | |
| ****************** 119: -0.55258 | |
| ******************* 120: -0.57669 | |
| ******************** 121: -0.600225 | |
| ******************** 122: -0.623159 | |
| ********************* 123: -0.645469 | |
| ********************** 124: -0.667135 | |
| ********************** 125: -0.688133 | |
| *********************** 126: -0.708443 | |
| *********************** 127: -0.728044 | |
| ************************ 128: -0.746918 | |
| ************************ 129: -0.765045 | |
| ************************* 130: -0.782406 | |
| ************************* 131: -0.798985 | |
| ************************** 132: -0.814765 | |
| ************************** 133: -0.829731 | |
| *************************** 134: -0.843867 | |
| *************************** 135: -0.857158 | |
| **************************** 136: -0.869593 | |
| **************************** 137: -0.881158 | |
| **************************** 138: -0.891842 | |
| ***************************** 139: -0.901634 | |
| ***************************** 140: -0.910525 | |
| ***************************** 141: -0.918505 | |
| ***************************** 142: -0.925566 | |
| ***************************** 143: -0.931702 | |
| ****************************** 144: -0.936906 | |
| ****************************** 145: -0.941173 | |
| ****************************** 146: -0.944499 | |
| ****************************** 147: -0.946881 | |
| ****************************** 148: -0.948315 | |
| ****************************** 149: -0.948802 | |
| ****************************** 150: -0.948339 | |
| ****************************** 151: -0.946929 | |
| ****************************** 152: -0.944571 | |
| ****************************** 153: -0.941269 | |
| ****************************** 154: -0.937025 | |
| ***************************** 155: -0.931845 | |
| ***************************** 156: -0.925732 | |
| ***************************** 157: -0.918694 | |
| ***************************** 158: -0.910737 | |
| ***************************** 159: -0.90187 | |
| **************************** 160: -0.8921 | |
| **************************** 161: -0.881439 | |
| **************************** 162: -0.869896 | |
| *************************** 163: -0.857483 | |
| *************************** 164: -0.844212 | |
| ************************** 165: -0.830098 | |
| ************************** 166: -0.815153 | |
| ************************* 167: -0.799393 | |
| ************************* 168: -0.782834 | |
| ************************ 169: -0.765492 | |
| ************************ 170: -0.747384 | |
| *********************** 171: -0.72853 | |
| *********************** 172: -0.708946 | |
| ********************** 173: -0.688654 | |
| ********************** 174: -0.667673 | |
| ********************* 175: -0.646024 | |
| ******************** 176: -0.623729 | |
| ******************** 177: -0.600811 | |
| ******************* 178: -0.577291 | |
| ****************** 179: -0.553195 | |
| ***************** 180: -0.528545 | |
| ***************** 181: -0.503367 | |
| **************** 182: -0.477685 | |
| *************** 183: -0.451526 | |
| ************** 184: -0.424915 | |
| ************* 185: -0.397879 | |
| ************* 186: -0.370445 | |
| ************ 187: -0.342641 | |
| *********** 188: -0.314494 | |
| ********** 189: -0.286033 | |
| ********* 190: -0.257286 | |
| ******** 191: -0.228281 | |
| ******* 192: -0.199048 | |
| ******* 193: -0.169616 | |
| ****** 194: -0.140015 | |
| ***** 195: -0.110273 | |
| **** 196: -0.0804214 | |
| *** 197: -0.0504891 | |
| ** 198: -0.0205064 | |
| * 199: 0.00949685 | |
| ** 200: 0.0394906 | |
| *** 201: 0.0694449 | |
| *** 202: 0.0993297 | |
| **** 203: 0.129115 | |
| ***** 204: 0.158772 | |
| ****** 205: 0.188269 | |
| ******* 206: 0.217578 | |
| ******** 207: 0.24667 | |
| ********* 208: 0.275515 | |
| ********** 209: 0.304085 | |
| ********** 210: 0.33235 | |
| *********** 211: 0.360283 | |
| ************ 212: 0.387856 | |
| ************* 213: 0.415041 | |
| ************** 214: 0.441811 | |
| *************** 215: 0.468139 | |
| *************** 216: 0.493999 | |
| **************** 217: 0.519365 | |
| ***************** 218: 0.544212 | |
| ****************** 219: 0.568514 | |
| ****************** 220: 0.592248 | |
| ******************* 221: 0.61539 | |
| ******************** 222: 0.637916 | |
| ******************** 223: 0.659805 | |
| ********************* 224: 0.681033 | |
| ********************** 225: 0.701581 | |
| ********************** 226: 0.721427 | |
| *********************** 227: 0.740551 | |
| *********************** 228: 0.758935 | |
| ************************ 229: 0.77656 | |
| ************************ 230: 0.793409 | |
| ************************* 231: 0.809464 | |
| ************************* 232: 0.824709 | |
| ************************** 233: 0.83913 | |
| ************************** 234: 0.852712 | |
| ************************** 235: 0.865441 | |
| *************************** 236: 0.877304 | |
| *************************** 237: 0.888291 | |
| *************************** 238: 0.898389 | |
| **************************** 239: 0.907588 | |
| **************************** 240: 0.91588 | |
| **************************** 241: 0.923257 | |
| **************************** 242: 0.929709 | |
| ***************************** 243: 0.935233 | |
| ***************************** 244: 0.939821 | |
| ***************************** 245: 0.943469 | |
| ***************************** 246: 0.946173 | |
| ***************************** 247: 0.947932 | |
| ***************************** 248: 0.948742 | |
| ***************************** 249: 0.948604 | |
| ***************************** 250: 0.947517 | |
| ***************************** 251: 0.945483 | |
| ***************************** 252: 0.942503 | |
| ***************************** 253: 0.938581 | |
| ***************************** 254: 0.93372 | |
| **************************** 255: 0.927925 | |
| **************************** 256: 0.921203 | |
| **************************** 257: 0.913559 | |
| **************************** 258: 0.905002 | |
| *************************** 259: 0.89554 | |
| *************************** 260: 0.885182 | |
| *************************** 261: 0.873939 | |
| ************************** 262: 0.861822 | |
| ************************** 263: 0.848843 | |
| ************************** 264: 0.835015 | |
| ************************* 265: 0.820353 | |
| ************************* 266: 0.80487 | |
| ************************ 267: 0.788582 | |
| ************************ 268: 0.771506 | |
| *********************** 269: 0.753658 | |
| *********************** 270: 0.735056 | |
| ********************** 271: 0.715719 | |
| ********************* 272: 0.695667 | |
| ********************* 273: 0.674919 | |
| ******************** 274: 0.653496 | |
| ******************* 275: 0.63142 | |
| ******************* 276: 0.608712 | |
| ****************** 277: 0.585395 | |
| ***************** 278: 0.561493 | |
| ***************** 279: 0.53703 | |
| **************** 280: 0.512029 | |
| *************** 281: 0.486517 | |
| ************** 282: 0.460518 | |
| ************** 283: 0.434058 | |
| ************* 284: 0.407164 | |
| ************ 285: 0.379864 | |
| *********** 286: 0.352183 | |
| ********** 287: 0.32415 | |
| ********* 288: 0.295793 | |
| ********* 289: 0.26714 | |
| ******** 290: 0.23822 | |
| ******* 291: 0.209062 | |
| ****** 292: 0.179695 | |
| ***** 293: 0.150148 | |
| **** 294: 0.120451 | |
| *** 295: 0.0906336 | |
| ** 296: 0.0607255 | |
| * 297: 0.0307566 | |
| * 298: 0.000756992 | |
| ** 299: -0.0292434 | |
| *** 300: -0.0592145 | |
| **** 301: -0.0891264 | |
| ***** 302: -0.118949 | |
| ****** 303: -0.148653 | |
| ******* 304: -0.178208 | |
| ******** 305: -0.207585 | |
| ********* 306: -0.236755 | |
| ********* 307: -0.265687 | |
| ********** 308: -0.294354 | |
| *********** 309: -0.322727 | |
| ************ 310: -0.350777 | |
| ************* 311: -0.378476 | |
| ************** 312: -0.405796 | |
| ************** 313: -0.432711 | |
| *************** 314: -0.459193 | |
| **************** 315: -0.485216 | |
| ***************** 316: -0.510754 | |
| ****************** 317: -0.535781 | |
| ****************** 318: -0.560272 | |
| ******************* 319: -0.584203 | |
| ******************** 320: -0.60755 | |
| ******************** 321: -0.630289 | |
| ********************* 322: -0.652398 | |
| ********************** 323: -0.673854 | |
| ********************** 324: -0.694637 | |
| *********************** 325: -0.714725 | |
| ************************ 326: -0.734098 | |
| ************************ 327: -0.752737 | |
| ************************* 328: -0.770623 | |
| ************************* 329: -0.787739 | |
| ************************** 330: -0.804067 | |
| ************************** 331: -0.819591 | |
| *************************** 332: -0.834295 | |
| *************************** 333: -0.848166 | |
| *************************** 334: -0.861187 | |
| **************************** 335: -0.873348 | |
| **************************** 336: -0.884636 | |
| **************************** 337: -0.895038 | |
| ***************************** 338: -0.904546 | |
| ***************************** 339: -0.913149 | |
| ***************************** 340: -0.920839 | |
| ***************************** 341: -0.927608 | |
| ****************************** 342: -0.93345 | |
| ****************************** 343: -0.938358 | |
| ****************************** 344: -0.942328 | |
| ****************************** 345: -0.945355 | |
| ****************************** 346: -0.947437 | |
| ****************************** 347: -0.948572 | |
| ****************************** 348: -0.948758 | |
| ****************************** 349: -0.947995 | |
| ****************************** 350: -0.946285 | |
| ****************************** 351: -0.943628 | |
| ****************************** 352: -0.940027 | |
| ****************************** 353: -0.935487 | |
| ***************************** 354: -0.93001 | |
| ***************************** 355: -0.923604 | |
| ***************************** 356: -0.916275 | |
| ***************************** 357: -0.908029 | |
| **************************** 358: -0.898875 | |
| **************************** 359: -0.888822 | |
| **************************** 360: -0.87788 | |
| *************************** 361: -0.86606 | |
| *************************** 362: -0.853375 | |
| *************************** 363: -0.839836 | |
| ************************** 364: -0.825457 | |
| ************************** 365: -0.810252 | |
| ************************* 366: -0.794238 | |
| ************************* 367: -0.777429 | |
| ************************ 368: -0.759843 | |
| ************************ 369: -0.741497 | |
| *********************** 370: -0.722409 | |
| *********************** 371: -0.702599 | |
| ********************** 372: -0.682086 | |
| ********************* 373: -0.660892 | |
| ********************* 374: -0.639036 | |
| ******************** 375: -0.616542 | |
| ******************* 376: -0.59343 | |
| ******************* 377: -0.569726 | |
| ****************** 378: -0.545451 | |
| ***************** 379: -0.520632 | |
| **************** 380: -0.495291 | |
| **************** 381: -0.469456 | |
| *************** 382: -0.44315 | |
| ************** 383: -0.416402 | |
| ************* 384: -0.389238 | |
| ************ 385: -0.361684 | |
| ************ 386: -0.333768 | |
| *********** 387: -0.305519 | |
| ********** 388: -0.276964 | |
| ********* 389: -0.248132 | |
| ******** 390: -0.219052 | |
| ******* 391: -0.189753 | |
| ****** 392: -0.160264 | |
| ***** 393: -0.130615 | |
| ***** 394: -0.100835 | |
| **** 395: -0.0709547 | |
| *** 396: -0.0410032 | |
| ** 397: -0.0110107 | |
| * 398: 0.0189927 | |
| ** 399: 0.0489772 | |
| *** 400: 0.0789128 | |
| **** 401: 0.108769 | |
| ***** 402: 0.138517 | |
| ****** 403: 0.168127 | |
| ****** 404: 0.197568 | |
| ******* 405: 0.226811 | |
| ******** 406: 0.255828 | |
| ********* 407: 0.284589 | |
| ********** 408: 0.313065 | |
| *********** 409: 0.341229 | |
| ************ 410: 0.369051 | |
| ************ 411: 0.396504 | |
| ************* 412: 0.423561 | |
| ************** 413: 0.450194 | |
| *************** 414: 0.476376 | |
| ^C |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment