سؤال

ليس لدي أي خبرة في البرمجة صور النمطي هندسي متكرر.بالطبع لقد رأيت الشهير ماندلبروت الصور هذه.

يمكن أن تقدم لي مع خوارزميات بسيطة للحصول على صور النمطي هندسي متكرر.

لغة البرمجة لا يهم حقا, ولكن أنا أكثر دراية مع أكشن, C#, Java.

وأنا أعلم أنه إذا كنت جوجل فركتلات, أحصل على الكثير من (معقدة) المعلومات ولكن أود أن تبدأ مع خوارزمية بسيطة واللعب معها.

اقتراحات لتحسين الخوارزمية الأساسية هي أيضا موضع ترحيب ، مثل كيفية جعل لهم في تلك الألوان الجميلة هذه.

هل كانت مفيدة؟

المحلول

وبرمجة ماندلبروت أمرا سهلا.
قانون بلدي سريع ن القذرة أقل (لا يضمن أن تكون خالية من الشوائب، ولكن مخطط جيد).

وفيما يلي الخطوط العريضة: ماندلبروت-مجموعة يكمن في مجمع الشبكة بالكامل داخل دائرة نصف قطرها 2.

وهكذا، تبدأ من خلال مسح كل نقطة في هذا المجال مستطيلة. تمثل كل نقطة بعدد مجمع (س + يي). تكرار هذا العدد معقدة:

و[new value] = [old-value]^2 + [original-value] بينما تتبع أمرين:

1) عدد التكرارات

2) المسافة من [القيمة الجديدة] من الأصل.

وإذا وصلت إلى الحد الأقصى لعدد مرات التكرار، الانتهاء من ذلك. إذا كانت المسافة من أصل أكبر من 2، الانتهاء من ذلك.

وعندما تنتهي من ذلك، لون بكسل الأصلي حسب عدد التكرارات قمت به. ثم ننتقل إلى بكسل المقبل.

    public void MBrot()
    {
        float epsilon = 0.0001; // The step size across the X and Y axis
        float x;
        float y;
        int maxIterations = 10; // increasing this will give you a more detailed fractal
        int maxColors = 256; // Change as appropriate for your display.

        Complex Z;
        Complex C;
        int iterations;
        for(x=-2; x<=2; x+= epsilon)
        {
            for(y=-2; y<=2; y+= epsilon)
            {
                iterations = 0;
                C = new Complex(x, y);
                Z = new Complex(0,0);
                while(Complex.Abs(Z) < 2 && iterations < maxIterations)
                {
                    Z = Z*Z + C;
                    iterations++;
                }
                Screen.Plot(x,y, iterations % maxColors); // depending on the number of iterations, color a pixel.
            }
        }
    }

وبعض تفاصيل استبعاده هي:

1.) تعلم بالضبط ما سكوير عدد مجمع هو وكيفية حساب ذلك.

2) معرفة كيفية ترجمة (-2،2) منطقة مستطيلة إلى إحداثيات الشاشة.

نصائح أخرى

يجب أن تبدأ في الواقع مع مجموعة ماندلبروت, وفهم ما هو عليه حقا.

الفكرة وراء ذلك هو بسيط نسبيا.عليك أن تبدأ مع وظيفة معقدة متغير

f(z) = z2 + ج

حيث z هي معقدة متغير و C هي معقدة ثابت.الآن يمكنك تكرار ذلك بدءا من z = 0 ، أييمكنك حساب z1 = f(0), z2 = f(z1) ، z3 = f(z2) وهلم جرا.مجموعة من تلك الثوابت C التي تسلسل z1, z2, z3, ...هو يحدها, أيفإنه لا يذهب إلى ما لا نهاية ، هو مجموعة ماندلبروت (السوداء في الشكل على صفحة ويكيبيديا).

في الممارسة العملية ، إلى رسم مجموعة ماندلبروت يجب أن:

  • اختيار مستطيل في مجمع الطائرة (من نقطة -2-2 طاء إلى النقطة 2+2).
  • تغطية مستطيل مناسب شبكة مستطيلة من النقاط (مثلا ، 400x400 نقطة) ، والتي سيتم تعيينها إلى بكسل على الشاشة.
  • لكل نقطة/بكسل ، والسماح ج أن تكون هذه النقطة, حساب, يقول, 20 حيث المقابلة يتحرك تسلسل z1, z2, z3, ...وتحقق ما إذا كان "يذهب إلى ما لا نهاية".في الواقع يمكنك التحقق ، في حين بالتكرار ، إذا كانت القيمة المطلقة واحدة من 20 حيث هو أكبر من 2 (إذا كان أحد الشروط ، اللاحقة حيث يتم ضمان أن يكون غير محدود).إذا كان بعض z_k لا تسلسل "يذهب إلى ما لا نهاية";وإلا, يمكنك أن تنظر في ذلك كما يحدها.
  • إذا تسلسل المقابلة إلى نقطة معينة C يحدها ، رسم المقابلة بكسل في الصورة باللون الأسود (على أنه ينتمي إلى مجموعة ماندلبروت).وإلا رسم ذلك في لون آخر.إذا كنت تريد أن يكون متعة وإنتاج جدا المؤامرات ، استدراجه في ألوان مختلفة اعتمادا على حجم المنافع(20 الأجل).

