// in global 3D coordinate system bp::tuple computeShearAndBending() { PolyVec Vx, Vy, Fz, Mx, My, Tz; beam->shearAndBending(Vx, Vy, Fz, Mx, My, Tz); bp::list Vx0, Vy0, Fz0, Mx0, My0, Tz0; int n = beam->getNumNodes() - 1; for(int i = 0; i < n; i++) { Vx0.append(Vx(i).eval(0.0)); Vy0.append(Vy(i).eval(0.0)); Fz0.append(Fz(i).eval(0.0)); Mx0.append(-My(i).eval(0.0)); // translate back to global coordinates My0.append(Mx(i).eval(0.0)); // translate back to global coordinates Tz0.append(Tz(i).eval(0.0)); } Vx0.append(Vx(n-1).eval(1.0)); Vy0.append(Vy(n-1).eval(1.0)); Fz0.append(Fz(n-1).eval(1.0)); Mx0.append(-My(n-1).eval(1.0)); // translate back to global coordinates My0.append(Mx(n-1).eval(1.0)); // translate back to global coordinates Tz0.append(Tz(n-1).eval(1.0)); return bp::make_tuple(bpn::array(Vx0), bpn::array(Vy0), bpn::array(Fz0), bpn::array(Mx0), bpn::array(My0), bpn::array(Tz0)); }
void foo(PV const& pv) { PV tmp; //tmp.front() = pv.front(); //tmp.push_back(&pv.front()); My const &mc1 = pv[0]; PV tmp2 = pv; My &mc2 = tmp2[0]; boost::range::copy(pv, boost::ptr_container::ptr_back_inserter(tmp)); //pv[0] = My(); My const &mc3 = tmp[0]; tmp[0] = My(1); My const &mc4 = tmp[0]; My const &mc5 = pv[0]; }
void cal_fun(vector<QPointF> point_v, vector<Func> &func_v) { if(point_v.size() <= 2) { func_v.clear(); return; } int n = point_v.size(); func_v.clear(); func_v.resize(n-1); vector<double> Mx(n); vector<double> My(n); vector<double> A(n-2); vector<double> B(n-2); vector<double> C(n-2); vector<double> Dx(n-2); vector<double> Dy(n-2); vector<double> h(n-1); for(int i = 0; i < n-1; i++) { h[i] = sqrt(pow(point_v[i+1].x() - point_v[i].x(), 2) + pow(point_v[i+1].y() - point_v[i].y(), 2)); } for(int i = 0; i < n-2; i++) { A[i] = h[i]; B[i] = 2*(h[i]+h[i+1]); C[i] = h[i+1]; Dx[i] = 6*( (point_v[i+2].x() - point_v[i+1].x())/h[i+1] - (point_v[i+1].x() - point_v[i].x())/h[i] ); Dy[i] = 6*( (point_v[i+2].y() - point_v[i+1].y())/h[i+1] - (point_v[i+1].y() - point_v[i].y())/h[i] ); } //TDMA C[0] = C[0] / B[0]; Dx[0] = Dx[0] / B[0]; Dy[0] = Dy[0] / B[0]; for(int i = 1; i < n-2; i++) { double tmp = B[i] - A[i]*C[i-1]; C[i] = C[i] / tmp; Dx[i] = (Dx[i] - A[i]*Dx[i-1]) / tmp; Dy[i] = (Dy[i] - A[i]*Dy[i-1]) / tmp; } Mx[n-2] = Dx[n-3]; My[n-2] = Dy[n-3]; for(int i = n-4; i >= 0; i--) { Mx[i+1] = Dx[i] - C[i]*Mx[i+2]; My[i+1] = Dy[i] - C[i]*My[i+2]; } Mx[0] = 0; Mx[n-1] = 0; My[0] = 0; My[n-1] = 0; for(int i = 0; i < n-1; i++) { func_v[i].a_x = point_v[i].x(); func_v[i].b_x = (point_v[i+1].x() - point_v[i].x())/h[i] - (2*h[i]*Mx[i] + h[i]*Mx[i+1]) / 6; func_v[i].c_x = Mx[i]/2; func_v[i].d_x = (Mx[i+1] - Mx[i]) / (6*h[i]); func_v[i].a_y = point_v[i].y(); func_v[i].b_y = (point_v[i+1].y() - point_v[i].y())/h[i] - (2*h[i]*My[i] + h[i]*My[i+1]) / 6; func_v[i].c_y = My[i]/2; func_v[i].d_y = (My[i+1] - My[i]) / (6*h[i]); func_v[i].h = h[i]; } }