vprut1 (matrix A) { int n, i, j, m, lf; real er, x; n = DIM(A,0); MATRIX (VP, MAX, n, 1) MATRIX (L, MAX*MAX, n, n) MATRIX (R, MAX*MAX, n, n) m = 0; for (i=0; i<n; i++) VAL1(VP,i) = 0; er = 1; lf = 1; while ((m < 50) && /* (er > 0.5) */ lf ) { lr (A, L, R); printf ("L : "); print_matrix (L); printf ("R : "); print_matrix (R); prod_matrix (L, R, A); printf ("LR: "); print_matrix (A); prod_matrix (R, L, A); printf ("A : "); print_matrix (A); gets (buf); er = 0; m++; for (i=0; i<n; i++) for (j=0; j<n; j++) { if (j < i) { x = fabs (VAL2(A,i,j)); if (x > er) er = x; } } lf = 0; for (i=0; i<n; i++) { if (fabs(VAL2(A,i,i)-VAL1(VP,i)) > 1e-4) lf = 1; } for (i=0; i<n; i++) VAL1(VP,i) = VAL2(A,i,i); } if (m == 50) printf ("Non convergence\n"); else { print_matrix (A); } ENDMAT ENDMAT ENDMAT }
vprut (matrix A1, matrix VP) { int n, i, status; n = DIM(A1,0); MATRIX(A,MAX*MAX,n,n); status = vprut1 (A); for (i=0; i<n; i++) VAL1(VP,i) = VAL2(A,i,i); return status; ENDMAT }
void FORTE_FB_HYST_3::alg_REQ(void){ CIEC_REAL X; X = HYS()*0.5f; if((IN() < VAL1()-X)){ Q1() = true; } else if((IN() > VAL1() + X)){ Q1() = false; }; if((IN() < VAL2()-X)){ Q2() = false; } else if((IN() > VAL2()+X)){ Q2() = true; }; }
pivot (matrix A1, matrix B) { int n, i, j, k; real p, q; n = DIM (A1, 0); MATRIX (A, MAX*MAX, n, n); copy_matrix (A1, A); for (i=0; i<n; i++) for (j=0; j<n; j++) { VAL2 (B, i, j) = i == j; } trace_matrix ("B initiale", B); for (i=0; i<n; i++) { p = VAL2 (A, i, i); /* ajouter traitement cas p = 0 */ /* on divise la 1ere ligne par le pivot */ for (j=0; j<n; j++) { VAL2 (A, i, j) /= p; VAL2 (B, i, j) /= p; } trace_matrix ("A", A); trace_matrix ("B", B); for (k=0; k<n; k++) if (k != i) { q = VAL2 (A, k, i); for (j=0; j<n; j++) { VAL2 (A, k, j) -= q * VAL2 (A, i, j); VAL2 (B, k, j) -= q * VAL2 (B, i, j); } } trace_matrix ("A", A); trace_matrix ("B", B); } ENDMAT }
GForce::~GForce() { // Rewrite the prefs to disk... mPrefs.SetPref( VAL('S','S','v','r'), mScrnSaverDelay / 60.0 ); mPrefs.SetPref( VAL('T','r','H','i'), mTransitionHi ); mPrefs.SetPref( VAL('T','r','L','o'), mTransitionLo ); mPrefs.SetPref( VAL('M','S','c','l'), mMagScale * 1000 ); mPrefs.SetPref( VAL('C','I','n','t'), mColorIntervalStr ); mPrefs.SetPref( VAL('W','I','n','t'), mShapeIntervalStr ); mPrefs.SetPref( VAL('D','I','n','t'), mFieldIntervalStr ); mPrefs.SetPref( VAL('S','t','p','s'), mNum_S_Steps ); mPrefs.SetPref( VAL('P','D','u','r'), mParticleDuration ); mPrefs.SetPref( VAL('P','P','r','b'), mParticleProbability ); mPrefs.SetPref( VAL('N','o','B','o'), mBorderlessWind ); mPrefs.SetPref( VAL('K','y','b','d'), mHandleKeys ); mPrefs.SetPref( VAL('F','S','_','X'), mFullscreenSize.h ); mPrefs.SetPref( VAL('F','S','_','Y'), mFullscreenSize.v ); mPrefs.SetPref( VAL('F','S','_','D'), mFullscreenDepth ); mPrefs.SetPref( VAL('F','S','_','#'), mFullscreenDevice ); mPrefs.SetPref( VAL('N','o','r','m'), mNormalizeInput ); mPrefs.SetPref( VAL('M','a','x','Y'), mMaxSize.v ); mPrefs.SetPref( VAL('M','a','x','X'), mMaxSize.h ); mPrefs.SetPref( VAL('T','P','o','s'), mTrackTextPosMode ); mPrefs.SetPref( VAL('T','S','z','e'), mTrackTextSize ); mPrefs.SetPref( VAL('T','F','n','t'), mTrackFont ); mPrefs.SetPref( VAL('T','S','t','r'), mTrackMetaText ); mPrefs.SetPref( VAL2('T','?'), mTrackTextStartStr ); mPrefs.SetPref( VAL('T','D','u','r'), mTrackTextDurationStr ); mPrefs.SetPref( VAL('K','M','a','p'), mKeyMap ); mPrefs.SetPref( VAL('P','_','O','n'), mParticlesOn ? 1 : 0 ); mPrefs.SetPref( VAL('S','h','w','T'), mNewConfigNotify ? 1 : 0 ); mPrefs.SetPref( VAL('C','D','u','r'), mConsoleDelay ); mPrefs.SetPref( VAL('C','L','i','n'), mConsoleLineDur ); // Init the track text info NewSong(); mPrefs.Store(); }
int lr (matrix A, matrix L, matrix R) { int i, j, k, n; real tr, tl; n = DIM(A,0); init_matrix (L, 0.0); init_matrix (R, 0.0); for (i=0; i<n; i++) VAL2(L,i,i) = 1; for (j=0; j<n; j++) VAL2(R,0,j) = VAL2(A,0,j); for (i=1; i<n; i++) VAL2(L,i,0) = VAL2(A,i,0) / VAL2(A,0,0); for (k=1; k<n; k++) { for (j=k; j<n; j++) { tr = 0; for (i=0; i<k; i++) tr += VAL2(R,i,j) * VAL2(L,k,i); VAL2(R,k,j) = VAL2(A,k,j) - tr; } if (k != n) { for (i=k+1; i<n; i++) { tl = 0; for (j=0; j<k; j++) tl += VAL2(L,i,j) * VAL2(R,j,k); VAL2(L,i,k) = (VAL2(A,i,k)-tl) / VAL2(R,k,k); } } } }
GForce::GForce( void* inRefCon ) : #if defined(UNIX_X) mPrefs( ".G-Force", true ), #endif mConsoleLines( cDuplicatesAllowed, cOrderImportant ), mLineExpireTimes( cOrderImportant ), mPal1( mT, mIntensityParam ), mPal2( mT, mIntensityParam ), mDeltaFields ( cNoDuplicates_CaseInsensitive, cSortLowToHigh ), mColorMaps ( cNoDuplicates_CaseInsensitive, cSortLowToHigh ), mWaveShapes ( cNoDuplicates_CaseInsensitive, cSortLowToHigh ), mParticles ( cNoDuplicates_CaseInsensitive, cSortLowToHigh ), mWave1( mT ), mWave2( mT ) { // Do initting... mWind = 0; mOutPort = 0; mRefCon = inRefCon; mFrameCount = 0; mT_MS_Base = EgOSUtils::CurTimeMS(); mConsoleExpireTime = mLastCursorUpdate = mLastGetKeys = mT_MS = 0; mFrameCountStart = mNextPaletteUpdate = mT = 0; mNextShapeChange = mT + 10; mNextFieldChange = mT + 10; mNextColorChange = mT + 10; mLastSongStart = mT - 10000; mLastKeyPollTime = mT; mLastActiveTime = mT; mDoingSetPortWin = false; mNeedsPaneErased = true; mShapeSlideShow = mColorSlideShow = mFieldSlideShow = true; mAtFullScreen = false; mMouseWillAwaken = false; mTrackTextDur = 0; mPrefs.Load(); if ( mPrefs.GetPref( VAL('V','e','r','s') ) != GFORCE_COMPAT_VERSION ) { mConsoleDelay = 8; mConsoleLineDur = 14; mMagScale = 1; mTransitionLo = 4; mTransitionHi = 18; mScrnSaverDelay = -1 * 60; // Factory: screen saver mode disabled mPrefs.SetPref( VAL('V','e','r','s'), GFORCE_COMPAT_VERSION ); mBorderlessWind = 0; mHandleKeys = 1; mNum_S_Steps = 200; mFullscreenSize.h = 640; mFullscreenSize.v = 480; mFullscreenDepth = 8; mFullscreenDevice = 0; mMaxSize.h = 30000; mMaxSize.v = 360; mTrackTextPosMode = 5; mTrackTextSize = 18; mNormalizeInput = false; mNewConfigNotify = false; mParticlesOn = true; mKeyMap .Assign( "TLRY`SNGFZXCQWE,.M[]{}P******!@#$%^&*()1234567890" ); mFieldIntervalStr .Assign( "18 + rnd( 15 )" ); mColorIntervalStr .Assign( "10 + rnd( 15 )" ); mShapeIntervalStr .Assign( "10 + rnd( 15 )" ); mTrackFont .Assign( __defaultFont ); mTrackTextStartStr .Assign( "4 + LAST_SONG_START - t" ); mTrackTextDurationStr .Assign( "5" ); mTrackMetaText .Assign( __defaultTTFormat ); mParticleDuration .Assign( "8 + rnd( 15 )" ); mParticleProbability .Assign( ".09/((NUM_PARTICLES+1)^1.66)" ); // Show the welcome msg for a pref rewrite... Println( GFORCE_VERS_STR ); Println( "Press '?' for help" ); } else { mConsoleDelay = mPrefs.GetPref( VAL('C','D','u','r') ); mConsoleLineDur = mPrefs.GetPref( VAL('C','L','i','n') ); mMagScale = mPrefs.GetPref( VAL('M','S','c','l') ) / 1000.0; mTransitionLo = mPrefs.GetPref( VAL('T','r','L','o') ); mTransitionHi = mPrefs.GetPref( VAL('T','r','H','i') ); mScrnSaverDelay = mPrefs.GetPref( VAL('S','S','v','r') ) * 60.0; mBorderlessWind = mPrefs.GetPref( VAL('N','o','B','o') ); mHandleKeys = mPrefs.GetPref( VAL('K','y','b','d') ); mNum_S_Steps = mPrefs.GetPref( VAL('S','t','p','s') ); mFullscreenSize.h = mPrefs.GetPref( VAL('F','S','_','X') ); mFullscreenSize.v = mPrefs.GetPref( VAL('F','S','_','Y') ); mFullscreenDepth = mPrefs.GetPref( VAL('F','S','_','D') ); mFullscreenDevice = mPrefs.GetPref( VAL('F','S','_','#') ); mParticlesOn = mPrefs.GetPref( VAL('P','_','O','n') ); mNormalizeInput = mPrefs.GetPref( VAL('N','o','r','m') ); mMaxSize.v = mPrefs.GetPref( VAL('M','a','x','Y') ); mMaxSize.h = mPrefs.GetPref( VAL('M','a','x','X') ); mNewConfigNotify = mPrefs.GetPref( VAL('S','h','w','T') ); mTrackTextPosMode = mPrefs.GetPref( VAL('T','P','o','s') ); mTrackTextSize = mPrefs.GetPref( VAL('T','S','z','e') ); mPrefs.GetPref( VAL('W','I','n','t'), mShapeIntervalStr ); mPrefs.GetPref( VAL('D','I','n','t'), mFieldIntervalStr ); mPrefs.GetPref( VAL('C','I','n','t'), mColorIntervalStr ); mPrefs.GetPref( VAL2('T','?'), mTrackTextStartStr ); mPrefs.GetPref( VAL('T','D','u','r'), mTrackTextDurationStr ); mPrefs.GetPref( VAL('T','F','n','t'), mTrackFont ); mPrefs.GetPref( VAL('T','S','t','r'), mTrackMetaText ); mPrefs.GetPref( VAL('P','D','u','r'), mParticleDuration ); mPrefs.GetPref( VAL('P','P','r','b'), mParticleProbability ); mPrefs.GetPref( VAL('K','M','a','p'), mKeyMap ); } mPortA.SetTrackTextFont( mTrackFont, mTrackTextSize ); mPortB.SetTrackTextFont( mTrackFont, mTrackTextSize ); // Catch any bad values for mNumSampleBins if ( mNum_S_Steps < 1 || mNum_S_Steps > 10000 ) mNum_S_Steps = 320; mNum_FFT_Steps = 256; // Alloc/setup the data we'll have our virtual machines accessing... SetNumSampleBins( mNum_S_Steps ); SetNumFFTBins( mNum_FFT_Steps ); // Setup waveshape members mWave1.SetMagFcn( (ExprUserFcn**) &mSampleFcn ); mWave2.SetMagFcn( (ExprUserFcn**) &mSampleFcn ); // FIXME, use FFT data here mWave1.SetFFTFcn( (ExprUserFcn**) &mFFTFcn ); mWave2.SetFFTFcn( (ExprUserFcn**) &mFFTFcn ); // Init particle stuff mDict.AddVar( "T", &mT ); mDict.AddVar( "LAST_PARTICLE_START", &mLastParticleStart ); mDict.AddVar( "NUM_PARTICLES", &mNumRunningParticles ); mNumRunningParticles = 0; mNextParticleCheck = mT + 1; mParticleProbabilityFcn.Compile( mParticleProbability, mDict ); mParticleDurationFcn.Compile( mParticleDuration, mDict ); mShapeInterval.Compile( mShapeIntervalStr, mDict ); mColorInterval.Compile( mColorIntervalStr, mDict ); mFieldInterval.Compile( mFieldIntervalStr, mDict ); // Track Text stuff mDict.AddVar( "LAST_SONG_START", &mLastSongStart ); mTrackTextStartFcn.Compile( mTrackTextStartStr, mDict ); mTrackTextDurFcn.Compile( mTrackTextDurationStr, mDict ); // Transition bookkeeping mColorTransTime = -1; mShapeTransTime = -1; mGF_Palette = 0; mWave = 0; // Look in G-Force's support folders and see what we have to select from... BuildConfigLists(); mField = &mField1; mNextField = &mField2; for ( int i = 0; i < 4; i++ ) mCurKeys[ i ] = 0; }