في الحقيقة المذهلة عن فركتلات هو كيف يمكننا الحصول على عدد هائل مجموعة معقدة (على وجه الخصوص ، الحدود من مجموعة ماندلبروت) من السهل على ما يبدو غير ضار المتطلبات.

استمتع!

إذا الأعداد المركبة تعطيك الصداع، وهناك مجموعة واسعة من فركتلات التي يمكن أن تصاغ باستخدام نظام L. وهذا يتطلب بضع طبقات التفاعل، ولكن كل المثير للاهتمام في ذلك الحق الخاص.

أولا تحتاج سلحفاة. الأمام، الى الوراء، يسار، يمين، القلم المتابعة، القلم إلى أسفل. وهناك الكثير من الأشكال متعة ليكون مع الرسومات سلحفاة باستخدام الهندسة سلحفاة حتى بدون دفعه إلى الأمام L-النظام. البحث عن "الرسومات LOGO" أو "الرسومات سلحفاة". A نظام LOGO هو في الواقع <لأ href = "HTTP: // en.wikipedia.org/wiki/Lisp_(programming_language) "يختلط =" نوفولو noreferrer "> اللثغة بيئة البرمجة باستخدام unparenthesized <لأ href =" http://en.wikipedia.org/wiki/S-expression "يختلط =" نوفولو noreferrer "> كامبريدج البولندية بناء الجملة. ولكن لم يكن لديك للذهاب نحو هذا الحد للحصول على بعض صور جميلة باستخدام مفهوم السلاحف.

وبعد ذلك كنت في حاجة الى طبقة لتنفيذ أي نظام L. ترتبط النظم L ل بعد أنظمة و <لأ href = "HTTP: // EN .wikipedia.org / ويكي / شبه Thue_system "يختلط =" نوفولو noreferrer "> أنظمة Thue نصف ، ومثل virii، فإنها تنتشر على الحدود تورينج الاكتمال. هذا المفهوم هو إعادة كتابة سلسلة . ويمكن تنفيذها باعتبارها التوسع الكلي أو إجراء مع مجموعة ضوابط اضافية لبد من الإعادة. إذا كنت تستخدم التوسع الكلي (كما في المثال أدناه)، وسوف لا تزال بحاجة إلى إجراءات المنصوص إلى خريطة الرموز لأوامر السلاحف وإجراء تكرار خلال سلسلة أو مجموعة لتشغيل البرنامج سلحفاة المشفرة. لمجموعة الإجراء يحدها-العودية ( على سبيل المثال. )، يمكنك تضمين الأوامر سلحفاة في الإجراءات وإما إضافة الشيكات على مستوى العودية إلى كل إجراء أو عامل بها إلى وظيفة المعالج.

وهنا مثال من شجرة وفيثاغورس "في حاشية باستخدام الكلي التوسع ومجموعة مختصرة جدا من الأوامر السلاحف. لبعض الأمثلة في بيثون والرياضيات، أرى كود التحدي الغولف .

وهناك كتاب كبير يسمى الفوضى والكسور التي لديها سبيل المثال رمز بسيط في نهاية كل فصل أن تنفذ بعض كسورية أو غيرها مثلا. منذ زمن طويل عندما قرأت هذا الكتاب، وأنا حولت كل برنامج عينة (في بعض لهجة بسيطة) في برنامج Java الذي يعمل على صفحة ويب. وتطبيقات هنا: http://hewgill.com/chaos-and-fractals/

واحد من العينات هو تطبيق ماندلبروت بسيط.

وكسورية ممتازة أخرى لتعلم هي Sierpinski مثلث كسورية.

والأساس، ورسم ثلاث زوايا مثلث (ويفضل على متساوي الأضلاع، ولكن أي مثلث العمل)، ثم تبدأ نقطة P في واحدة من تلك الزوايا. نقل P منتصف الطريق على أي من 3 زوايا عشوائيا، ورسم نقطة هناك. مرة أخرى تتحرك P منتصف الطريق نحو أي عشوائي الزاوية، التعادل، وتكرار.

وكنت أعتقد أن الحركة العشوائية خلق نتيجة عشوائية، ولكنه في الحقيقة ليس كذلك.

والمرجعي: http://en.wikipedia.org/wiki/Sierpinski_triangle

وومثلث سيربنسكي ومنحنى كوخ أنواع خاصة من فركتلات اللهب. فركتلات اللهب هي نوع معمم جدا من نظام التوابع التكرارية، لأنه يستخدم وظائف غير الخطية.

وخوارزمية لIFS: وفاق هي كما يلي:

وStart with a random point.

وكرر مرات عديدة التالية (لا يقل عن مليون، وهذا يتوقف على حجم الصورة النهائية):

و Apply one of N predefined transformations (matrix transformations or similar) to the point. An example would be that multiply each coordinate with 0.5. Plot the new point on the screen.

