2009-06-25 8 views
-1

konvertieren Ich versuche, diesen Code von Java nach C# zu konvertieren (die sich here)mir helfen Verarbeitung Code in C#

ich einige winform Erfahrung haben aber nicht viel mit der Zeichnung von Pixeln auf einem Winform-Anwendungen.

ich ziemlich sicher, ich fühle mich über die meisten der Unter Methoden umwandeln kann im nur unklar, wie i indiviual Pixel auf dem Bildschirm

Hilfe oder Werkzeuge für die Umwandlung von über Java zu C# stark

apprehsated wäre ziehen würde
// Buddhabrot 
// j.tarbell January, 2004 
// Albuquerque, New Mexico 
// complexification.net 

// based on code by Paul Bourke 
// astronomy.swin.edu.au/~pbourke/ 

// Processing 0085 Beta syntax update 
// j.tarbell April, 2005 

int dim = 800;    // screen dimensions (square window) 
int bailout = 200;   // number of iterations before bail 
int plots = 10000;  // number of plots to execute per frame (x30 = plots per second) 

// 2D array to hold exposure values 
int[] exposure = new int[dim*dim]; 
int maxexposure;   // maximum exposure value 
int time = 0; 
int exposures = 0; 

boolean drawing; 
PFont metaBold; 

// MAIN ---------------------------------------------------------------- 

void setup() { 
    // set up drawing area 
    size(800,800,P3D); 
    background(0); 
    // take it nice and easy 
    framerate(15); 
    // load typeface 
    metaBold = loadFont("Arial-48.vlw"); 
} 

void draw() { 
    plotPlots(); 
    time++; 
    if (time%30==0) { 
    // show progress every 2 seconds or so... 
    findMaxExposure(); 
    renderBrot(); 
    // show exposure value 
    fill(255); 
    noStroke(); 
    textFont(metaBold, 14); 
    text("bailout: "+bailout+" exposures: "+exposures, 5, dim-6); 
    } 
} 

void plotPlots() { 
    float x, y; 
    // iterate through some plots 
    for (int n=0;n<plots;n++) { 
    // Choose a random point in same range 
    x = random(-2.0,1.0); 
    y = random(-1.5,1.5); 
    if (iterate(x,y,false)) { 
     iterate(x,y,true); 
     exposures++; 
    } 
    } 
} 

void renderBrot() { 
    // draw to screen 
    for (int i=0;i<dim;i++) { 
    for (int j=0;j<dim;j++) { 
     float ramp = exposure[i*dim+j]/(maxexposure/2.5); 
     // blow out ultra bright regions 
     if (ramp > 1) { 
     ramp = 1; 
     } 
     color c = color(int(ramp*255), int(ramp*255), int(ramp*255)); 
     set(j,i,c); 
    } 
    } 
} 

// Iterate the Mandelbrot and return TRUE if the point exits 
// Also handle the drawing of the exit points 
boolean iterate(float x0, float y0, boolean drawIt) { 
    float x = 0; 
    float y = 0; 
    float xnew, ynew; 
    int ix,iy; 

    for (int i=0;i<bailout;i++) { 
    xnew = x * x - y * y + x0; 
    ynew = 2 * x * y + y0; 
    if (drawIt && (i > 3)) { 
     ix = int(dim * (xnew + 2.0)/3.0); 
     iy = int(dim * (ynew + 1.5)/3.0); 
     if (ix >= 0 && iy >= 0 && ix < dim && iy < dim) { 
     // rotate and expose point 
     exposure[ix*dim+iy]++; 
     } 

    } 
    if ((xnew*xnew + ynew*ynew) > 4) { 
     // escapes 
     return true; 
    } 
    x = xnew; 
    y = ynew; 
    } 
    // does not escape 
    return false; 
} 

void findMaxExposure() { 
    // assume no exposure 
    maxexposure=0; 
    // find the largest density value 
    for (int i=0;i<dim;i++) { 
    for (int j=0;j<dim;j++) { 
     maxexposure = max(maxexposure,exposure[i*dim+j]); 
    } 
    } 
} 

// Buddhabrot 
// j.tarbell January, 2004 
+3

Nein genau Java - es Verarbeitung –

+0

können Sie ein wenig mehr erklären, was fehlt (ich weiß nicht viel über Java) – Crash893

+1

Verarbeitung ist eine andere Sprache, die zur JVM kompiliert - das ist nicht Java. Die Verarbeitung wird mit Java erstellt und kann JVM-Bytecode erzeugen und Java aufrufen, aber kein Java-> C# -Konverter weiß, was damit zu tun ist. –

Antwort

4

Blick auf System.Drawing und die Graphics-Klasse.

EDIT: Nur um die Verwirrung zu klären, ist der OP-Code nicht Java. Es ist Processing. Das steht in den Kommentaren, aber Sie können auch sagen, weil es keine Klassendefinition, keine Importe gibt und die Aufrufe keine Java-Aufrufe sind. Es kompiliert zu Bytecode und interagiert mit Java, aber es ist nicht Java - keine automatische Konvertierung wird helfen.

1

Um ein invidual Pixel zeichnen Sie nutzen könnten:

e.Graphics.FillRectangle(aBrush, x, y, 1, 1); 

Sie here aussehen möchten.

0

Spielen wir Guess the Base Class? :)

Dieser Originalcode scheint nicht komplett Java zu sein, was mit globalen Variablen und freien Funktionen. Ist es der Inhalt einer Klassendeklaration?

Die Frage ist, welches Framework wurde der Java-Code verwendet? Wenn es sich um ein schickes Double-Buffering-System handelt, werden Sie in Winforms wahrscheinlich nicht die gleichen Ergebnisse erzielen, wenn Sie Pixel direkt auf dem Bildschirm darstellen.

Sie werden wahrscheinlich die besten Ergebnisse, wenn Sie für die Keywords Googeln: DirectX C#

Update: die OP wusste nicht, welche Sprache es war.

+0

Es ist nicht Java - es verarbeitet –

+0

Ich habe den Titel und die Tags der Frage entsprechend bearbeitet. –

2

Wenn Sie versuchen, Pixel zu manipulieren und auf den Bildschirm zu zeichnen, während eine hohe Framerate beibehalten wird Sie wahrscheinlich suchen in System.Drawing.Bitmap mit Lockbits und UnLockBits gehen zu wollen.

Eine gute Erklärung kann here finden. Sonst werden Sie nicht wirklich in der Lage sein, Änderungen auf Pixelebene mit anständiger Geschwindigkeit vorzunehmen.

+0

Ich empfehle diesen Ansatz, wenn Sie nicht in eine nicht verwaltete Sprache springen möchten. –

1

Wenn Sie processing.org gehen und die Verarbeitung Software herunterladen, können Sie diesen Code in das IDE kopieren. Wenn Sie "Datei> Exportieren" ausführen, wird eine Java-Applet-Version des Programms mit Java-Quellcode erstellt. Dann können Sie vielleicht einen anderen Konverter ausführen, um den C# -Code zu erhalten.

(Beachten Sie, dass dieser Code eine ältere Version von Processing zu sein scheint, ich musste "framerate" in "frameRate" ändern, um es auszuführen. Außerdem musste ich den Befehl "Tools> Create Font ... Um die "Arial-48.vlw" Schriftart-Datei, die benötigt wird, zu erstellen.