private void init(IMesh mesh) { count = mesh.Vertices.Count; A = new double[count]; B = new double[count]; nextA = new double[count]; nextB = new double[count]; coef = new double[count][]; double teta; IVector3D direction; for (int i = 0; i < count; i++) { int vK = mesh.VerticesKeys[i]; int[] vStart = mesh.Topology.GetVertexAdjacentVertices(vK); ITopologicVertex vertex = mesh.GetVertexWithKey(vK); A[i] = 1; B[i] = 0; coef[i] = new double[vStart.Length]; for (int j = 0; j < vStart.Length; j++) { ITopologicVertex neighbor = mesh.GetVertexWithKey(vStart[j]); direction = neighbor.Position - vertex.Position; teta = 1.0; if (AuxiliarVectorField != null && AuxiliarVectorField.Length > 0) { if (AuxiliarVectorField.Length == count) { teta = IVector3D.AngleBetween(direction, new IVector3D(AuxiliarVectorField[i])); } else { teta = IVector3D.AngleBetween(direction, new IVector3D(AuxiliarVectorField[0])); } } coef[i][j] = Math.Sqrt(Math.Sin(teta) * Math.Sin(teta) + Math.Pow(NeighborsContributionFactor, 2) * Math.Cos(teta) * Math.Cos(teta)); } } Random rnd = new Random(); for (int i = 0; i < RandomValuesPopulation; i++) { int idx = rnd.Next(0, count); for (int j = idx; j < idx + 10; j++) { A[j] = 1; B[j] = 1; } } }