2009-06-25 1 views
-1

Я пытаюсь преобразовать этот код из Java в C# (расположенной here)помочь мне преобразовать обработки кода C#

У меня есть некоторый опыт Winform, но не много с рисунком пикселей на Winform приложений.

Я чувствую себя довольно уверенно, я могу преобразовать в большей части методов подразделов им просто непонятен, о том, как я хотел бы обратить indiviual пикселей на экране

помощи или инструменты для преобразования над Java в C# будет очень apprehsated

// 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

Нет точно Java - это обработка –

+0

вы можете объяснить немного больше о том, чего не хватает (я не знаю много о java) – Crash893

+1

Обработка другой язык, который компилируется в JVM - это не Java. Обработка построена с помощью Java и может генерировать байт-код JVM и вызывать Java, но никакой конвертер Java-> C# не знает, что с ним делать. –

ответ

4

Посмотрите на System.Drawing и класс Graphics.

РЕДАКТИРОВАТЬ: Чтобы очистить путаницу, код OP не является Java. Это Processing. В комментариях сказано так, но также вы можете сказать, потому что нет определения класса, нет импорта, а вызовы не являются вызовами Java. Он компилируется в байт-код и взаимодействует с Java, но это не Java - автоматическое преобразование не поможет.

1

Чтобы нарисовать invidual пиксель вы можете использовать:

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

Вы можете посмотреть here.

0

Мы играем Угадаем базовый класс? :)

Этот оригинальный код не представляется полным java, что с глобальными переменными и свободными функциями. Является ли это содержимым декларации класса?

Вопрос в том, в какой среде использовался код Java? Потому что если это причудливая система двойной буферизации, то вы, вероятно, не получите одинаковых результатов в Winforms, построив пиксели непосредственно на экране.

Вы, вероятно, получите лучшие результаты по погуглить по ключевым словам: DirectX C#

Update: ОП не знал, на каком языке он был.

+0

Это не Java - это обработка –

+0

Я отредактировал заголовок вопроса и теги соответственно. –

2

Если вы пытаетесь манипулировать пикселями и рисовать на экране при сохранении высокой частоты кадров, вам, вероятно, захочется заглянуть в System.Drawing.Bitmap, используя блокировки и разблокировки.

Хорошее объяснение можно найти here. В противном случае вы не сможете редактировать пиксельные настройки с любой приличной скоростью.

+0

Я рекомендую использовать этот подход, если вы не хотите спрыгивать на неуправляемый язык. –

1

Если вы перейдете на страницу processing.org и загрузите Программное обеспечение для обработки, вы можете скопировать этот код в IDE. Затем, если вы выполните «Файл> Экспорт», он создаст версию апплета для Java-программы, в комплекте с исходным кодом Java. Тогда, возможно, вы можете запустить другой конвертер, чтобы получить код C#.

(Обратите внимание, что этот код выглядит более старой версией обработки, мне пришлось изменить «framerate» на «frameRate» для его запуска. Кроме того, мне пришлось выполнить команду «Инструменты> Создать шрифт ... «для создания файла шрифта« Arial-48.vlw », который необходим.)

Смежные вопросы