Hallo zusammen,
ich stehe vor folgendem Problem:
ich habe eine 2-dim.-Feld (double), dessen Werte am Anfang alle 0 sind.
double[,] field = new double[100,100];
Nun möchte ich das Feld an bestimmen Stellen mit neuen Werten füllen (bzw. die Werte auf die alten aufaddieren).
Das Problem dabei ist, dass ich eine Intensitätsverteilung(Funktion) um einen bestimmten Schnittpunkte habe.
public double GetIntensity(double radius){...}
D.h. ich habe eine x,y Koordinate, wo der Schnittpunkt im Feld liegt. Und durch eine Liste von Radien (0 bis R) sollen jetzt die einzelnen Intensitäten aufaddiert werden.
intersectionX = 50;
intersectionY = 50;
R = 0.4;
// List<double> radien = {0.0, 0.01, 0.02, ..., 0.4}; // nur zum verdeutlichen
Wie bekomme ich es allgemein hin, dass von einer bestimmten Stelle der Matrix die Werte kreisförmig geändert werden. (am Schnittpunkt ist die höchste Intensität, und je größer der Radius, desto kleiner die Intensität)
D.h. von field[50,50] sollen jetzt im Radius 0.01 die Felder ringsherum eine bestimmte Intensität bekommen, dann radius 0.02 usw.
Also mein Problem ist einfach ein Algorithmus, um diese Intensitätswerte kreisförmig zu verteilen 🙁
Grüße und Danke!
Hallo,
Du kannst Dir entweder einen Algorithmus basteln, der mit Sinus und Cosinus arbeitet, oder vielleicht auch den Bresenham-Algorithmus verwenden.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hi du wirst erst mal festlegen müssen, wie viele "Pixel" der Radius von 0.01 Entspricht. Die Punkte auf dem Kreis kannst du dann einfach mit den Trigonometrischen Formeln ermitteln. Der Einfachheit halber kannst du die Symmetrie des Kreises verwenden. Z.B. wenn P(52/52) auf den Kreis von M(50/50) liegt, dann auch die Punkt P(48/48), P(48/52) und P(52/48). Damit hast du dann ein Viereck was du füllen kannst. Und nach einer Ilteration über 1/4 Kreis bis du durch.
Sollte man mal gelesen haben: