| 7 | class DoublePendulum { |
| 8 | public: |
| 9 | void step() { |
| 10 | double dt1 = 6 / (m*l*l)*(2 * p1 - 3 * cos(t1 - t2)*p2) / (16 - 9 * cos(t1 - t2)*cos(t1 - t2)); |
| 11 | double dt2 = 6 / (m*l*l)*(8 * p2 - 3 * cos(t1 - t2)*p1) / (16 - 9 * cos(t1 - t2)*cos(t1 - t2)); |
| 12 | double dp1 = -.5*m*l*l*(dt1*dt2*sin(t1 - t2) + 3 * g / l * sin(t1)); |
| 13 | double dp2 = -.5*m*l*l*(-dt1 * dt2*sin(t1 - t2) + g / l * sin(t2)); |
| 14 | t1 += dt1 * dt; |
| 15 | t2 += dt2 * dt; |
| 16 | p1 += dp1 * dt; |
| 17 | p2 += dp2 * dt; |
| 18 | traceVec.push_back(point2()); |
| 19 | if (traceVec.size() > maxTraceSize) { |
| 20 | traceVec.erase(traceVec.begin()); |
| 21 | } |
| 22 | } |
| 23 | cv::Point2d point1() const { |
| 24 | return { l * sin(t1), l * -cos(t1) }; |
| 25 | } |
no test coverage detected