void MultiLineObj::ClosedSplineToPolygon (Coord* cpx, Coord* cpy, int cpcount){ register int cpi; if (cpcount < 3) { _x = cpx; _y = cpy; _count = cpcount; } else { mlcount = 0; CalcSection( cpx[cpcount - 1], cpy[cpcount - 1], cpx[0], cpy[0], cpx[1], cpy[1], cpx[2], cpy[2] ); for (cpi = 1; cpi < cpcount - 2; ++cpi) { CalcSection( cpx[cpi - 1], cpy[cpi - 1], cpx[cpi], cpy[cpi], cpx[cpi + 1], cpy[cpi + 1], cpx[cpi + 2], cpy[cpi + 2] ); } CalcSection( cpx[cpi - 1], cpy[cpi - 1], cpx[cpi], cpy[cpi], cpx[cpi + 1], cpy[cpi + 1], cpx[0], cpy[0] ); CalcSection( cpx[cpi], cpy[cpi], cpx[cpi + 1], cpy[cpi + 1], cpx[0], cpy[0], cpx[1], cpy[1] ); _x = mlx; _y = mly; _count = mlcount; } }
void Pipe::SectionInfo(StrArray<8> &array,double dTime) { array.Data(GetKey(),0); array.Data(float(Len()),1); array.Data(float(WaveSpeed()),2); array.Data(float(CalcSection(dTime)),3); int nNum = 0; double dError = 0; double dWave = 0; CalcSection(nNum,dError,dTime); dWave = (Len()/nNum) / dTime; array.Data(nNum,4); array.Data(float(dError),5); array.Data(float(dWave),6); }
//-------------------------------------------- //Parameters: nNum[OUT] 管道分段数取整 // dError[OUT] 误差 // dTimeStep[IN] 理想分段时间步长 // dMaxError[IN] 允许最大误差 // return: 如果误差小于等于最大误差返回TURE // Memo: // //--------------------------------------------- BOOL Pipe::CalcSection(int &nNum,double &dError,double dTimeStep,double dMaxError) { double dSectoin = CalcSection(dTimeStep); if(dSectoin - int(dSectoin) >= 0.5) { nNum = int(dSectoin) + 1; } else { nNum = int(dSectoin); } dError = (nNum - dSectoin)*100 / nNum; if(fabs(dError) <= dMaxError) { return TRUE; } else { return FALSE; } }