<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Mandelbrot-Menge komische Figur]]></title><description><![CDATA[<p>Hallo,</p>
<p>wir sollten ein Programm schreiben, was deine Mandelbrot Menge darstellt.</p>
<p><a href="http://img64.imageshack.us/f/mandelbrotb.jpg/" rel="nofollow">http://img64.imageshack.us/f/mandelbrotb.jpg/</a></p>
<p>Das Ergebnis schaut komisch aus.</p>
<p>hier die wichtigsten Funktionen</p>
<pre><code class="language-cpp">int CApfel::getAnzIt(CComplex C, int Nmax, int Max)
{
	int n=0;
	CComplex z;
	while ((z.getBetrag()&lt;Max) &amp;&amp; (n&lt;Nmax))
	{
		z=z*z+C;
		n++;
	}
	return n;
}
</code></pre>
<pre><code class="language-cpp">double CComplex::getBetrag()	
{
	return (sqrt(pow(real,2)+pow(ima,2)));
}
</code></pre>
<pre><code class="language-cpp">double CMandelmaenchenDlg::aufloesungX()
{
	double xSchritt;
	xSchritt=(C1R-C2R)/250.;
	return xSchritt;
}

double CMandelmaenchenDlg::aufloesungY()
{
	double ySchritt;
	ySchritt=(C1I-C2I)/250.;
	return ySchritt;
}

void CMandelmaenchenDlg::OnBnClickedBberechnen()
{
	UpdateData(true);
	CClientDC dc(this);
	for (int y=0;y&lt;250;y++)
	{
		for (int x=0;x&lt;250;x++)
		{
			CComplex cAktuell(C1R+x*aufloesungX(),C1I-y*aufloesungY());
			int n=Apfel.getAnzIt(cAktuell, Nmax, Max);
			dc.SetPixel(x+275,y+22,RGB(2*n,2*n,0));
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/269693/mandelbrot-menge-komische-figur</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 22:16:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269693.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jun 2010 21:42:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Tue, 29 Jun 2010 21:42:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wir sollten ein Programm schreiben, was deine Mandelbrot Menge darstellt.</p>
<p><a href="http://img64.imageshack.us/f/mandelbrotb.jpg/" rel="nofollow">http://img64.imageshack.us/f/mandelbrotb.jpg/</a></p>
<p>Das Ergebnis schaut komisch aus.</p>
<p>hier die wichtigsten Funktionen</p>
<pre><code class="language-cpp">int CApfel::getAnzIt(CComplex C, int Nmax, int Max)
{
	int n=0;
	CComplex z;
	while ((z.getBetrag()&lt;Max) &amp;&amp; (n&lt;Nmax))
	{
		z=z*z+C;
		n++;
	}
	return n;
}
</code></pre>
<pre><code class="language-cpp">double CComplex::getBetrag()	
{
	return (sqrt(pow(real,2)+pow(ima,2)));
}
</code></pre>
<pre><code class="language-cpp">double CMandelmaenchenDlg::aufloesungX()
{
	double xSchritt;
	xSchritt=(C1R-C2R)/250.;
	return xSchritt;
}

double CMandelmaenchenDlg::aufloesungY()
{
	double ySchritt;
	ySchritt=(C1I-C2I)/250.;
	return ySchritt;
}

void CMandelmaenchenDlg::OnBnClickedBberechnen()
{
	UpdateData(true);
	CClientDC dc(this);
	for (int y=0;y&lt;250;y++)
	{
		for (int x=0;x&lt;250;x++)
		{
			CComplex cAktuell(C1R+x*aufloesungX(),C1I-y*aufloesungY());
			int n=Apfel.getAnzIt(cAktuell, Nmax, Max);
			dc.SetPixel(x+275,y+22,RGB(2*n,2*n,0));
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1919136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919136</guid><dc:creator><![CDATA[pumple]]></dc:creator><pubDate>Tue, 29 Jun 2010 21:42:43 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Tue, 29 Jun 2010 21:49:59 GMT]]></title><description><![CDATA[<p>pumple schrieb:</p>
<blockquote>
<p>Das Ergebnis schaut komisch aus.</p>
</blockquote>
<p>Stimmt. Danke für die Info!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919138</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Tue, 29 Jun 2010 21:49:59 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Tue, 29 Jun 2010 21:50:58 GMT]]></title><description><![CDATA[<p>Das sieht so aus, als ob die Iterationstiefe nicht genügend hoch ist.</p>
<p>btw:<br />
Du bist im völlig falschen Unteforum. Es gibt eines für Grafik/Spieleprogrammierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919139</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 29 Jun 2010 21:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Tue, 29 Jun 2010 22:10:47 GMT]]></title><description><![CDATA[<p>Du solltest schon etwas kompilierbares liefern. Zumindest mal die CComplex-Klasse, besser aber gleich <a href="http://www.cplusplus.com/reference/std/complex/" rel="nofollow">complex&lt;double&gt;</a> verwenden.</p>
<p>Edit: liegt womöglich wirklich an CComplex, denn:</p>
<pre><code class="language-cpp">#include &lt;complex&gt;
int getAnzIt(complex&lt;double&gt; C, int Nmax, int Max)
{
    int n=0;
    complex&lt;double&gt; z;
    while (abs(z)&lt;Max &amp;&amp; n&lt;Nmax)
    {
        z=z*z+C;
        n++;
    }
    return n;
}

[...]
  const int width=800,height=600;
  const double l=-2,r=1,t=-1,b=1;
  const double xstep=(r-l)/width,ystep=(b-t)/height;
  for (int y=0;y&lt;height;y++)
  {
    for (int x=0;x&lt;width;x++)
    {
      int n=getAnzIt(complex&lt;double&gt;(l+x*xstep,t+y*ystep),50,1000);
      canvas.setPixel(x,y,RGB(n*2,n*2,0));
    }
  }
</code></pre>
<p>liefert bei mir das:<br />
<a href="http://94.23.22.190/etc/mandel.png" rel="nofollow">http://94.23.22.190/etc/mandel.png</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919140</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 29 Jun 2010 22:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Wed, 30 Jun 2010 14:52:55 GMT]]></title><description><![CDATA[<p>Liegt wohl doch an meiner CComplex Klasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>edit: hab den Fehler gefunden.<br />
Ich hatte zur besseren aufgabe die Werte auf 0 gesetzt wenn der Imaginär oder Realteil &lt;0.0000001 wird.<br />
Kommentier ich das raus, funktionierts auch.</p>
<p>complex.h</p>
<pre><code class="language-cpp">#pragma once
#include &lt;iostream&gt;
using namespace std;

class CComplex
{
private:
	double real,ima;
public:
	CComplex(double r=0, double i=0);
	void ausgabeKartesisch();
	void ausgabeExponential();
	double getRealteil();
	double getImaginaerteil();
	double getBetrag();
	double getPhaseBogen();
	double getPhaseGrad();
	void setImaginaerteil(double x);
	void setRealteil(double x);
	void setBetrag(double x);
	void setPhase(double x);
	friend void operator+=(CComplex &amp;c1, CComplex &amp;c2);
	friend void operator-=(CComplex &amp;c1, CComplex &amp;c2);
	friend istream &amp;operator&gt;&gt; (istream &amp;is, CComplex &amp;c);
	~CComplex(void);
};

CComplex operator+(CComplex c1,CComplex c2);
CComplex operator+(CComplex c1, double x);
CComplex operator+(double x,CComplex &amp;c2);
CComplex operator++(CComplex c);
CComplex operator-(CComplex c1,CComplex c2);
CComplex operator-(CComplex c1, double x);
CComplex operator-(double x,CComplex c2);
CComplex operator-(CComplex c);
CComplex operator--(CComplex c);
CComplex operator/(CComplex c1,CComplex c2);
CComplex operator/(CComplex c1, double x);
CComplex operator/(double x,CComplex c2);
CComplex operator*(CComplex c1,CComplex c2);
CComplex operator*(CComplex c1, double x);
CComplex operator*(double x,CComplex c2);
bool operator==(CComplex c1, CComplex c2);
bool operator==(CComplex c1, double x);
bool operator==(double, CComplex c2);
bool operator!=(CComplex c1, CComplex c2);
bool operator!=(CComplex c1, double x);
bool operator!=(double, CComplex c2);
ostream&amp; operator&lt;&lt;(ostream &amp;os,CComplex c);
void imaRealNull (CComplex &amp;c);
</code></pre>
<p>Complex.cpp</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;Complex.h&quot;
#include &lt;math.h&gt;
#include &lt;iostream&gt;
using namespace std;

const double pi=3.14159265;
//Start der Klassenfunktionen:
CComplex::CComplex(double r,double i)
{
	real = r;
	ima = i;
}

CComplex::~CComplex(void){}
void CComplex::ausgabeKartesisch()
{
	cout &lt;&lt; &quot;Kartesiche Schreiweise: &quot; &lt;&lt; real &lt;&lt; &quot; + j&quot; &lt;&lt; ima;
}
void CComplex::ausgabeExponential()
{
	cout &lt;&lt; &quot;Exponentialschreibweise: &quot; &lt;&lt; getBetrag() &lt;&lt; &quot;e^(j&quot; &lt;&lt; getPhaseGrad() &lt;&lt; &quot;)&quot;;
}
double CComplex::getRealteil()
{
	return (real);
}
double CComplex::getImaginaerteil()
{
	return (ima);
}	
double CComplex::getBetrag()	
{
	return (sqrt(pow(real,2)+pow(ima,2)));
}	
double CComplex::getPhaseBogen()
{
	if (ima&lt;0 &amp;&amp; real==0)
		return (-pi/2);
	if (ima&gt;0 &amp;&amp; real==0)
		return (pi/2);
	if (ima==0 &amp;&amp; real==0)
		return (0);
	else
		return (atan(ima/real));
}
double CComplex::getPhaseGrad()
{
	return (CComplex::getPhaseBogen()*(360/(2*pi)));
}
void CComplex::setImaginaerteil(double x)
{
	ima = x;
}
void CComplex::setRealteil(double x)
{
	real = x;
}
void CComplex::setBetrag(double x)
{
	double temp=getPhaseBogen();
	ima = x*sin(temp);
	real = x*cos(temp);
}
void CComplex::setPhase(double x)
{
	double temp=getBetrag();
	ima = temp*sin(x*2*pi/360);
	real = temp*cos(x*2*pi/360);
}
//Ende der Klassenfunktionen

//Start der Friendfunktionen:
//Überladen des &quot;+=&quot; Operators
void operator+=(CComplex &amp;c1, CComplex &amp;c2)
{
	c1.real += c2.real; 
	c1.ima += c2.ima;
}
//Überladen des &quot;-=&quot; Operators
void operator-=(CComplex &amp;c1, CComplex &amp;c2)
{
	c1.real -= c2.real; 
	c1.ima -= c2.ima;
}
//Überladen des &quot;&gt;&gt;&quot; Operators für cin
istream &amp;operator&gt;&gt; (istream &amp;is, CComplex &amp;c)
{
   is &gt;&gt; c.real &gt;&gt; c.ima;
   return is;
}
//Ende der Friendfunktionen

//Überladen des &quot;+&quot; Operators durch drei Funktionen
CComplex operator+(CComplex c1,CComplex c2)
{
	return CComplex(c1.getRealteil()+c2.getRealteil(),c1.getImaginaerteil()+c2.getImaginaerteil());
}
CComplex operator+(CComplex c1, double x)
{
	return CComplex(c1.getRealteil()+x,c1.getImaginaerteil());
}
CComplex operator+(double x,CComplex &amp;c2)
{
	return CComplex(x+c2.getRealteil(),c2.getImaginaerteil());
}
//Überladen des &quot;++&quot; Operators
CComplex operator++(CComplex c)
{
	return CComplex(c.getRealteil()+1,c.getImaginaerteil()+1);
}

//Überladen des &quot;-&quot; Operators durch drei Funktionen
CComplex operator-(CComplex c1,CComplex c2)
{
	return CComplex(c1.getRealteil()-c2.getRealteil(),c1.getImaginaerteil()-c2.getImaginaerteil());
}
CComplex operator-(CComplex c1, double x)
{
	return CComplex(c1.getRealteil()-x,c1.getImaginaerteil());
}
CComplex operator-(double x,CComplex c2)
{
	return CComplex(x-c2.getRealteil(),-c2.getImaginaerteil());
}
CComplex operator-(CComplex c)
{
	return CComplex(-c.getRealteil(),-c.getImaginaerteil());
}
//Überladen des &quot;--&quot; Operators
CComplex operator--(CComplex c)
{
	return CComplex(c.getRealteil()-1,c.getImaginaerteil()-1);
}
//Überladen des &quot;/&quot; Operators durch drei Funktionen
CComplex operator/(CComplex c1,CComplex c2)
{
	CComplex temp(0,0);
	temp.setBetrag(c1.getBetrag()/c2.getBetrag());
	temp.setPhase(c1.getPhaseGrad()-c2.getPhaseGrad());
	imaRealNull(temp);
	return CComplex(temp);
}
CComplex operator/(CComplex c1, double x)
{
	CComplex temp(0,0);
	temp.setBetrag(c1.getBetrag()/x);
	imaRealNull(temp);
	return CComplex(temp);
}
CComplex operator/(double x,CComplex c2)
{
	CComplex temp(0,0);
	temp.setBetrag(x/c2.getBetrag());
	temp.setPhase(-c2.getPhaseGrad());
	return CComplex(temp);
}
//Überladen des &quot;*&quot; Operators durch drei Funktionen
CComplex operator*(CComplex c1,CComplex c2)
{
	CComplex temp(1,1);
	temp.setBetrag(c1.getBetrag()*c2.getBetrag());
	temp.setPhase(c1.getPhaseGrad()+c2.getPhaseGrad());
	imaRealNull(temp);
	return CComplex(temp);
}
CComplex operator*(CComplex c1, double x)
{
	CComplex temp(1,1);
	temp.setBetrag(c1.getBetrag()*x);
	temp.setPhase(c1.getPhaseGrad());
	imaRealNull(temp);
	return CComplex(temp);
}
CComplex operator*(double x,CComplex c2)
{
	CComplex temp(1,1);
	temp.setBetrag(x*c2.getBetrag());
	temp.setPhase(c2.getPhaseGrad());
	imaRealNull(temp);
	return CComplex(temp);
}

//Überladen des &quot;==&quot; Operators durch drei Funktionen
bool operator==(CComplex c1, CComplex c2)
{
	if (c1.getRealteil()==c2.getRealteil() &amp;&amp; c1.getImaginaerteil()== c2.getImaginaerteil())
		return true;
	else
		return false;
}

bool operator==(CComplex c1, double x)
{
	if (c1.getRealteil()==x &amp;&amp; c1.getImaginaerteil()== 0)
		return true;
	else
		return false;
}

bool operator==(double x, CComplex c2)
{
	if (x==c2.getRealteil() &amp;&amp; 0 == c2.getImaginaerteil())
		return true;
	else
		return false;
}
//Überladen des &quot;!=&quot; Operators durch drei Funktionen
bool operator!=(CComplex c1, CComplex c2)
{
	if (c1==c2)
		return false;
	else
		return true;
}

bool operator!=(CComplex c1, double x)
{
	if (c1==x)
		return false;
	else
		return true;
}

bool operator!=(double x, CComplex c2)
{
	if (x==c2)
		return false;
	else
		return true;
}

//Überladen des &quot;&lt;&lt;&quot; Operators für cout
ostream&amp; operator&lt;&lt;(ostream &amp;os,CComplex c)
{
	if (c.getImaginaerteil()==0)
		os &lt;&lt; c.getRealteil();
	if (c.getImaginaerteil()&lt;0)
		os &lt;&lt; c.getRealteil() &lt;&lt; &quot; - j&quot; &lt;&lt; -c.getImaginaerteil();
	if (c.getImaginaerteil()&gt;0)
		os &lt;&lt; c.getRealteil() &lt;&lt; &quot; + j&quot; &lt;&lt; c.getImaginaerteil();
	return os;
}
// Funktion um eine null zu erhalten, wenn der Wert des Imaginaer- oder Realteil gegen Null geht.
void imaRealNull (CComplex &amp;c)
{
	if (c.getRealteil()&lt;0.0000001)
		c.setRealteil(0);
	if (c.getImaginaerteil()&lt;0.0000001)
		c.setImaginaerteil(0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1919505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919505</guid><dc:creator><![CDATA[pumple]]></dc:creator><pubDate>Wed, 30 Jun 2010 14:52:55 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Wed, 30 Jun 2010 14:49:27 GMT]]></title><description><![CDATA[<p>Dann würde ich mir die Implementation der Multiplikation noch einmal in Ruhe anschauen. Wenn ich complex&lt;double&gt; durch CComplex ersetze, sieht das dann hier auch abenteuerlich aus:<br />
<a href="http://94.23.22.190/etc/mandel2.png" rel="nofollow">http://94.23.22.190/etc/mandel2.png</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919521</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Wed, 30 Jun 2010 14:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Wed, 30 Jun 2010 15:06:34 GMT]]></title><description><![CDATA[<p>haste die Funktion imaRealNull(temp); rauskommentiert?</p>
<p>Dann siehst bei mir aus, wie es aussehen soll</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919528</guid><dc:creator><![CDATA[pumple]]></dc:creator><pubDate>Wed, 30 Jun 2010 15:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Wed, 30 Jun 2010 15:09:14 GMT]]></title><description><![CDATA[<p>pumple schrieb:</p>
<blockquote>
<p>haste die Funktion imaRealNull(temp); rauskommentiert?</p>
<p>Dann siehst bei mir aus, wie es aussehen soll</p>
</blockquote>
<p>Nein, das hatte ich vor der Korrektur geschrieben.<br />
Ohne imaRealNull funktioniert es, allerdings geht die Berechnung mit complex&lt;double&gt; fast 30 mal schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919529</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Wed, 30 Jun 2010 15:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Wed, 30 Jun 2010 15:26:53 GMT]]></title><description><![CDATA[<p>So multipliziert man doch keine komplexen Zahlen, das wird doch arschlahm, mit Phase und trigonometrischen Funktionen...</p>
<p>Eine komplexe Zahl ist definiert als z = a + jb.</p>
<p>Also ist</p>
<p>z1 * z2 =<br />
(a1 + jb1) * (a2 + jb2) =<br />
(a1 a2 + j a1 b2 + j b1 a2 + j j b1 b2) = [mit j j = -1]<br />
(a1 a2 - b1 b2) + j (a1 b2 + b1 a2)</p>
<p>Das dürfte bißchen schneller und bißchen genauer sein.</p>
<p>[In <a href="http://www.baeckmann.de/pdf/DFT.pdf" rel="nofollow">http://www.baeckmann.de/pdf/DFT.pdf</a> Seite 39 steht noch, wie man auch diese Multiplikation u.U. noch etwas schneller machen kann.]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919544</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Wed, 30 Jun 2010 15:26:53 GMT</pubDate></item><item><title><![CDATA[Reply to Mandelbrot-Menge komische Figur on Wed, 30 Jun 2010 15:30:52 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>allerdings geht die Berechnung mit complex&lt;double&gt; fast 30 mal schneller.</p>
</blockquote>
<p>Wenn man sich sowas anschaut, ist das auch nicht allzu verwunderlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">CComplex operator*(CComplex c1,CComplex c2)
{
	CComplex temp(1,1);
	temp.setBetrag(c1.getBetrag()*c2.getBetrag());
	temp.setPhase(c1.getPhaseGrad()+c2.getPhaseGrad());
	imaRealNull(temp);
	return CComplex(temp);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1919549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919549</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 30 Jun 2010 15:30:52 GMT</pubDate></item></channel></rss>