public static void Main()
double[,] nodes1 = new double[3,3]{ {0, 0, 0}, {4, 0, 0}, {5, 2, 0} };
double[,] acts1 = new double[3,3]{ {1, 0, 0}, {0, 0, 0}, {0, -1, 0} };
bool[,] cont1 = new bool[3,3]{ {true, true, false}, {false, true, false}, {false, false, false} };
double[,] nodes = new double[3,2]{ {0, 0}, {4, 1}, {5, 2} };
double[,] acts = new double[3,2]{ {0, 0}, {0, 0}, {0, -2} };
bool[,] cont = new bool[3,2]{ {true, true}, {true, false}, {false, false} };
Show(reactXYZ(nodes1, acts1, cont1));
public static double[,] reactXYZ(double[,] N, double[,] A, bool[,] C)
for (int d = 0; d < N.GetLength(1); d++) for (int i = 0; i < N.GetLength(0); i++) if (C[i, d]) c++;
double[,] R = new double[6, c + 1];
for (int d = 0, w = 0; d < N.GetLength(1); d++)
for (int i = 0, q = 0; i < c; i++) if (C[i, d])
for (int d = 0, w = 0; d < N.GetLength(1); d++)
for (int i = 0, q = 0; i < c; i++) if (C[i, d])
if (d==0) R[3+w, q] += N[i, 2] - N[i, 0];
if (d==1) R[3+w, q] += N[i, 2] - N[i, 0];
if (d==2) R[3+w, q] += N[i, 2] - N[i, 0];
for (int i = 0; i < A.GetLength(0); i++)
R[3, c] += A[i, 1] * N[i, 2] - A[i, 2] * N[i, 1];
R[4, c] += A[i, 2] * N[i, 0] - A[i, 0] * N[i, 2];
R[5, c] += A[i, 0] * N[i, 1] - A[i, 1] * N[i, 0];
public static void Show(double[,] A)
int r = A.GetLength(0), c = A.GetLength(1);
double[,] l = new double[r, c];
for (int i = 0; i < r; i++) for (int j = 0; j < c; j++)
A[i, j] = Math.Round(A[i, j], 3);
l[i, j] = A[i, j].ToString().Length;
if (l[i, j] > max) max = l[i, j];
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
Console.Write(" {0}", A[i, j]);
for (int k = 0; k < (max - l[i, j]); k++) Console.Write(" ");
Console.Write(" {0}", A[i, j]);
for (int k = 0; k < (max - l[i, j]+1); k++) Console.Write(" ");