VectorVisualizer Version 1.2
by Kevin Seib and Pascal Glaeser
Loading...
Searching...
No Matches
Operations.cs
Go to the documentation of this file.
2{
3 public static class FieldOperations
4 {
5 private const double h = 1e-5; // Schrittweite
6
7 // Annäherung des Gradienten eines 2D-Skalarfeldes an einem Punkt (x, y)
8 public static double[] ComputeGradient2D(Func<double, double, double> scalarField, double x, double y)
9 {
10 double dx = (scalarField(x + h, y) - scalarField(x - h, y)) / (2 * h); // Änderung in x-Richtung
11 double dy = (scalarField(x, y + h) - scalarField(x, y - h)) / (2 * h); // Änderung in y-Richtung
12 return new double[] { dx, dy };
13 }
14
15 // Annäherung des Gradienten eines 3D-Skalarfeldes an einem Punkt (x, y, z)
16 public static double[] ComputeGradient3D(Func<double, double, double, double> scalarField, double x, double y, double z)
17 {
18 double dx = (scalarField(x + h, y, z) - scalarField(x - h, y, z)) / (2 * h); // Änderung in x-Richtung
19 double dy = (scalarField(x, y + h, z) - scalarField(x, y - h, z)) / (2 * h); // Änderung in y-Richtung
20 double dz = (scalarField(x, y, z + h) - scalarField(x, y, z - h)) / (2 * h); // Änderung in z-Richtung
21 return new double[] { dx, dy, dz };
22 }
23
24 // Annäherung der Divergenz eines 2D-Vektorfeldes
25 public static double ComputeDivergence2D(Func<double, double, double[]> vectorField, double x, double y)
26 {
27 double dF1_dx = (vectorField(x + h, y)[0] - vectorField(x - h, y)[0]) / (2 * h); // Ableitung der x-Komponente nach x
28 double dF2_dy = (vectorField(x, y + h)[1] - vectorField(x, y - h)[1]) / (2 * h); // Ableitung der y-Komponente nach y
29 return dF1_dx + dF2_dy;
30 }
31
32 // Annäherung der Divergenz eines 3D-Vektorfeldes
33 public static double ComputeDivergence3D(Func<double, double, double, double[]> vectorField, double x, double y, double z)
34 {
35 double dF1_dx = (vectorField(x + h, y, z)[0] - vectorField(x - h, y, z)[0]) / (2 * h); // Ableitung von x
36 double dF2_dy = (vectorField(x, y + h, z)[1] - vectorField(x, y - h, z)[1]) / (2 * h); // Ableitung von y
37 double dF3_dz = (vectorField(x, y, z + h)[2] - vectorField(x, y, z - h)[2]) / (2 * h); // Ableitung von z
38 return dF1_dx + dF2_dy + dF3_dz;
39 }
40
41 // Annäherung der Rotation (Curl) eines 2D-Vektorfeldes.
42 public static double ComputeCurl2D(Func<double, double, double[]> vectorField, double x, double y)
43 {
44 double dF2_dx = (vectorField(x + h, y)[1] - vectorField(x - h, y)[1]) / (2 * h); // Ableitung der y-Komponente nach x
45 double dF1_dy = (vectorField(x, y + h)[0] - vectorField(x, y - h)[0]) / (2 * h); // Ableitung der x-Komponente nach y
46 return dF2_dx - dF1_dy; // Differenz ergibt Rotationsstärke (nur z-Komponente)
47 }
48
49 // Annäherung der Rotation (Curl) eines 3D-Vektorfeldes.
50 public static double[] ComputeCurl3D(Func<double, double, double, double[]> vectorField, double x, double y, double z)
51 {
52 // x-Komponente misst Rotation um die x-Achse (verursacht durch y- und z-Komponenten)
53 double dF3_dy = (vectorField(x, y + h, z)[2] - vectorField(x, y - h, z)[2]) / (2 * h);
54 double dF2_dz = (vectorField(x, y, z + h)[1] - vectorField(x, y, z - h)[1]) / (2 * h);
55 double curl_x = dF3_dy - dF2_dz;
56
57 // y-Komponente misst Rotation um die y-Achse
58 double dF1_dz = (vectorField(x, y, z + h)[0] - vectorField(x, y, z - h)[0]) / (2 * h);
59 double dF3_dx = (vectorField(x + h, y, z)[2] - vectorField(x - h, y, z)[2]) / (2 * h);
60 double curl_y = dF1_dz - dF3_dx;
61
62 // z-Komponente misst Rotation um die z-Achse
63 double dF2_dx = (vectorField(x + h, y, z)[1] - vectorField(x - h, y, z)[1]) / (2 * h);
64 double dF1_dy = (vectorField(x, y + h, z)[0] - vectorField(x, y - h, z)[0]) / (2 * h);
65 double curl_z = dF2_dx - dF1_dy;
66
67 return new double[] { curl_x, curl_y, curl_z };
68 }
69 }
70}