Ejemplo n.º 1
0
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;
    }
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
//--------------------------------------------
//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;
	}
}