OpenGLを使用してズームして画面に印刷する機能を備えた、マンデルブロー集合を計算しています。
ご存知のように、マンデルブロー集合は長方形 (右上の点と左下の点) で定義され、「ズームイン」と「ズームアウト」するたびに、左下の点を右上に移動して次の点を変更し、右上はその逆。最終的には、これらの 2 点が互いに出会い、ズーム プロセスが終了するはずです。
多くの YOUTUBE ムービーによると、一部のムービーでは 1000X ズームに到達できることがはっきりとわかります。私のプログラムでは、X6にほとんど到達できません。デバッグ中に、マンデルブロー集合を定義する2つのポイントが互いに到達するのを見ることができます(x1,y1) = (x2,y2)
。
いくつか:
(x1,y1) & (x2,y2)
float として定義されています。代わりに double を使用する必要がありますか? 私のマンデルブローは (512X512) ポイントで定義されています。それで十分?問題に関連しているかどうかはわかりませんが。
私が直面している別の問題は、セットを高さマップ(3Dセット)として印刷していることです。各 Y コンポーネントが、無限に達するまでにかかった反復の量を表す場合。ただし、セット全体をズームインするたびに、カメラの位置がどんどん高くなり、最終的にはカメラがセットによって消費されます。差を計算し、カメラをセットから遠ざける方法はありますか(それに応じてズームポイントから?)
セットを計算するコード:
double ratiox = instance->foundPointOnHost.x / ((instance->constVal[1][0] - instance->constVal[0][0]));;
double ratioy = 1-instance->foundPointOnHost.z / ((instance->constVal[1][1] - instance->constVal[0][1]));;
double xrange = instance->m_GraphConfig.xru-instance->m_GraphConfig.xld;
double yrange = instance->m_GraphConfig.yru-instance->m_GraphConfig.yld;
instance->m_GraphConfig.xld += 5*direction*0.005*ratiox*xrange;
instance->m_GraphConfig.xru -= 5*direction*0.005*(1.-ratiox)*xrange;
instance->m_GraphConfig.yld += 5*direction*0.005*(1.-ratioy)*yrange;
instance->m_GraphConfig.yru -= 5*direction*0.005*ratioy*yrange;
いくつかのこと:
instance->FoundPointOnHost = 拡大したい点。
instance->constVal = セットの元のサイズが含まれています (最初は [xru,yru] [xld,yld] に等しい)
(xru,yru) = 右上セットのポイント (xld,yld) = セットの左下のポイント
ありがとう!