Третий Мандельброт Очарование - PullRequest
0 голосов
/ 06 декабря 2018

в третий раз мой проект работал со сбоями.Сам по себе не работает со сбоями, но абсолютно не делает то, что мне нужно.Итак, мне нужно нарисовать фрактал Мандельброта.Он должен принимать данные от пользователя, такие как максимальные итерации, цвет, масштаб, средний х и средний у.Эти средние координаты - вот что доставляет мне проблемы.Я понятия не имею, как сделать так, чтобы фрактал Мандельброта имел середину х и середину у в качестве своей средней точки на изображении.Не могли бы вы, ребята, помочь мне, пожалуйста?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace practicum_2_poging_2_officieel
{

public partial class Form1 : Form
{
    int hoogte = 400, breedte = 400;
    double xInput, yInput, scaleNum;

    TextBox xInputBox;
    TextBox yInputBox;
    TextBox scaleInputBox;
    TextBox maxInputBox;
    Button okButton;
    PictureBox pictureBox;
    Bitmap bitmap;
    ComboBox comboBox;
    Label middleX;
    Label middleY;
    Label schaal;
    Label max;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        //form aanpassen mooie kleurtjes en naam.
        this.Text = "Mandelbrot Bjorn Jonathan:";
        this.ClientSize = new Size(500, 600);
        this.BackColor = Color.LightBlue;


        //Labels plaats + sizes e.d.
        middleX = new Label();
        middleX.Location = new Point(20, 10);
        middleX.Size = new Size(55, 20);
        middleX.Text = "Midden X:";

        middleY = new Label();
        middleY.Location = new Point(20, 40);
        middleY.Size = new Size(55, 20);
        middleY.Text = "Midden Y:";

        schaal = new Label();
        schaal.Location = new Point(180, 10);
        schaal.Size = new Size(55, 20);
        schaal.Text = "Schaal:";

        max = new Label();
        max.Location = new Point(180, 40);
        max.Size = new Size(90, 20);
        max.Text = "Max herhalingen:";

        //Textbox
        this.xInputBox = new TextBox();
        this.xInputBox.Location = new Point(80, 10);
        this.xInputBox.Size = new Size(80, 20);
        xInputBox.Text = "-2";

        this.yInputBox = new TextBox();
        this.yInputBox.Location = new Point(80, 40);
        this.yInputBox.Size = new Size(80, 20);
        yInputBox.Text = "2";

        this.scaleInputBox = new TextBox();
        this.scaleInputBox.Location = new Point(270, 10);
        this.scaleInputBox.Size = new Size(80, 20);
        scaleInputBox.Text = "0.01";

        this.maxInputBox = new TextBox();
        this.maxInputBox.Location = new Point(270, 40);
        this.maxInputBox.Size = new Size(80, 20);
        maxInputBox.Text = "100";

        //OK okButton
        okButton = new Button();
        okButton.Location = new Point(390, 10);
        okButton.Size = new Size(80, 30);
        okButton.Text = "OK";

        //Box
        pictureBox = new PictureBox();
        pictureBox.Location = new Point(20, 75);
        pictureBox.Size = new Size(400, 400);

        //bitmap
        //Midden bitmap = (252 + 20, 280 +75) = (272, 355)
        bitmap = new Bitmap(breedte, hoogte);

        //Combobox
        comboBox = new ComboBox();
        comboBox.Location = new Point(390, 40);
        comboBox.Size = new Size(80, 20);
        comboBox.Text = "W";
        comboBox.Items.Add("W");
        comboBox.Items.Add("R");
        comboBox.Items.Add("G");
        comboBox.Items.Add("B");


        //Alle Controls.Add
        //Controls voor labels
        this.Controls.Add(middleX);
        this.Controls.Add(middleY);
        this.Controls.Add(max);
        this.Controls.Add(schaal);

        //Controls.Add voor textboxen
        this.Controls.Add(this.xInputBox);
        this.Controls.Add(this.yInputBox);
        this.Controls.Add(this.scaleInputBox);
        this.Controls.Add(this.maxInputBox);

        //Controls voor Box
        this.Controls.Add(pictureBox);

        //okButton
        this.Controls.Add(okButton);

        //Ok en Enter zorgt voor startbereken
        okButton.Click += Invoer;
        okButton.Click += StartBerekening;

        //okButton.Click += Kleuren;
        this.AcceptButton = okButton; //voor enterokButton

        //Controls voor combobox
        this.Controls.Add(comboBox);
        //this.Paint += StartBerekening;
    }

    private void Invoer(object sender, EventArgs e)
    {
        scaleNum = Convert.ToDouble(scaleInputBox.Text);
    }

    //private void StartBerekening(object sender, PaintEventArgs e)
    private void StartBerekening(object sender, EventArgs e)
    {
        double yInput = Convert.ToDouble(yInputBox.Text);
        double xInput = Convert.ToDouble(xInputBox.Text);
        //ComboBox doubleRead = (ComboBox)comboBox.SelectedItem;
        string combVal = (string)comboBox.SelectedItem;
        char combChar = combVal[0];
        for (double x = 0; x < breedte; x++)
        {
            for (double y = 0; y < hoogte; y++)
            {
                int MandelGetal;
                double a, b, Distance, a2;
                xInput = (x - 200) * scaleNum;
                yInput = (y - 200) * scaleNum;
                MandelGetal = 0;

                // a en b op 0
                a = 0;
                b = 0;
                a2 = a;

                //Afstand berekenen tussen O(0,0) en punt P(x,y) mbv Pythagoras
                //Begin distance
                Distance = Math.Pow((Math.Pow(xInput, 2) + Math.Pow(yInput, 2)), 0.5);

                while (Distance < 2 && MandelGetal < Convert.ToInt32(maxInputBox.Text))
                {
                    //verandering van a en b door f(a,b) = (a*a-b*b+x, 2*a*b+y)
                    //a = gebruikt voorgaande a en b
                    a = (a * a) - (b * b) + xInput;
                    //b = gebruikt voorgaande a en b, gebruikt nu nieuwe a
                    b = (2 * a2 * b) + yInput;

                    a2 = a;

                    Distance = Math.Pow((Math.Pow(a, 2) + Math.Pow(b, 2)), 0.5);
                    MandelGetal++;
                }

                if ((MandelGetal % 2) != 0)
                {
                    switch (combChar)
                    {
                        case 'W':
                            bitmap.SetPixel(Convert.ToInt32(x), Convert.ToInt32(y), Color.White);
                            break;
                        case 'R':
                            bitmap.SetPixel(Convert.ToInt32(x), Convert.ToInt32(y), Color.Red);
                            break;
                        case 'G':
                            bitmap.SetPixel(Convert.ToInt32(x), Convert.ToInt32(y), Color.Green);
                            break;
                        case 'B':
                            bitmap.SetPixel(Convert.ToInt32(x), Convert.ToInt32(y), Color.Blue);
                            break;

                    }
                }
                else
                {
                    bitmap.SetPixel(Convert.ToInt32(x), Convert.ToInt32(y), Color.Black);
                }
            }
        }
        pictureBox.Image = bitmap;
    }
}

}

...