إذا وهذه النقطة هي خارج الشاشة، اختر عشوائيا واحدة جديدة داخل الشاشة بدلا من ذلك.

إذا كنت تريد الألوان جميلة، والسماح للاللون تعتمد على التحول المستخدمة الماضي.

وأود أن تبدأ مع شيء بسيط، مثل كوخ ندفة الثلج . انها عملية بسيطة لاتخاذ موقف وتحويلها، ثم تكرار هذه العملية بشكل متكرر حتى يبدو أنيق س.

وشيء بسيط مثل السوبر اتخاذ 2 نقطة (خط) وإضافة نقطة 3RD (صنع زاوية)، ثم تكرار في كل قسم الجديد الذي تم إنشاؤه.

fractal(p0, p1){
    Pmid = midpoint(p0,p1) + moved some distance perpendicular to p0 or p1;
    fractal(p0,Pmid);
    fractal(Pmid, p1);
}

وأعتقد أنك قد لا ترى فركتلات كما خوارزمية أو شيء من هذا البرنامج. صور النمطي هندسي متكرر هو مفهوم! بل هو مفهوم رياضي من نمط مفصل يعيد نفسه.

لذلك يمكنك إنشاء كسورية في العديد من الطرق، وذلك باستخدام نهج مختلفة، كما هو مبين في الصورة أدناه.

واختيار النهج ومن ثم التحقيق في كيفية تنفيذ ذلك. وقد نفذت هذه الأمثلة الأربعة باستخدام إطار مارفن . هي مصدر القوانين المتاحة <لأ href = "http://sourceforge.net/p/marvinproject/code/HEAD/tree/dev/trunk/MarvinPlugins/src/org/marvinproject/image/render/" يختلط = "نوفولو noreferrer "> هنا

ويتم إنشاء مجموعة ماندلبروت من خلال تقييم مرارا وظيفة حتى تفيض (بعض حد تعريف)، ثم فحص كم من الوقت استغرق لك لتجاوز.

وشبة الكود:

MAX_COUNT = 64 // if we haven't escaped to infinity after 64 iterations, 
               // then we're inside the mandelbrot set!!!

foreach (x-pixel)
  foreach (y-pixel)
    calculate x,y as mathematical coordinates from your pixel coordinates
    value = (x, y)
    count = 0
    while value.absolutevalue < 1 billion and count < MAX_COUNT
        value = value * value + (x, y)
        count = count + 1

    // the following should really be one statement, but I split it for clarity
    if count == MAX_COUNT 
        pixel_at (x-pixel, y-pixel) = BLACK
    else 
        pixel_at (x-pixel, y-pixel) = colors[count] // some color map. 

وملاحظات:

والقيمة هي عدد معقدة. عدد مركب (أ + ب <م> ط) هو مربع لإعطاء (أ على بعد ب * ب + 2 * ل<م> ب ط). سيكون لديك لاستخدام نوع معقد، أو تضمين هذا الحساب في حلقة الخاص بك.

وهنا بسيطة وسهلة لفهم التعليمات البرمجية في جافا على ماندلبروت أخرى كسورية أمثلة

http://code.google.com/p/gaima/wiki/VLFImages

مجرد تحميل BuildFractal.jar الاختبار في جافا وتشغيل مع الأمر:

جافا Xmx1500M -جرة BuildFractal.jar 1000 1000 الافتراضي ماندلبروت

شفرة المصدر هو أيضا مجانا للتحميل/استكشاف/تحرير/التوسع.

حسنا، بسيطة وجذابة بيانيا لا تذهب حقا جنبا إلى جنب. إذا كنت جادا في فركتلات البرمجة، أقترح القراءة على أنظمة التوابع التكرارية والتقدم التي تحققت في جعلها.

http://flam3.com/flame_draves.pdf

والناس فوق يستخدمون إيجاد نقاط المنتصف لsierpinski وكوخ، فما استقاموا لكم فاستقيموا أكثر من ذلك بكثير يوصي نسخ الأشكال، وتوسيع نطاقها، ومن ثم ترجمة لهم لتحقيق التأثير "كسورية". سيكون شبه التعليمات البرمجية في جافا لsierpinski ننظر بشيء من هذا القبيل:

public ShapeObject transform(ShapeObject originalCurve)
    {
        Make a copy of the original curve
        Scale x and y to half of the original
        make a copy of the copied shape, and translate it to the right so it touches the first copied shape
        make a third shape that is a copy of the first copy, and translate it halfway between the first and second shape,and translate it up
        Group the 3 new shapes into one
        return the new shape
    }

وأحيانا البرنامج فركتلات للمتعة وتحديا مطروحا. يمكنك العثور عليها هنا . يتم كتابة التعليمات البرمجية في جافا سكريبت باستخدام مكتبة P5.js ويمكن قراءة مباشرة من شفرة المصدر HTML.

وبالنسبة لأولئك لقد رأيت خوارزميات بسيطة للغاية، مجرد العثور على العنصر الأساسي ثم كرر ذلك مرارا وتكرارا. أفعل ذلك مع وظائف متكررة، ولكن يمكن القيام به بشكل مختلف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top