Пример #1
0
static int handle_menu(int x1, int y1)
{
    int x, y, a, i, j;

    /* scaled coordinates 0 - 999 */
    x = x1*1000/menubg->w;
    y = y1*1000/menubg->h;
    if (Y_REG(LINE2)) {
	for (i = 0; i < NUM_TATAMIS; i++) {
	    if (X_L(tatami_x[i])) {
		conf_tatamis[i] = !conf_tatamis[i];
		configured_tatamis = 0;

		for (j = 0; j < NUM_TATAMIS; j++)
		    if (conf_tatamis[j])
			configured_tatamis++;

		for (j = 0; j < NUM_TATAMIS; j++) {
		    if (configured_tatamis) show_tatami[j] = conf_tatamis[j];
		    else show_tatami[j] = match_list[j][1].blue && match_list[j][1].white;
		}

		return TRUE;
	    }
	}
    } else if (Y_REG(LINE3)) {
	if (X_R(R1) && display_type < 2) {
	    display_type++;
	    num_lines = numlines[display_type];
	    return TRUE;
	} else if (X_L(L1) && display_type > 0) {
	    display_type--;
	    num_lines = numlines[display_type];
	    return TRUE;
	}
    } else if (Y_REG(LINE4)) {
	if (X_R(R1) || X_L(L1))
	    red_background = !red_background;
	return TRUE;
    } else if (Y_REG(LINE5)) {
	if (X_R(L1))
	    mirror_display = !mirror_display;
	return TRUE;
    } else if (Y_REG(LINE7)) {
	if (BETWEEN(X0, X0_1)) {
	    emscripten_run_script("setfullscreen()");
	    menu_on = FALSE;
	    return TRUE;
	}
    } else if ( x > 38 && x < 119 && y > 840 && y < 960) {
	menu_on = FALSE;
	return TRUE;
    }

    return FALSE;
}
Пример #2
0
	void cholesky_solve(double * A_L, double * A_U, double * B, double * X, int size)
	{
		// A[j * size + i]
		// B[i]
		// X[i]

		std::vector<double> X_R(size,0.0);

//		gauss_solve(&A_L[0], &B[0], &X_R[0], size);

		for (int i = 0; i <size ; i++)
		{
			X_R[i] = B[i];
			for (int j = 0; j <i; j++)
			{
				X_R[i] -= A_L[i * size + j] * X_R[j];
			}	
			X_R[i] /= A_L[i * size + i];
		}

//	  gauss_solve(&A_U[0], &X_R[0], X, size);
		
		for (int i = size-1; i >=0 ; --i)
		{
			X[i] = X_R[i];
			for (int j = size-1; j >i; --j)
			{
				X[i] -= A_U[i * size + j] * X[j];
			}	
			X[i] /= A_U[i * size + i];
		}
    }
Пример #3
0
	bool cholesky_old(double * A, double * B, double * X, int size)
	{
		double V = 0.0;

		std::vector<double> A_U(size*size,0.0);
		std::vector<double> A_L(size*size,0.0);
		
		// inside matrix [L(i,j)]
		for (int j = 0; j < size; j++)
		{
			for(int i = j; i < size; i++)
			{
				if(i==j)
				{
					// main diagonals [L(i,i)]
					//for (int i = 0; i < size; i++)
					//{
						V = 0.0;
						V += A[i*size + i];
						for (int k = 0; k <= i-1; k++)
						{
							V -= (A_U[k*size + i] * A_U[k * size + i]);
						}
						
						if( V <= 0)
						{
							return false;
						}

						A_L[i*size + i] = sqrt(V);
						A_U[i*size + i] = sqrt(V);
					//}
				}
				else
				{
						V = 0.0;
						for (int k = 0; k <= j-1; k++)
						{
							V += A_U[k*size + i] * A_U[k*size + j];
						}

						if( A_U[j*size + j] == 0)
						{
							return false;
						}
						
						A_U[j*size + i] = (1 / A_U[j*size + j]) * (A[j*size + i] - V);
						A_L[i*size + j] = A_U[j*size + i];
				}
			}
		}

		std::vector<double> X_R(size,0.0);

//		gauss_solve(&A_L[0], &B[0], &X_R[0], size);

		for (int i = 0; i <size ; i++)
		{
			X_R[i] = B[i];
			for (int j = 0; j <i; j++)
			{
				X_R[i] -= A_L[i * size + j] * X_R[j];
			}	
			X_R[i] /= A_L[i * size + i];
		}

//	  gauss_solve(&A_U[0], &X_R[0], X, size);
		
		for (int i = size-1; i >=0 ; --i)
		{
			X[i] = X_R[i];
			for (int j = size-1; j >i; --j)
			{
				X[i] -= A_U[i * size + j] * X[j];
			}	
			X[i] /= A_U[i * size + i];
		}
    }