【发布时间】:2017-06-21 14:06:09
【问题描述】:
我正在想办法在点击时放大我的 Mandelbrot 集。我有它,所以当我点击它时它会稍微放大,但它不会相应地移动 Mandelbrot。
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;
using System.Numerics;
namespace Project_V2
{
public partial class FractalGen : Form
{
public double zoom = 2.4;
public FractalGen()
{
InitializeComponent();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
zoom -= 0.3;
Mandelbrot();
}
private void button1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
Mandelbrot();
}
private void timer1_Tick(object sender, EventArgs e)
{
}
private void Mandelbrot()
{
Bitmap bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
DateTime StartT = DateTime.Now;
for (int x = 0; x < pictureBox1.Width; x++)
{
for (int y = 0; y < pictureBox1.Height; y++)
{
double a = (double)(x - (pictureBox1.Width / 1.25)) / (double)(pictureBox1.Width / zoom);
double b = (double)(y - (pictureBox1.Height / 2)) / (double)(pictureBox1.Height / zoom);
Complex C = new Complex(a, b);
Complex Z = new Complex(0, 0);
int u = 0;
do
{
u++;
Z = Z * Z;
Z = Z + C;
double Mag = Complex.Abs(Z);
if (Mag > 2.0) break;
} while (u < 255);
Color rgbInside = Color.FromArgb(0, 0, 0);
Color rgbOutside = Color.FromArgb(u >= 127 ? 255 : 2 * u, u >= 127 ? (u - 127) : 0, 0);
bm.SetPixel(x, y, u < 255 ? rgbOutside : rgbInside);
}
}
pictureBox1.Image = bm;
DateTime EndT = DateTime.Now;
string Time = Convert.ToString((EndT - StartT).TotalSeconds);
textBox1.Text = "Time Taken: " + Time + " Seconds";
}
private void button1_Click_1(object sender, EventArgs e)
{
zoom = 2.4;
Mandelbrot();
}
private void button2_Click(object sender, EventArgs e)
{
saveFileDialog1.ShowDialog();
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
string name = saveFileDialog1.FileName;
pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
当前代码将图片框的宽度和高度除以一个值,但我想要它,以便它放大我单击的位置。 如何相对于我点击的位置缩放图片框?
【问题讨论】:
-
您需要检索并使用鼠标位置。这个答案有解决方案,甚至准备一个图片框stackoverflow.com/questions/7055211/…
-
忘掉图片框,专注于数据! - 哦,我以前告诉过你,你忽略了它。那么,祝你好运..
-
@TaW:“我以前告诉过你”——在什么情况下?您提供该信息的地方是否存在已删除的问题?了解已经向 OP 提供了哪些建议、更好地理解他们可能已经听到的内容以及他们可能难以理解的内容会有所帮助。
-
@Peter:在this question 中,我告诉他将计算与着色代码分开并存储数据('k 值'),以便以后可以应用/玩颜色。由于无法缩放,他可能无法完全看到计算会变得多么缓慢以及结果是多么宝贵......
-
@TaW:啊,我明白了。感谢您的链接。你是对的......他可能很快就会发现最好只做一次计算。也就是说,无论如何,缩放主要否定了过去结果的有用性。但他肯定不想为了摆弄颜色映射而重新渲染具有大量插入点的字段。
标签: c# windows fractals mandelbrot