Laden...

2D Feld durch gegebenen Schnittpunkt und Radius füllen

Erstellt von entchen vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.199 Views
E
entchen Themenstarter:in
3 Beiträge seit 2015
vor 8 Jahren
2D Feld durch gegebenen Schnittpunkt und Radius füllen

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!

3.170 Beiträge seit 2006
vor 8 Jahren

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

P
1.090 Beiträge seit 2011
vor 8 Jahren

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:

Clean Code Developer
Entwurfsmuster
Anti-Pattern