コード例 #1
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static object MatrizPorColumnas(Matriz Matriz, params int[] Columnas)
		{
			Matriz Retorno = new Matriz(Matriz.Filas, Columnas.GetUpperBound(0) + 1);

			for (int i = 0; i <= Columnas.GetUpperBound(0); i++) {
				for (int j = 0; j <= Matriz.Filas - 1; j++) {
					Retorno.EstablecerValor(j, i, Matriz.ObtenerValor(j, Columnas[i]));
				}
			}

			return Retorno;
		}
コード例 #2
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static object MatrizPorFilas(Matriz Matriz, params int[] Filas)
		{
			Matriz Retorno = new Matriz(Filas.GetUpperBound(0) + 1, Matriz.Columnas);

			for (int i = 0; i <= Filas.GetUpperBound(0); i++) {
				for (int j = 0; j <= Matriz.Columnas - 1; j++) {
					Retorno.EstablecerValor(i, j, Matriz.ObtenerValor(Filas[i], j));
				}
			}

			return Retorno;
		}
コード例 #3
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz Copia(Matriz Matriz)
		{
			Matriz Retorno = new Matriz(Matriz.Filas, Matriz.Columnas);

			for (int i = 0; i <= Matriz.Filas - 1; i++) {
				for (int j = 0; j <= Matriz.Columnas - 1; j++) {
					Retorno.EstablecerValor(i, j, Matriz.Matriz[i, j]);
				}
			}

			return Retorno;
		}
コード例 #4
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static object MatrizUnitaria(int Dimensiones)
		{
			if (Dimensiones <= 0)
				Dimensiones = 1;

			Matriz Retorno = new Matriz(Dimensiones, Dimensiones);

			for (int i = 0; i <= Dimensiones - 1; i++) {
				for (int j = 0; j <= Dimensiones - 1; j++) {
					Retorno.EstablecerValor(i, j, (i == j ? 1 : 0));
				}
			}

			return Retorno;
		}
コード例 #5
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static object SubMatrizCuadrada(Matriz Matriz, int Fila, int Columna, int Dimensiones)
		{
			object functionReturnValue = null;
			if (!((Fila + Dimensiones <= Matriz.Filas) && (Columna + Dimensiones <= Matriz.Columnas))) {
				throw new ExcepcionMatriz("MATRIZ (SUBMATRIZ CUADRADA): No se puede obtener una submatriz de las dimensiones especificadas desde el elemento especificado.");
				return functionReturnValue;
			}

			Matriz Retorno = new Matriz(Dimensiones, Dimensiones);

			for (int i = 0; i <= Retorno.Filas - 1; i++) {
				for (int j = 0; j <= Retorno.Columnas - 1; j++) {
					Retorno.EstablecerValor(i, j, Matriz.ObtenerValor(i + Fila, j + Columna));
				}
			}

			return Retorno;
			return functionReturnValue;
		}
コード例 #6
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz Adjunta(Matriz Matriz)
		{
			Matriz functionReturnValue = null;
			Matriz Retorno = new Matriz(Matriz.Filas, Matriz.Columnas);

			for (int i = 0; i <= Matriz.Filas - 1; i++) {
				for (int j = 0; j <= Matriz.Columnas - 1; j++) {
					try {
						Retorno.EstablecerValor(i, j, Adjunto(Matriz, i, j));
					} catch (ExcepcionAlgebraica ex) {
						throw new ExcepcionMatrizNoCuadrada("MATRIZ (ADJUNTA): La submatriz obtenida no es cuadrada. No se puede calcular el determinante.");
						return functionReturnValue;
					}
				}
			}

			return Retorno;
			return functionReturnValue;
		}
コード例 #7
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz SubMatrizPorTamaño(Matriz Matriz, int Filas, int Columnas)
		{
			Matriz Retorno = null;

			if (Filas <= Matriz.Filas && Columnas <= Matriz.Columnas && Filas > 0 && Columnas > 0) {
				Retorno = new Matriz(Filas, Columnas);

				for (int i = 0; i <= Filas - 1; i++) {
					for (int j = 0; j <= Columnas - 1; j++) {
						Retorno.EstablecerValor(i, j, Matriz.ObtenerValor(i, j));
					}
				}

				return Retorno;
			} else {
				throw new ExcepcionSubMatriz("MATRIZ (SUBMATRIZ): El número de filas y/o columnas es menor que uno o superior a los originales." + Constants.vbNewLine + "Dimensiones originales: " + Matriz.Filas.ToString() + "x" + Matriz.Columnas.ToString() + Constants.vbNewLine + "Dimensiones especificadas: " + Filas.ToString() + "x" + Columnas.ToString());
			}
		}
コード例 #8
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz SubMatrizPorColumna(Matriz Matriz, int Columna)
		{
			if (Matriz.Columnas >= 2) {
				Matriz Retorno = new Matriz(Matriz.Filas, Matriz.Columnas - 1);

				int y = 0;

				for (int j = 0; j <= Matriz.Columnas - 1; j++) {
					switch (j) {
						case  // ERROR: Case labels with binary operators are unsupported : LessThan
Columna:
							y = j;
							break;
						case  // ERROR: Case labels with binary operators are unsupported : Equality
Columna:
							continue;
						case  // ERROR: Case labels with binary operators are unsupported : GreaterThan
Columna:
							y = j - 1;
							break;
					}

					for (int i = 0; i <= Matriz.Filas - 1; i++) {
						Retorno.EstablecerValor(i, y, Matriz.ObtenerValor(i, j));
					}
				}

				return Retorno;
			} else {
				throw new ExcepcionSubMatriz("MATRIZ (SUBMATRIZ): No se puede obtener una submatriz de una matriz columna, una matriz fila, o una matriz de un solo elemento." + Constants.vbNewLine + "Dimensiones de la matriz: " + Matriz.Filas + "x" + Matriz.Columnas);
			}
		}
コード例 #9
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz Transpuesta(Matriz Matriz)
		{
			var Retorno = new Matriz(Matriz.Columnas, Matriz.Filas);

			for (int i = 0; i <= Matriz.Filas - 1; i++) {
				for (int j = 0; j <= Matriz.Columnas - 1; j++) {
					Retorno.EstablecerValor(j, i, Matriz.ObtenerValor(i, j));
				}
			}

			return Retorno;
		}
コード例 #10
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz Producto(Matriz Matriz, double Factor)
		{
			for (int i = 0; i <= Matriz.Filas - 1; i++) {
				for (int j = 0; j <= Matriz.Columnas - 1; j++) {
					Matriz.EstablecerValor(i, j, Matriz.ObtenerValor(i, j) * Factor);
				}
			}

			return Matriz;
		}
コード例 #11
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz Producto(Matriz M1, Matriz M2)
		{
			if ((M1.Columnas == M2.Filas)) {
				double ValorElemento = 0;
				Matriz Retorno = new Matriz(M1.Filas, M2.Columnas);

				for (int i = 0; i <= M1.Filas - 1; i++) {
					for (int j = 0; j <= M2.Columnas - 1; j++) {
						ValorElemento = 0;
						for (int k = 0; k <= M1.Columnas - 1; k++) {
							ValorElemento += M1.ObtenerValor(i, k) * M2.ObtenerValor(k, j);
						}
						Retorno.EstablecerValor(i, j, ValorElemento);
					}
				}

				return Retorno;
			} else {
				throw new ExcepcionOperacionMatricial("MATRIZ (PRODUCTO): El número de columnas del primer factor debe ser igual al número de filas del segundo" + Constants.vbNewLine + "Primer factor: " + M1.Filas + "x" + M1.Columnas + Constants.vbNewLine + "Segundo factor: " + M2.Filas + "x" + M2.Columnas);
			}
		}
コード例 #12
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz Resta(Matriz M1, Matriz M2)
		{
			Matriz Retorno = null;

			if ((M1.Filas == M2.Filas && M1.Columnas == M2.Columnas)) {
				Retorno = new Matriz(M1.Filas, M1.Columnas);

				for (int i = 0; i <= M1.Filas - 1; i++) {
					for (int j = 0; j <= M1.Columnas - 1; j++) {
						Retorno.EstablecerValor(i, j, M1.ObtenerValor(i, j) - M2.ObtenerValor(i, j));
					}
				}

				return Retorno;
			} else {
				throw new ExcepcionOperacionMatricial("MATRIZ (RESTA): Minuendo y sustraendo deben tener las mismas dimensiones" + Constants.vbNewLine + "Minuendo: " + M1.Filas + "x" + M1.Columnas + Constants.vbNewLine + "Sustraendo: " + M2.Filas + "x" + M2.Columnas);
			}
		}
コード例 #13
0
ファイル: Matriz.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz Suma(Matriz M1, Matriz M2)
		{
			Matriz Retorno = null;

			if ((M1.Filas == M2.Filas && M1.Columnas == M2.Columnas)) {
				Retorno = new Matriz(M1.Filas, M1.Columnas);

				for (int i = 0; i <= M1.Filas - 1; i++) {
					for (int j = 0; j <= M1.Columnas - 1; j++) {
						Retorno.EstablecerValor(i, j, M1.ObtenerValor(i, j) + M2.ObtenerValor(i, j));
					}
				}

				return Retorno;
			} else {
				throw new ExcepcionOperacionMatricial("MATRIZ (SUMA): Los sumandos deben tener las mismas dimensiones" + Constants.vbNewLine + "Primar sumando: " + M1.Filas + "x" + M1.Columnas + Constants.vbNewLine + "Segundo sumando: " + M2.Filas + "x" + M2.Columnas);
			}
		}