<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[انجمن RFsoft - تمام انجمن‌ها]]></title>
		<link>http://rfsoft.ir/forum/</link>
		<description><![CDATA[انجمن RFsoft - http://rfsoft.ir/forum]]></description>
		<pubDate>Sun, 05 Feb 2012 18:01:40 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[فرهنگ لغت]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=44</link>
			<pubDate>Sat, 27 Nov 2010 18:00:26 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=44</guid>
			<description><![CDATA[با سلام و تشکر<br />
متاسفانه تاکنون هیچ فرهنگ لغت فارسی به فارسی جهت استفاده در گوشی موبایل نوشته نشده است . خواهشمند است در صورت امکان در این خصوص اقدام نمایید.<br />
با تشکر فراوان]]></description>
			<content:encoded><![CDATA[با سلام و تشکر<br />
متاسفانه تاکنون هیچ فرهنگ لغت فارسی به فارسی جهت استفاده در گوشی موبایل نوشته نشده است . خواهشمند است در صورت امکان در این خصوص اقدام نمایید.<br />
با تشکر فراوان]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[اجرای برنامه های جاوای موبایل در کامپیوتر]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=43</link>
			<pubDate>Wed, 13 Oct 2010 08:57:41 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=43</guid>
			<description><![CDATA[چون خیلی از استفاده کننده گان برنامه های موبایل سایت سوال کردن که چطوری برنامه رو روی کامپیوتر اجرا کنیم این موضوع رو باز کردم شاید به دردشون بخوره:<br />
برنامه ای هست به نام MidPX که بعد از نصب روی کامپیوتر می تونید باهاش برنامه های جاوای موبایل رو اجرا کنید.<br />
<br />
لینک دانلود خارجی:<br />
<a href="http://kwyshell.myweb.hinet.net/Project/MidpX/index.html" target="_blank">http://kwyshell.myweb.hinet.net/Project/...index.html</a><br />
<br />
لینک دانلود ایرانی:<br />
<a href="http://www.asandownload.com/mobile/archives/other/soft/download_midpx_emulator_full/" target="_blank">http://www.asandownload.com/mobile/archives/other/soft/download_midpx_emulator_full</a><br />
<br />
در ضمن در مورد ایرادات و اشکالات این برنامه از من سوال نکنید چون نمی تونم کمکتون کنم.]]></description>
			<content:encoded><![CDATA[چون خیلی از استفاده کننده گان برنامه های موبایل سایت سوال کردن که چطوری برنامه رو روی کامپیوتر اجرا کنیم این موضوع رو باز کردم شاید به دردشون بخوره:<br />
برنامه ای هست به نام MidPX که بعد از نصب روی کامپیوتر می تونید باهاش برنامه های جاوای موبایل رو اجرا کنید.<br />
<br />
لینک دانلود خارجی:<br />
<a href="http://kwyshell.myweb.hinet.net/Project/MidpX/index.html" target="_blank">http://kwyshell.myweb.hinet.net/Project/...index.html</a><br />
<br />
لینک دانلود ایرانی:<br />
<a href="http://www.asandownload.com/mobile/archives/other/soft/download_midpx_emulator_full/" target="_blank">http://www.asandownload.com/mobile/archives/other/soft/download_midpx_emulator_full</a><br />
<br />
در ضمن در مورد ایرادات و اشکالات این برنامه از من سوال نکنید چون نمی تونم کمکتون کنم.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[دریافت رمز فعال سازی]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=42</link>
			<pubDate>Sat, 07 Aug 2010 06:24:52 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=42</guid>
			<description><![CDATA[سلام من نسخه 1 این نرم افزار رو رو گوشیم نصب کردم و حالا کد فعال سازی آن را می خواهم تا بتوانم از آن استفاده کنم . لطفا رمز فعال سازی این نرم افزار را در اختیار من قرار دهید . <br />
با تشکر]]></description>
			<content:encoded><![CDATA[سلام من نسخه 1 این نرم افزار رو رو گوشیم نصب کردم و حالا کد فعال سازی آن را می خواهم تا بتوانم از آن استفاده کنم . لطفا رمز فعال سازی این نرم افزار را در اختیار من قرار دهید . <br />
با تشکر]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[بانک صادرات]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=41</link>
			<pubDate>Tue, 08 Jun 2010 12:21:36 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=41</guid>
			<description><![CDATA[سلام <br />
وقتی از صفحه <a href="http://fimorvarid.ir/shop/checkout_confirmation.php" target="_blank">http://fimorvarid.ir/shop/checkout_confirmation.php</a><br />
میره تو صفحه بانک و پرداخت درست انجام میشه و برمیگرده به سایت من<br />
میگه در پرداخت مشکلی به وجود امده و یه نوار قرمر میاد این پیام در جای url یا آدرس صفحه نشون داده میشه<br />
در صورتی که باید به مرحله پایان بره و خرید ثبت بشه<br />
<br />
من همون ماژول شما رو گرفتم و جای آدرس بانک ملی آدرس  بانک صادرات نوشتم<br />
<br />
اگه امکانش هست به شناسه من در یاهو پیام بدید<br />
roli_metal@yahoo.com<br />
با تشکر]]></description>
			<content:encoded><![CDATA[سلام <br />
وقتی از صفحه <a href="http://fimorvarid.ir/shop/checkout_confirmation.php" target="_blank">http://fimorvarid.ir/shop/checkout_confirmation.php</a><br />
میره تو صفحه بانک و پرداخت درست انجام میشه و برمیگرده به سایت من<br />
میگه در پرداخت مشکلی به وجود امده و یه نوار قرمر میاد این پیام در جای url یا آدرس صفحه نشون داده میشه<br />
در صورتی که باید به مرحله پایان بره و خرید ثبت بشه<br />
<br />
من همون ماژول شما رو گرفتم و جای آدرس بانک ملی آدرس  بانک صادرات نوشتم<br />
<br />
اگه امکانش هست به شناسه من در یاهو پیام بدید<br />
roli_metal@yahoo.com<br />
با تشکر]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ماژول پرداخت اینترنتی بانک ملی برای فروشگاه ساز فارسی کامرسی]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=40</link>
			<pubDate>Sun, 09 May 2010 11:55:06 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=40</guid>
			<description><![CDATA[روش SIM (روش يکپارچه سازي ساده) جهت اتصال به سیستم دامون بانک ملی برای فروشگاه ساز فارسی کامرسی در لینک زیر برای دانلود قرار داده شده:<br />
<br />
<a href="http://rfsoft.ir/download/authorizenet_SIM.zip" target="_blank">دانلود ماژول</a><br />
<br />
با توجه به اینکه این روش پرداخت بر پایه روش SIM یا روش يکپارچه سازي ساده است و این روش، یک روش شناخته شده است و قبلا ماژول آن برای oscommerce تهیه شده، بنده فقط با اعمال تغییرات جزئی آن را بومی کرده ام.<br />
<br />
برای نصب آن کافی است دو فایل موجود در فایل فشرده دانلودی را در مسیر مخصوص قرار دهید و با رفتن به قسمت مدیریت پرداخت فروشگاه خود آن را فعال کنید.<br />
<br />
توجه داشته باشید که کد پذیرندگی و کلید تراکنش پیش فرض ماژول فقط جهت تست بوده و برای کارکرد واقعی، باید کد و کلیدی که از طرف بانک به شما داده می شود را جایگزین آن کنید.]]></description>
			<content:encoded><![CDATA[روش SIM (روش يکپارچه سازي ساده) جهت اتصال به سیستم دامون بانک ملی برای فروشگاه ساز فارسی کامرسی در لینک زیر برای دانلود قرار داده شده:<br />
<br />
<a href="http://rfsoft.ir/download/authorizenet_SIM.zip" target="_blank">دانلود ماژول</a><br />
<br />
با توجه به اینکه این روش پرداخت بر پایه روش SIM یا روش يکپارچه سازي ساده است و این روش، یک روش شناخته شده است و قبلا ماژول آن برای oscommerce تهیه شده، بنده فقط با اعمال تغییرات جزئی آن را بومی کرده ام.<br />
<br />
برای نصب آن کافی است دو فایل موجود در فایل فشرده دانلودی را در مسیر مخصوص قرار دهید و با رفتن به قسمت مدیریت پرداخت فروشگاه خود آن را فعال کنید.<br />
<br />
توجه داشته باشید که کد پذیرندگی و کلید تراکنش پیش فرض ماژول فقط جهت تست بوده و برای کارکرد واقعی، باید کد و کلیدی که از طرف بانک به شما داده می شود را جایگزین آن کنید.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ایده هایی جهت پیاده سازی]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=38</link>
			<pubDate>Sun, 02 May 2010 08:18:54 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=38</guid>
			<description><![CDATA[لطفا ایده های خود را جهت پیاده سازی در یک برنامه تحت ویندوز در پاسخ به این موضوع بیان کنید.]]></description>
			<content:encoded><![CDATA[لطفا ایده های خود را جهت پیاده سازی در یک برنامه تحت ویندوز در پاسخ به این موضوع بیان کنید.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ایده هایی جهت پیاده سازی]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=37</link>
			<pubDate>Sun, 02 May 2010 08:15:22 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=37</guid>
			<description><![CDATA[لطفا ایده های خود را جهت پیاده سازی در یک برنامه موبایل در پاسخ به این موضوع بصورت واضح و کامل بیان کنید.]]></description>
			<content:encoded><![CDATA[لطفا ایده های خود را جهت پیاده سازی در یک برنامه موبایل در پاسخ به این موضوع بصورت واضح و کامل بیان کنید.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب برنامه های موبایل]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=36</link>
			<pubDate>Wed, 28 Apr 2010 08:35:26 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=36</guid>
			<description><![CDATA[نصب برنامه های موبایل انجمن مانند نصب سایر برنامه های جاوا است. چون برای راحتی کاربران هر دوع فایل zip و jar در لینک دانلود قرار داده شده است، ممکن است بعضی از دوستان دوچار اشتباه شوند.<br />
<br />
حال اگر شما فایل zip برنامه را در اختیار دارید آن را از حالت فشرده خارج کنید و فایلی که پسون آن jar است را به گوشی منتقل کنید. و اگر فایل jar را دارید همین فایل را بدون هیچ گونه کاری به گوشی منتقل کنید.<br />
در صورتی که شما برنامه winrar را رو کامپیوتر خود نصب کرده باشید هر دو نوع فایل را به عنوان فایل zip یا فایل فشرده نمایش می دهد. اگر فایل برنامه بصورت jar است نیازی به باز کردن یا از فشرده گی خارج کردن آن نیست و همین فایل را به گوشی منتقل کنید. <br />
روش تشخیص اینکه کدام فایل را در اختیار دارید ساده است. فایل zip حاوی یک فایل دیگر با پسوند jar است یعنی وقتی آن را با winrar باز می کنید فایلی که سه حرف آخر آن jar است در آن وجود دارد ولی فایل jar حاوی چندین فایل است که بعضی از آنها درارای پشوند class هستند باز این یعنی وقتی آن را بوسیله winrar باز می کنید فایلهایی در آن وجود دارد که پنج حرف آخر آن class است.<br />
<br />
روش کلی نصب برنامه های جاوا بدین صورت است که فایل نصب برنامه که پسوند آن jar است را به طریقی به گوشی منتقل می کنند. چندین روش برای انتقال وجود دارد مانند بلوتوث کردن، استفاده از کابل usb، کپی روی مموری کارت گوشی و غیره.<br />
پس از این انتقال گوشی بصورت خودکار برنامه را نصب می کند البته به نوع گوشی نیز بستگی دارد. مثلا در صورت بلوتوث کردن برنامه به گوشی، اگر  گوشی شما نوکیا باشد که باز هم بسته به مدل آن یا بصورت خودکار فرآیند نصب ظاهر می شود یا اینکه با رفتن به قسمت پیام ها آن را انتخاب کرده و فرآیند نصب را طی کنید.<br />
یا اگر برنامه را روی مموری کارت کپی کرده اید با رفتن به مسیر فایل، آن را انتخاب کرده تا فرآیند نصب طی شود.<br />
منظور از فرآیند نصب، انتخاب محل نصب برنامه و تایید پیغام امنیتی مربوطه است که بسته به نوع گوشی متفاوت است.<br />
<br />
در آخر توجه شما را به این موضوع جلب می کنم که، برنامه های این انجمن همگی با ورژن دوم جاوا نوشته شده و امکان نصب آنها روی گوشی هایی که از ورژن دوم جاوا پشتیبانی نمی کنند مانند 6600 نوکیا وجود ندارد.]]></description>
			<content:encoded><![CDATA[نصب برنامه های موبایل انجمن مانند نصب سایر برنامه های جاوا است. چون برای راحتی کاربران هر دوع فایل zip و jar در لینک دانلود قرار داده شده است، ممکن است بعضی از دوستان دوچار اشتباه شوند.<br />
<br />
حال اگر شما فایل zip برنامه را در اختیار دارید آن را از حالت فشرده خارج کنید و فایلی که پسون آن jar است را به گوشی منتقل کنید. و اگر فایل jar را دارید همین فایل را بدون هیچ گونه کاری به گوشی منتقل کنید.<br />
در صورتی که شما برنامه winrar را رو کامپیوتر خود نصب کرده باشید هر دو نوع فایل را به عنوان فایل zip یا فایل فشرده نمایش می دهد. اگر فایل برنامه بصورت jar است نیازی به باز کردن یا از فشرده گی خارج کردن آن نیست و همین فایل را به گوشی منتقل کنید. <br />
روش تشخیص اینکه کدام فایل را در اختیار دارید ساده است. فایل zip حاوی یک فایل دیگر با پسوند jar است یعنی وقتی آن را با winrar باز می کنید فایلی که سه حرف آخر آن jar است در آن وجود دارد ولی فایل jar حاوی چندین فایل است که بعضی از آنها درارای پشوند class هستند باز این یعنی وقتی آن را بوسیله winrar باز می کنید فایلهایی در آن وجود دارد که پنج حرف آخر آن class است.<br />
<br />
روش کلی نصب برنامه های جاوا بدین صورت است که فایل نصب برنامه که پسوند آن jar است را به طریقی به گوشی منتقل می کنند. چندین روش برای انتقال وجود دارد مانند بلوتوث کردن، استفاده از کابل usb، کپی روی مموری کارت گوشی و غیره.<br />
پس از این انتقال گوشی بصورت خودکار برنامه را نصب می کند البته به نوع گوشی نیز بستگی دارد. مثلا در صورت بلوتوث کردن برنامه به گوشی، اگر  گوشی شما نوکیا باشد که باز هم بسته به مدل آن یا بصورت خودکار فرآیند نصب ظاهر می شود یا اینکه با رفتن به قسمت پیام ها آن را انتخاب کرده و فرآیند نصب را طی کنید.<br />
یا اگر برنامه را روی مموری کارت کپی کرده اید با رفتن به مسیر فایل، آن را انتخاب کرده تا فرآیند نصب طی شود.<br />
منظور از فرآیند نصب، انتخاب محل نصب برنامه و تایید پیغام امنیتی مربوطه است که بسته به نوع گوشی متفاوت است.<br />
<br />
در آخر توجه شما را به این موضوع جلب می کنم که، برنامه های این انجمن همگی با ورژن دوم جاوا نوشته شده و امکان نصب آنها روی گوشی هایی که از ورژن دوم جاوا پشتیبانی نمی کنند مانند 6600 نوکیا وجود ندارد.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[انتقال اطلاعات برنامه از طریق بلوتوث]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=35</link>
			<pubDate>Wed, 28 Apr 2010 06:48:08 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=35</guid>
			<description><![CDATA[این آموزش مربوط به برنامه های مینی دخل و خرج، مینی حسابدار و مینی سر رسید است.<br />
توجه داشته باشید که این قسمت از برنامه هیچ ربطی به هک بلوتوث و اینجور چیز ها ندارد و صرفا اطلاعات ذخیره شده مربط به برنامه از یک گوشی به گوشی دیگر از طریق بلوتوث انتقال می یابد. <br />
اینکار هنگام تعویض گوشی بسیار مفید خواهد بود. بویژه زمانی که نوع گوشی ها با هم فرق دارد و از دو برند متفاوت هستند و مموری کارت های آنها با هم فرق دارد. مثل سونی اریکسون و نوکیا.<br />
<br />
در اینجا ما دو گوشی بنام های A و B را داریم که:<br />
A: گوشی که اطلاعات در آن قرار دارد و می خواهیم آن را به گوشی دیگر انتقال دهیم یا همان ارسال کننده.<br />
B: گوشی که دریافت کننده اطلاعات است.<br />
<br />
1- برای شروع کار ابتدا بلوتوث هر دو گوشی را فعال کنید.<br />
2- حال در هر دو گوشی وارد برنامه شده و از منوی اصلی وارد قسمت "امکانات" شوید.<br />
3- در گوشی A گزینه "انتقال اطلاعات به گوشی دیگر" را انتخاب کنید و در گوشی B گزینه "دریافت اطلاعات از گوشی دیگر" را انتخاب کنید.<br />
4- در گوشی B گزینه "Ready" را انتخاب کنید تا آماده دریافت اطلاعات شود. توجه داشته باشید که بسته به نوع گوشی، پیغامی از طرف گوشی نمایش داده می شود که از شما برای فعال شدن بلوتوث کسب اجازه میکند که باید حتما به آن جواب مثبت دهید.<br />
5- در گوشی A گزینه "Search" را انتخاب کنید تا برنامه شروع به جستجوی گوشی های مجاور کند. پس از اتمام جستجو، گوشی B را از لیست انتخاب کرده و OK را بزنید.<br />
6- حال چون قبلا گوشی B را در حالت آماده دریافت قرار داده ایم، در گوشی A گزینه Send را انتخاب کنید تا اطلاعات منتقل شود. این انتقال بسته به حجم اطلاعات ممکن است خیلی سریع یا کمی زمانبر شود. پس تا دریافت پیغامی مبنی بر اتمام انتقال اطلاعات، صبر کنید. توجه داشته باشید که باز هم از طرف گوشی پیغامی جهت تایید انتقال اطلاعات از طریق بلوتوث به شما داده می شود که باید جواب مثبت دهید.<br />
7- پس از دریافت پیغام اتمام دریافت اطلاعات در گوشی B، وارد قسمت ذخیره اطلاعات دریافت شده می شوید، که از شما برای ذخیره و جایگزینی اطلاعات دریافت شده کسب اجازه می کند. که در صورت اطمینان از جایگزینی، گزینه Save را انتخاب کنید.<br />
<br />
حال گوشی B دقیقا همان اطلاعاتی را دارد که گوشی A دارد البته بجزء تنطیمات برنامه ها مثل رمز ورود.]]></description>
			<content:encoded><![CDATA[این آموزش مربوط به برنامه های مینی دخل و خرج، مینی حسابدار و مینی سر رسید است.<br />
توجه داشته باشید که این قسمت از برنامه هیچ ربطی به هک بلوتوث و اینجور چیز ها ندارد و صرفا اطلاعات ذخیره شده مربط به برنامه از یک گوشی به گوشی دیگر از طریق بلوتوث انتقال می یابد. <br />
اینکار هنگام تعویض گوشی بسیار مفید خواهد بود. بویژه زمانی که نوع گوشی ها با هم فرق دارد و از دو برند متفاوت هستند و مموری کارت های آنها با هم فرق دارد. مثل سونی اریکسون و نوکیا.<br />
<br />
در اینجا ما دو گوشی بنام های A و B را داریم که:<br />
A: گوشی که اطلاعات در آن قرار دارد و می خواهیم آن را به گوشی دیگر انتقال دهیم یا همان ارسال کننده.<br />
B: گوشی که دریافت کننده اطلاعات است.<br />
<br />
1- برای شروع کار ابتدا بلوتوث هر دو گوشی را فعال کنید.<br />
2- حال در هر دو گوشی وارد برنامه شده و از منوی اصلی وارد قسمت "امکانات" شوید.<br />
3- در گوشی A گزینه "انتقال اطلاعات به گوشی دیگر" را انتخاب کنید و در گوشی B گزینه "دریافت اطلاعات از گوشی دیگر" را انتخاب کنید.<br />
4- در گوشی B گزینه "Ready" را انتخاب کنید تا آماده دریافت اطلاعات شود. توجه داشته باشید که بسته به نوع گوشی، پیغامی از طرف گوشی نمایش داده می شود که از شما برای فعال شدن بلوتوث کسب اجازه میکند که باید حتما به آن جواب مثبت دهید.<br />
5- در گوشی A گزینه "Search" را انتخاب کنید تا برنامه شروع به جستجوی گوشی های مجاور کند. پس از اتمام جستجو، گوشی B را از لیست انتخاب کرده و OK را بزنید.<br />
6- حال چون قبلا گوشی B را در حالت آماده دریافت قرار داده ایم، در گوشی A گزینه Send را انتخاب کنید تا اطلاعات منتقل شود. این انتقال بسته به حجم اطلاعات ممکن است خیلی سریع یا کمی زمانبر شود. پس تا دریافت پیغامی مبنی بر اتمام انتقال اطلاعات، صبر کنید. توجه داشته باشید که باز هم از طرف گوشی پیغامی جهت تایید انتقال اطلاعات از طریق بلوتوث به شما داده می شود که باید جواب مثبت دهید.<br />
7- پس از دریافت پیغام اتمام دریافت اطلاعات در گوشی B، وارد قسمت ذخیره اطلاعات دریافت شده می شوید، که از شما برای ذخیره و جایگزینی اطلاعات دریافت شده کسب اجازه می کند. که در صورت اطمینان از جایگزینی، گزینه Save را انتخاب کنید.<br />
<br />
حال گوشی B دقیقا همان اطلاعاتی را دارد که گوشی A دارد البته بجزء تنطیمات برنامه ها مثل رمز ورود.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=34</link>
			<pubDate>Tue, 27 Apr 2010 11:02:30 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=34</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=33</link>
			<pubDate>Tue, 27 Apr 2010 11:02:01 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=33</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=32</link>
			<pubDate>Tue, 27 Apr 2010 11:01:38 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=32</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=31</link>
			<pubDate>Tue, 27 Apr 2010 11:01:11 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=31</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=30</link>
			<pubDate>Tue, 27 Apr 2010 11:00:33 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=30</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=29</link>
			<pubDate>Tue, 27 Apr 2010 10:59:45 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=29</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=28</link>
			<pubDate>Tue, 27 Apr 2010 10:59:17 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=28</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نصب و استفاده از برنامه]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=27</link>
			<pubDate>Tue, 27 Apr 2010 10:58:24 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=27</guid>
			<description><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></description>
			<content:encoded><![CDATA[هر کس در مورد نصب و استفاده از این برنامه سوال یا مشکلی داره، در پاسخ به این موضوع بیان کنه.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[موسیقی فرکتالی (ایجاد موسیقی از اشکال فرکتالی)]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=26</link>
			<pubDate>Mon, 26 Apr 2010 12:25:11 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=26</guid>
			<description><![CDATA[<h3><b>مقدمه ای بر فرکتال ها</b></h3><br />
<p><strong>فرکتال چیست؟</strong><br />
فرکتال بطور شهودی به شکلی گفته می شود که به صورت بازگشتی ساخته شده و بتوان آن را به قطعات کوچکتری تقسیم کرد که این قطعات مشابه کل باشند. به این خصوصیت خود-تشابهی گفته میشود. کلمه فرکتال در سال 1975 توسط Benoit Mandelbrot (دانشمند آمریکایی متولد لهستان که در زمینه فرکتالها دارای نظریاتی است) ابداع شد که از کلمه لاتین Fractus به معنی شکسته، گرفته شده است.</p>
<p><strong>سیستمهای آشفته:</strong><br />
<br />
مجموعه کلاسیک مندلبروت که در شکل زیر نشان داده شده، نمونه ای از یک سیستم آشفته و فرکتالی است. مجموعه مندلبروت بوسیله تابع بازگشتی (z<sub>n+1</sub> = f(z<sub>n</sub> ساخته میشود که f(z) = z<sub>2</sub> + z<sub>o</sub> است. این تابع برای هر نقطه اولیه&nbsp; z<sub>o </sub>در قسمتی از صفحه مختلط بصورت زیر پدید می آید.</p>
<br />
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_1.gif" /></p>
<p>مثالی دیگری که از همین تکنیک استفاده می کند ولی داراری تابع دیگری است، فرکتال Biomorphs از C.A. Pickover میباشد. تابع آن بشکل f(z) = sin(z) + e<sup>z</sup> + c است که شکل آن وابسته به ثابت c می باشد. در زیر نمونه ای از آن را می بینیم:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_2.jpg" /></p>
<p><strong>عجیب ولی جذاب:</strong><br />
تکنیک دیگری که دیگری که جهت ساختن فرکتالها به کار می رود معروف است به &quot;پرش به جلو&quot; که معمولا جهت نمایش سیستمهای آشفته عجیب و جذاب به کار میرود بطور مثال مجموعه جولیا. هر یک از مختصات توسط سریهایی ساخته میشوند که این سریها تنها یک نقطه کوچک را رسم میکنند، به همین دلیل به این روش پرش به جلو گفته می شود زیرا سازنده گان شکل نقاط کوچکی را بطور متوالی رسم میکنند. برای رسم یک شکل سری یا دارای یک معادله است یا دارای دو معادله که یکی برای مختصات x بکار می رود و دیگری برای مختصات y. بعنوان مثال تابع زیر :</p>
<p style="text-align: center">x<sub>n+1</sub>=y<sub>n</sub> &ndash; sign(x<sub>n</sub>) |b x<sub>n</sub> &ndash; c|<sup>1/2</sup><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y<sub>n+1</sub>=a &ndash; x<sub>n</sub></p>
<p>این سری مختصات x و y را بوسیله نقاط آغازین x<sub>o</sub>&nbsp; و y<sub>o</sub> و ثابتهای a و b و c را تولید میکند. شکل زیر مثالی است از سری بالا که در آن a= 0.4، b= 1 و c= 0 :</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_3.gif" /></p>
<br />
<p>نکته جالب اینجاست که نقاط آغازین تاثیری در شکلی که بوسیله این تکنیک ساخته میشوند،ندارد( بجزء تعدادی خاص). به بیان دیگر برای هر نقطه آغازینی شکل به همین صورت خواهد بود با این تفاوت که هنگام رسم ترتیب نقاط فرق خواهد کرد. مثال دیگری که منسوب به Peter de Jong است از دو معادله استفاده می کند:</p>
<p style="text-align: center"><span dir="ltr">x<sub>n+1</sub>=sin(a y<sub>n</sub>) &ndash; cos(b x<sub>n</sub>) <br />
y<sub>n+1</sub>=sin(c x<sub>n</sub>) &ndash; cos(d y<sub>n</sub>) </span></p>
<br />
<p>شکل زیر مثالی است از سری بالا که در آن a= -2.24، b= -0.65 ، c= 0.43 و d= -2.43 :</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_4.gif" /></p>
<p><b>نیوتن &ndash; رافسن:</b> <br />
این تکنیک مبتنی بر روش نیوتن &ndash; رافسن برای یافتن ریشه معادله چند جمله ای زیر است:</p>
<p style="text-align: center"><span dir="ltr">f(z)=a<sub>0</sub>+a<sub>1</sub>z+a<sub>2</sub>z<sup>2</sup>+&hellip;+a<sub>m</sub>z<sup>m</sup>=0</span></p>
<br />
<p>در این روش سری زیر ساخته میشود که <span dir="ltr">n+1</span> امین تقریب از ریشه معادله است:</p>
<p style="text-align: center"><span dir="ltr">z<sub>n+1</sub>= z<sub>n</sub> &ndash; f(z<sub>n</sub>)/f<sup> '</sup>(z<sub>n</sub>)</span></p>
<br />
<p>برای ساختن شکل دو بعدی به کمک این روش، هر نقطه ای که مربوط به قسمتی از شکل است از نقطه آغازین z<sub>0</sub> که تقریبی فرضی از ریشه است، استفاده میکند. بعنوان مثالی از این روش، یافتن سه ریشه معادله z<sup>3</sup>- 1 = 0 در شکل زیر بکار برده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_5.jpg" /></p>
<p><b>DLA (Diffusion Limited Aggregation)</b><br />
به گفته مندلبروت بیشتر فرکتالهای مفید شامل عنصر تصادف می باشند.<br />
یکی از این فرکتالها DLA است. این فرکتال بدین صورت ساخته میشود که با ثابت گرفتن نقطه ای در صفحه، نقاط دیگر بصورت تصادفی از گوشه ای از صفحه انتخاب شده و بصورت تصادفی نیز در صفحه به حرکت می پردازند تا به همسایگی نقطه ای که ثابت است برسد سپس در همان جا ثابت میشود و این کار ادامه می یابد. در زیر دو نمونه از آن را می بینیم:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_6.gif" /></p>
<h3><b>موسیقی فرکتالی</b></h3><br />
<br />
<p>چون فرکتالها دارای اجزای خود-متشابه هستند و از طرف دیگر موسیقی نیز کم و بیش دارای همین خاصیت می باشد، سعی ما این بوده است که با استفاده از الگوهای فرکتالی موسیقی های خاصی ایجاد نماییم که در این قسمت ابتدا روش ساختن چهار فرکتال خاص به کمک برنامه کامپیوتری و سپس نحوه ایجاد موسیقی مربوط به هر فرکتال را بررسی می کنیم.</p>
<p><b>1- منحنی دانه برفی ون کخ:</b><br />
اولین فرکتالی که بررسی می کنیم برف دانه کخ است. این فرکتال این گونه ایجاد می شود که ابتدا پاره خطی را در نظر می گیریم، در مرحله اول این پاره خط را به سه قسمت مساوی تقسیم میکنیم سپس یک مثلث متساوی الضلاع، با طول ضلع 1/3 طول پاره خط رسم می کنیم بطوری که قاعده آن قسمت درونی پاره خطمان است حال قاعده مثلث یا همان ضلع مشترک با پاره خط اولیه را حذف می کنیم. و در مرحله بعد همین کار را با پاره&nbsp; خطهای حاصل از مرحله قبل انجام می دهیم. اگر اینکار را ادامه دهیم به چیزی مانند شکل زیر می رسیم:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_7.gif" /></p>
<p>حال اگر در مرحله اول بجای یک پاره خط سه ضلع یک مثلث متساوی الضلاع را در نظر بگیریم و همان مراحل را برای آن انجام دهیم بعد از چهار مرحله به شکل زیر می رسیم که بنام برف دانه کخ معروف است.</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_8.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، خطوط ایجاد شده در هر مرحله دارای صدایی خاص می باشند که با پیمایش آنها در هر مرحله موسیقی مربط به فرکتال ایجاد میشود. در شکل زیر نحوه صدا گذاری روی خطوط نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_9.gif" /></p>
<p>حال با پیمایش این خطوط به ترتیب زیر موسیقی ایجاد میشود:</p>
<br />
<p dir="ltr" style="text-align: center">1441344334431441244234433443244224423443344324421441344334431441</p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_vonkokh.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<code><br />
<p dir="ltr" style="text-align: left">procedure TfrmMainForm.DrawFractal;<br />
Var<br />
&nbsp; MyBitmap: TBitmap;<br />
<br />
&nbsp; K:&nbsp; Integer;</p>
<p dir="ltr" style="text-align: left">&nbsp; procedure DrawLine(a, b:&nbsp; TPoint);<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.MoveTo(a.X, a.Y);<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.LineTo(b.X, b.Y);<br />
<br />
&nbsp; end;</p>
<p dir="ltr" style="text-align: left">&nbsp; procedure ShowFractal(a, b:&nbsp; TPoint;&nbsp; Level,&nbsp; LineID:&nbsp; Integer);<br />
&nbsp; var<br />
<br />
&nbsp;&nbsp;&nbsp; r,&nbsp; s,&nbsp; t,&nbsp; m:&nbsp; TPoint;<br />
&nbsp;&nbsp;&nbsp; xDelta, YDelta: Real;<br />
&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp; if Level&nbsp; = 1 then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inc(K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; LineID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawLine(a, b);<br />
<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp; .<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; a........r&nbsp;&nbsp;&nbsp; m&nbsp;&nbsp;&nbsp; t........b<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; ar = rs = st = tb = 1&nbsp; (relative sizes)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; rm = mt = 1/2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; ms = SQRT(3)/2</p>
<br />
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.X:= Round((2*a.X +&nbsp; b.X)&nbsp; / 3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.Y:= Round((2*a.Y +&nbsp; b.Y)&nbsp; / 3);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.X:= Round((a.X&nbsp; + 2*b.X)&nbsp; / 3);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.Y:= Round((a.Y&nbsp; + 2*b.Y)&nbsp; / 3);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.X:= Round((a.X&nbsp; + b.X)&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Y:= Round((a.Y&nbsp; + b.Y)&nbsp; / 2);</p>
<br />
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xDelta:= b.X - a.X;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yDelta:= b.Y - a.Y;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.X:= Round(m.x + SQRT(3)/6*yDelta);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.Y:= Round(m.y - SQRT(3)/6*xDelta);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(a,&nbsp; r, Level&nbsp; - 1,&nbsp; LineID);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(r,&nbsp; s, Level&nbsp; - 1,&nbsp; FractalLevel&nbsp; - Level + 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(s,&nbsp; t, Level&nbsp; - 1,&nbsp; FractalLevel&nbsp; - Level + 2);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(t,&nbsp; b, Level&nbsp; - 1,&nbsp; LineID)<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;<br />
begin<br />
<br />
&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; MyBitmap:=&nbsp; TBitmap.Create;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.Pen.Color:= clBlack;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Width:=&nbsp; imgWhiteBoard.Width;<br />
<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Height:= imgWhiteBoard.Height;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; Set3Line;<br />
&nbsp;&nbsp;&nbsp; K:= 0;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; ShowFractal(Lines[1].P2, Lines[1].P1, FractalLevel, 1);<br />
&nbsp;&nbsp;&nbsp; ShowFractal(Lines[2].P1, Lines[2].P2, FractalLevel, 1);<br />
&nbsp;&nbsp;&nbsp; ShowFractal(Lines[3].P2, Lines[3].P1, FractalLevel, 1);</p>
<br />
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
&nbsp;&nbsp;&nbsp; Caption:= 'مرحله '&nbsp; +&nbsp; IntToStr(FractalLevel);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; if SoundActived then<br />
&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Enabled:= SetNotes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p dir="ltr" style="text-align: left">&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
<br />
&nbsp; end;<br />
end;<br />
</p>
</code><br />
<p><b>2- مثلث سرپنسکی:</b><br />
دومین فرکتالی که می خواهیم بررسی کنیم مثلث سرپنسکی است. این فرکتال اینگونه ایجاد می شود که در مرحله اول ابتدا مثلثی تو پر را در نظر می گیریم سپس وسط اضلاع را به هم وصل میکنیم و مثلث حاصل میانی را از مثلث اولیه حذف کرده و در مرحله بعد همین کار را با سه مثلث باقی مانده انجام می دهیم و در مراحل بعد نیز همین کار را برای مثلثهای باقی انجام می دهیم. مانند شکل زیر:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_10.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، مثلثهای ایجاد شده در هر مرحله دارای صدایی خاص می باشند که با پیمایش آنها در هر مرحله موسیقی مربط به فرکتال ایجاد میشود. در شکل زیر نحوه صدا گذاری روی مثلثها نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_11.gif" /></p>
<p>حال با پیمایش این مثلثها به ترتیب زیر موسیقی ایجاد میشود:<br />
<br />
</p>
<p dir="ltr" style="text-align: center">a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,d1,a,d3,b,d3,c,d3,d2,a,d3,&#8203;b,d3,c,d3,d2,a,d3,b<br />
,d3,c,d3,d2,d1,a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,d1</p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_serpinsky.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<code><span dir="ltr" style="text-align: left"><br />
<p>procedure TfrmMainForm.DrawFractal;<br />
var<br />
<br />
&nbsp; MyBitmap: TBitmap;<br />
&nbsp; K:&nbsp; Integer;</p>
<p>&nbsp; procedure DrawTri(a, b,&nbsp; c:&nbsp; TPoint);<br />
&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.Polygon([a, b,&nbsp; c]);<br />
&nbsp; end;</p>
<p>&nbsp; procedure AddToSoundArray(ID: ShortString);<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Inc(K);<br />
<br />
&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
&nbsp;&nbsp;&nbsp; if&nbsp; ID&nbsp; = 'a' then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 1;<br />
<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; ID&nbsp; = 'b' then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; ID&nbsp; = 'c' then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 3 + StrToInt(Copy(ID, 2,&nbsp; 100));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;</p>
<br />
<p>&nbsp; procedure ShowFractal(a, b, c:&nbsp; TPoint;&nbsp; Level: Integer;&nbsp; TriID:&nbsp; ShortString);<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; abm,&nbsp; acm,&nbsp; bcm:&nbsp; TPoint;<br />
<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; if Level&nbsp; = 1 then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray(TriID);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawTri(a, b, c);<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abm.X:= Round((a.X&nbsp; + b.X)&nbsp; / 2);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abm.Y:= Round((a.Y&nbsp; + b.Y)&nbsp; / 2);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acm.X:= Round((a.X&nbsp; + c.X)&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acm.Y:= Round((a.Y&nbsp; + c.Y)&nbsp; / 2);</p>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bcm.X:= Round((b.X&nbsp; + c.X)&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bcm.Y:= Round((b.Y&nbsp; + c.Y)&nbsp; / 2);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(a,&nbsp; abm,&nbsp; acm,&nbsp; Level&nbsp; - 1, 'a');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray('d' + IntToStr(FractalLevel - Level + 1));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(acm,&nbsp; bcm,&nbsp; c,&nbsp; Level&nbsp; - 1, 'b');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray('d' + IntToStr(FractalLevel - Level + 1));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(abm,&nbsp; b,&nbsp; bcm,&nbsp; Level&nbsp; - 1, 'c');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray('d' + IntToStr(FractalLevel - Level + 1));<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;<br />
begin<br />
<br />
&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<p>
&nbsp;&nbsp;&nbsp; MyBitmap:=&nbsp; TBitmap.Create;</p>
<p>&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap&nbsp; do<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Canvas.Pen.Color:= clBlack;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Width:=&nbsp; imgWhiteBoard.Width;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Height:= imgWhiteBoard.Height;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; Set3Point;<br />
&nbsp;&nbsp;&nbsp; K:= 0;</p>
<p>&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.Brush.Color:= &#36;009FE6FD;<br />
&nbsp;&nbsp;&nbsp; ShowFractal(Points[1],&nbsp; Points[2],&nbsp; Points[3],&nbsp; FractalLevel, 'a');</p>
<br />
<p>&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
&nbsp;&nbsp;&nbsp; Caption:= 'مرحله '&nbsp; +&nbsp; IntToStr(FractalLevel);</p>
<p>&nbsp;&nbsp;&nbsp; if SoundActived and SetNotes then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute<br />
<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Down:= False;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
<br />
&nbsp; end;<br />
end;</p>
</span></code><br />
<p><b>3- درخت:</b><br />
سومین فرکتالی که بررسی می کنیم درخت است. این فرکتال این گونه ایجاد می شود که ابتدا خطی قائم را به عنوان شاخه اصلی درخت در نظر می گیریم، در مرحله اول به اندازه 2/3 و با زاویه 45 درجه نسبت به شاخه اصلی دو شاخه از دو طرف آن رشد خواهد کرد و در مراحل بالاتر به همین ترتیب برای هر شاخه دو شاخه دیگر با اندازه 2/3 و زاویه 45 درجه نسبت به آن از دو طرف آن رشد می کنند. مانند شکل زیر:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_12.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، شاخه ایجاد شده در هر مرحله دارای صدایی خاص می باشند که با پیمایش آنها در هر مرحله موسیقی مربط به فرکتال ایجاد میشود. در شکل زیر نحوه صدا گذاری روی شاخه ها نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_13.gif" /></p>
<p>حال با پیمایش این خطوط به ترتیب زیر موسیقی ایجاد میشود:</p>
<br />
<p dir="ltr" style="text-align: center">665665466566543665665466566543266566546656654366566546656654321</p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_tree.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<code><span dir="ltr" style="text-align: left"><br />
<p>procedure TfrmMainForm.DrawFractal;<br />
var<br />
&nbsp; MyBitmap: TBitmap;<br />
<br />
&nbsp; K:&nbsp; Integer;</p>
<p>&nbsp; procedure ShowFractal(a,&nbsp; b:&nbsp; TPoint; Ang:&nbsp; Real; LLen,&nbsp; Level, LineID: Integer);<br />
&nbsp; var<br />
<br />
&nbsp;&nbsp;&nbsp; P1, P2: TPoint;</p>
<p>&nbsp;&nbsp;&nbsp; procedure DrawLine(X, Y:&nbsp; TPoint; LID:&nbsp; Integer);<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap.Canvas do<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MoveTo(X.X, X.Y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LineTo(Y.X, Y.Y);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inc(K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; LID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; if&nbsp; Level = 1 then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawLine(a, b,&nbsp; LineID);<br />
<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LLen:=&nbsp; Round(2 * LLen&nbsp; / 3);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ang:= Ang - Pi&nbsp; / 4;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P1.X:=&nbsp; b.X + Round(Sin(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P1.Y:=&nbsp; b.Y + Round(Cos(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(b,&nbsp; P1, Ang,&nbsp; LLen, Level - 1,&nbsp; LineID&nbsp; + 1);</p>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ang:= Ang + Pi&nbsp; / 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P2.X:=&nbsp; b.X + Round(Sin(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P2.Y:=&nbsp; b.Y + Round(Cos(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(b,&nbsp; P2, Ang,&nbsp; LLen, Level -&nbsp; 1, LineID&nbsp; + 1);</p>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawLine(a, b,&nbsp; LineID);<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;<br />
begin<br />
&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; SetInitLine;</p>
<p>&nbsp;&nbsp;&nbsp; MyBitmap:=&nbsp; TBitmap.Create;<br />
&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap&nbsp; do<br />
&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Canvas.Pen.Color:= clOlive;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Canvas.Pen.Width:=&nbsp; 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Width:=&nbsp; imgWhiteBoard.Width;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Height:= imgWhiteBoard.Height;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; K:= 0;</p>
<p>&nbsp;&nbsp;&nbsp; ShowFractal(InitLine.P1,&nbsp; InitLine.P2,&nbsp; Pi,&nbsp; LineLen, FractalLevel, 1);</p>
<p>&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
<br />
&nbsp;&nbsp;&nbsp; Caption:= 'مرحله '&nbsp; +&nbsp; IntToStr(FractalLevel);</p>
<p>&nbsp;&nbsp;&nbsp; if SoundActived then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Enabled:= SetNotes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute;<br />
<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
&nbsp; end;<br />
end;<br />
<br />
</p>
</span></code><br />
<p><b>4- سرخس:</b><br />
آخرین فرکتالی که بررسی می کنیم DLA است. روش ساخته شدن این فرکتال در بالا توضیح داده شده است. شکل زیر با 10000 نقطه ایجاد شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_14.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، صفحه را به قطاع هایی تقسیم می کنیم و برای هر قطاع صدایی خاص در نظر می گیریم حال با شروع از اولین و پیمایش نقاط به ترتیب ثابت شدنشان، با توجه به اینکه نقاط در کدام قطاع قرار دارند صدایی خاص ایجاد می شود. در شکل زیر نحوه نقسیم کردن صفحه به قطاع های مساوی نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_15.gif" /></p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_dla.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<br />
<code><span dir="ltr" style="text-align: left"><br />
<p>procedure TfrmMainForm.DrawFractal;<br />
var<br />
&nbsp; MyBitmap: TBitmap;<br />
&nbsp; NewPoint: TPoint;<br />
&nbsp; MaxX, MaxY, I,&nbsp; J,&nbsp; K: Integer;<br />
<br />
&nbsp; Table:&nbsp; array of array&nbsp; of&nbsp; Integer;<br />
&nbsp; CurCl:&nbsp; Integer;</p>
<p>
&nbsp; function&nbsp; ExistPRoundOfP(X, Y:&nbsp; Integer):&nbsp; Boolean;<br />
<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Result:=&nbsp; False;<br />
&nbsp;&nbsp;&nbsp; if&nbsp; ((Y - 1) &gt; 0)&nbsp; and (Table[Y - 1, X]&nbsp; &gt;= 0) then<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; ((X + 1) &lt; MaxX)&nbsp; and (Table[Y, X + 1]&nbsp; &gt;=&nbsp; 0) then<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; ((Y + 1) &lt; MaxY)&nbsp; and (Table[Y&nbsp; + 1, X]&nbsp; &gt;=&nbsp; 0) then<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; ((X - 1) &gt; 0)&nbsp; and (Table[Y, X&nbsp; - 1]&nbsp; &gt;=&nbsp; 0) then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp; end;</p>
<p>&nbsp; function&nbsp; GetRandomStartP:&nbsp; TPoint;<br />
&nbsp; var<br />
<br />
&nbsp;&nbsp;&nbsp; Zel:&nbsp; Integer;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Zel:= Random(4);</p>
<p>&nbsp;&nbsp;&nbsp; case&nbsp; Zel of<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; Random(MaxX);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; MaxX;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Random(MaxY);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; Random(MaxX);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; MaxY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Random(MaxY);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; end;<br />
<br />
&nbsp; end;</p>
<p>&nbsp; function&nbsp; GetNewRandomPoint(X, Y:&nbsp; Integer):&nbsp; TPoint;<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; Jehat:&nbsp; 0..3;<br />
<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Jehat:= Random(4);</p>
<p>&nbsp;&nbsp;&nbsp; case&nbsp; Jehat of<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; Result.X&nbsp; &lt; 0 then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; MaxX<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; Result.X&nbsp; &gt; MaxX&nbsp; then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; 0;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; Result.Y&nbsp; &lt; 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; MaxY<br />
<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; Result.Y&nbsp; &gt; MaxY&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; 0;<br />
<br />
&nbsp; end;</p>
<p>&nbsp; function&nbsp; Trace:&nbsp; TPoint;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Result:=&nbsp; GetRandomStartP;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; while not ExistPRoundOfP(Result.X,&nbsp; Result.Y)&nbsp; do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:= GetNewRandomPoint(Result.X,&nbsp; Result.Y);<br />
&nbsp; end;</p>
<p>&nbsp; procedure PaintTable;<br />
<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; I,&nbsp; J:&nbsp; Integer;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap.Canvas do<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for J:= 0 to&nbsp; High(TAble[I]) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; Table[I,&nbsp; J]&nbsp; &gt; 0 then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pixels[J, I]:=&nbsp; Table[I,&nbsp; J];</p>
<p>&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
&nbsp; end;</p>
<p>&nbsp; procedure SetPointNote(P: TPoint);<br />
<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; Section,&nbsp; X,&nbsp; Y:&nbsp; Integer;<br />
&nbsp;&nbsp;&nbsp; C:&nbsp; Variant;<br />
<br />
&nbsp;&nbsp;&nbsp; Arg:&nbsp; Double;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; X:= P.X - Round(MaxX&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp; Y:= Round(MaxY&nbsp; / 2)&nbsp; - P.Y;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; C:= VarComplexCreate(X, Y);<br />
&nbsp;&nbsp;&nbsp; Arg:= VarComplexAngle&copy;;<br />
&nbsp;&nbsp;&nbsp; Section:= Round((Arg + Pi) * SecCount / (2 * Pi));</p>
<p>&nbsp;&nbsp;&nbsp; Inc(K);<br />
&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
<br />
&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; Section;<br />
&nbsp; end;<br />
begin<br />
&nbsp; Randomize;<br />
&nbsp; prgFractal.Max:=&nbsp; StrToInt(edtPointsCount.Text);<br />
<br />
&nbsp; SecCount:=&nbsp; StrToInt(edtSecCount.Text);<br />
&nbsp; K:= 0;</p>
<p>&nbsp; MaxX:=&nbsp; imgWhiteBoard.Width;<br />
&nbsp; MaxY:=&nbsp; imgWhiteBoard.Height;<br />
<br />
&nbsp; MyBitmap:=&nbsp; TBitmap.Create;<br />
&nbsp; with&nbsp; MyBitmap&nbsp; do<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Width:= MaxX;<br />
<br />
&nbsp;&nbsp;&nbsp; Height:=&nbsp; MaxY;<br />
&nbsp; end;</p>
<p>&nbsp; SetLength(Table,&nbsp; MaxY&nbsp; + 1);<br />
&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
<br />
&nbsp;&nbsp;&nbsp; SetLength(Table[I],&nbsp; MaxX&nbsp; + 1);</p>
<p>&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
&nbsp;&nbsp;&nbsp; for J:= 0 to&nbsp; High(Table[I]) do<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table[I,&nbsp; J]:=&nbsp; -1;</p>
<p>&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp; imgWhiteBoard.Refresh;</p>
<p>&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; CurCl:= clRed;<br />
&nbsp;&nbsp;&nbsp; Table[Round(MaxY / 2), Round(MaxX&nbsp; / 2)]:= 0;<br />
&nbsp;&nbsp;&nbsp; for I:= 1 to&nbsp; StrToInt(edtPointsCount.Text)&nbsp; - 1 do<br />
&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewPoint:=&nbsp; Trace;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table[NewPoint.Y,&nbsp; NewPoint.X]:= CurCl;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetPointNote(NewPoint);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prgFractal.Position:= prgFractal.Position + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CurCl:= TColor(RGB(Random(256), Random(256), Random(256)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; I mod 1000&nbsp; = 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PaintTable;<br />
<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; PaintTable;</p>
<p>&nbsp;&nbsp;&nbsp; if SoundActived then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Enabled:= SetNotes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute;<br />
<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLength(Table[I],&nbsp; 0);<br />
&nbsp;&nbsp;&nbsp; SetLength(Table,&nbsp; 0);</p>
<br />
<p>&nbsp;&nbsp;&nbsp; prgFractal.Position:= 0;<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
&nbsp; end;<br />
end;<br />
</p>
</span></code><br />
<p><b>نوتهای بکار رفته جهت ایجاد موسیقی:<br />
<br />
</b>نوتهایی که در برنامه کامپیوتری برای ایجاد موسیقی فرکتالها استفاده شده را می توانید از <a href="http://rfsoft.ir/article/download/notes.zip">اینجا</a> دانلود کنید.با جایگزینی نوتها می توان موسیقی های متفاوتی را ایجاد کرد.</p>
<p style="text-align: center"><b>پایان</b></p>]]></description>
			<content:encoded><![CDATA[<h3><b>مقدمه ای بر فرکتال ها</b></h3><br />
<p><strong>فرکتال چیست؟</strong><br />
فرکتال بطور شهودی به شکلی گفته می شود که به صورت بازگشتی ساخته شده و بتوان آن را به قطعات کوچکتری تقسیم کرد که این قطعات مشابه کل باشند. به این خصوصیت خود-تشابهی گفته میشود. کلمه فرکتال در سال 1975 توسط Benoit Mandelbrot (دانشمند آمریکایی متولد لهستان که در زمینه فرکتالها دارای نظریاتی است) ابداع شد که از کلمه لاتین Fractus به معنی شکسته، گرفته شده است.</p>
<p><strong>سیستمهای آشفته:</strong><br />
<br />
مجموعه کلاسیک مندلبروت که در شکل زیر نشان داده شده، نمونه ای از یک سیستم آشفته و فرکتالی است. مجموعه مندلبروت بوسیله تابع بازگشتی (z<sub>n+1</sub> = f(z<sub>n</sub> ساخته میشود که f(z) = z<sub>2</sub> + z<sub>o</sub> است. این تابع برای هر نقطه اولیه&nbsp; z<sub>o </sub>در قسمتی از صفحه مختلط بصورت زیر پدید می آید.</p>
<br />
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_1.gif" /></p>
<p>مثالی دیگری که از همین تکنیک استفاده می کند ولی داراری تابع دیگری است، فرکتال Biomorphs از C.A. Pickover میباشد. تابع آن بشکل f(z) = sin(z) + e<sup>z</sup> + c است که شکل آن وابسته به ثابت c می باشد. در زیر نمونه ای از آن را می بینیم:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_2.jpg" /></p>
<p><strong>عجیب ولی جذاب:</strong><br />
تکنیک دیگری که دیگری که جهت ساختن فرکتالها به کار می رود معروف است به &quot;پرش به جلو&quot; که معمولا جهت نمایش سیستمهای آشفته عجیب و جذاب به کار میرود بطور مثال مجموعه جولیا. هر یک از مختصات توسط سریهایی ساخته میشوند که این سریها تنها یک نقطه کوچک را رسم میکنند، به همین دلیل به این روش پرش به جلو گفته می شود زیرا سازنده گان شکل نقاط کوچکی را بطور متوالی رسم میکنند. برای رسم یک شکل سری یا دارای یک معادله است یا دارای دو معادله که یکی برای مختصات x بکار می رود و دیگری برای مختصات y. بعنوان مثال تابع زیر :</p>
<p style="text-align: center">x<sub>n+1</sub>=y<sub>n</sub> &ndash; sign(x<sub>n</sub>) |b x<sub>n</sub> &ndash; c|<sup>1/2</sup><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y<sub>n+1</sub>=a &ndash; x<sub>n</sub></p>
<p>این سری مختصات x و y را بوسیله نقاط آغازین x<sub>o</sub>&nbsp; و y<sub>o</sub> و ثابتهای a و b و c را تولید میکند. شکل زیر مثالی است از سری بالا که در آن a= 0.4، b= 1 و c= 0 :</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_3.gif" /></p>
<br />
<p>نکته جالب اینجاست که نقاط آغازین تاثیری در شکلی که بوسیله این تکنیک ساخته میشوند،ندارد( بجزء تعدادی خاص). به بیان دیگر برای هر نقطه آغازینی شکل به همین صورت خواهد بود با این تفاوت که هنگام رسم ترتیب نقاط فرق خواهد کرد. مثال دیگری که منسوب به Peter de Jong است از دو معادله استفاده می کند:</p>
<p style="text-align: center"><span dir="ltr">x<sub>n+1</sub>=sin(a y<sub>n</sub>) &ndash; cos(b x<sub>n</sub>) <br />
y<sub>n+1</sub>=sin(c x<sub>n</sub>) &ndash; cos(d y<sub>n</sub>) </span></p>
<br />
<p>شکل زیر مثالی است از سری بالا که در آن a= -2.24، b= -0.65 ، c= 0.43 و d= -2.43 :</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_4.gif" /></p>
<p><b>نیوتن &ndash; رافسن:</b> <br />
این تکنیک مبتنی بر روش نیوتن &ndash; رافسن برای یافتن ریشه معادله چند جمله ای زیر است:</p>
<p style="text-align: center"><span dir="ltr">f(z)=a<sub>0</sub>+a<sub>1</sub>z+a<sub>2</sub>z<sup>2</sup>+&hellip;+a<sub>m</sub>z<sup>m</sup>=0</span></p>
<br />
<p>در این روش سری زیر ساخته میشود که <span dir="ltr">n+1</span> امین تقریب از ریشه معادله است:</p>
<p style="text-align: center"><span dir="ltr">z<sub>n+1</sub>= z<sub>n</sub> &ndash; f(z<sub>n</sub>)/f<sup> '</sup>(z<sub>n</sub>)</span></p>
<br />
<p>برای ساختن شکل دو بعدی به کمک این روش، هر نقطه ای که مربوط به قسمتی از شکل است از نقطه آغازین z<sub>0</sub> که تقریبی فرضی از ریشه است، استفاده میکند. بعنوان مثالی از این روش، یافتن سه ریشه معادله z<sup>3</sup>- 1 = 0 در شکل زیر بکار برده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_5.jpg" /></p>
<p><b>DLA (Diffusion Limited Aggregation)</b><br />
به گفته مندلبروت بیشتر فرکتالهای مفید شامل عنصر تصادف می باشند.<br />
یکی از این فرکتالها DLA است. این فرکتال بدین صورت ساخته میشود که با ثابت گرفتن نقطه ای در صفحه، نقاط دیگر بصورت تصادفی از گوشه ای از صفحه انتخاب شده و بصورت تصادفی نیز در صفحه به حرکت می پردازند تا به همسایگی نقطه ای که ثابت است برسد سپس در همان جا ثابت میشود و این کار ادامه می یابد. در زیر دو نمونه از آن را می بینیم:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_6.gif" /></p>
<h3><b>موسیقی فرکتالی</b></h3><br />
<br />
<p>چون فرکتالها دارای اجزای خود-متشابه هستند و از طرف دیگر موسیقی نیز کم و بیش دارای همین خاصیت می باشد، سعی ما این بوده است که با استفاده از الگوهای فرکتالی موسیقی های خاصی ایجاد نماییم که در این قسمت ابتدا روش ساختن چهار فرکتال خاص به کمک برنامه کامپیوتری و سپس نحوه ایجاد موسیقی مربوط به هر فرکتال را بررسی می کنیم.</p>
<p><b>1- منحنی دانه برفی ون کخ:</b><br />
اولین فرکتالی که بررسی می کنیم برف دانه کخ است. این فرکتال این گونه ایجاد می شود که ابتدا پاره خطی را در نظر می گیریم، در مرحله اول این پاره خط را به سه قسمت مساوی تقسیم میکنیم سپس یک مثلث متساوی الضلاع، با طول ضلع 1/3 طول پاره خط رسم می کنیم بطوری که قاعده آن قسمت درونی پاره خطمان است حال قاعده مثلث یا همان ضلع مشترک با پاره خط اولیه را حذف می کنیم. و در مرحله بعد همین کار را با پاره&nbsp; خطهای حاصل از مرحله قبل انجام می دهیم. اگر اینکار را ادامه دهیم به چیزی مانند شکل زیر می رسیم:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_7.gif" /></p>
<p>حال اگر در مرحله اول بجای یک پاره خط سه ضلع یک مثلث متساوی الضلاع را در نظر بگیریم و همان مراحل را برای آن انجام دهیم بعد از چهار مرحله به شکل زیر می رسیم که بنام برف دانه کخ معروف است.</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_8.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، خطوط ایجاد شده در هر مرحله دارای صدایی خاص می باشند که با پیمایش آنها در هر مرحله موسیقی مربط به فرکتال ایجاد میشود. در شکل زیر نحوه صدا گذاری روی خطوط نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_9.gif" /></p>
<p>حال با پیمایش این خطوط به ترتیب زیر موسیقی ایجاد میشود:</p>
<br />
<p dir="ltr" style="text-align: center">1441344334431441244234433443244224423443344324421441344334431441</p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_vonkokh.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<code><br />
<p dir="ltr" style="text-align: left">procedure TfrmMainForm.DrawFractal;<br />
Var<br />
&nbsp; MyBitmap: TBitmap;<br />
<br />
&nbsp; K:&nbsp; Integer;</p>
<p dir="ltr" style="text-align: left">&nbsp; procedure DrawLine(a, b:&nbsp; TPoint);<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.MoveTo(a.X, a.Y);<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.LineTo(b.X, b.Y);<br />
<br />
&nbsp; end;</p>
<p dir="ltr" style="text-align: left">&nbsp; procedure ShowFractal(a, b:&nbsp; TPoint;&nbsp; Level,&nbsp; LineID:&nbsp; Integer);<br />
&nbsp; var<br />
<br />
&nbsp;&nbsp;&nbsp; r,&nbsp; s,&nbsp; t,&nbsp; m:&nbsp; TPoint;<br />
&nbsp;&nbsp;&nbsp; xDelta, YDelta: Real;<br />
&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp; if Level&nbsp; = 1 then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inc(K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; LineID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawLine(a, b);<br />
<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp; .<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; a........r&nbsp;&nbsp;&nbsp; m&nbsp;&nbsp;&nbsp; t........b<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; ar = rs = st = tb = 1&nbsp; (relative sizes)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; rm = mt = 1/2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; ms = SQRT(3)/2</p>
<br />
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.X:= Round((2*a.X +&nbsp; b.X)&nbsp; / 3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.Y:= Round((2*a.Y +&nbsp; b.Y)&nbsp; / 3);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.X:= Round((a.X&nbsp; + 2*b.X)&nbsp; / 3);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.Y:= Round((a.Y&nbsp; + 2*b.Y)&nbsp; / 3);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.X:= Round((a.X&nbsp; + b.X)&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Y:= Round((a.Y&nbsp; + b.Y)&nbsp; / 2);</p>
<br />
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xDelta:= b.X - a.X;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yDelta:= b.Y - a.Y;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.X:= Round(m.x + SQRT(3)/6*yDelta);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.Y:= Round(m.y - SQRT(3)/6*xDelta);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(a,&nbsp; r, Level&nbsp; - 1,&nbsp; LineID);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(r,&nbsp; s, Level&nbsp; - 1,&nbsp; FractalLevel&nbsp; - Level + 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(s,&nbsp; t, Level&nbsp; - 1,&nbsp; FractalLevel&nbsp; - Level + 2);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(t,&nbsp; b, Level&nbsp; - 1,&nbsp; LineID)<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;<br />
begin<br />
<br />
&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; MyBitmap:=&nbsp; TBitmap.Create;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.Pen.Color:= clBlack;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Width:=&nbsp; imgWhiteBoard.Width;<br />
<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Height:= imgWhiteBoard.Height;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; Set3Line;<br />
&nbsp;&nbsp;&nbsp; K:= 0;</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; ShowFractal(Lines[1].P2, Lines[1].P1, FractalLevel, 1);<br />
&nbsp;&nbsp;&nbsp; ShowFractal(Lines[2].P1, Lines[2].P2, FractalLevel, 1);<br />
&nbsp;&nbsp;&nbsp; ShowFractal(Lines[3].P2, Lines[3].P1, FractalLevel, 1);</p>
<br />
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
&nbsp;&nbsp;&nbsp; Caption:= 'مرحله '&nbsp; +&nbsp; IntToStr(FractalLevel);</p>
<p dir="ltr" style="text-align: left">&nbsp;&nbsp;&nbsp; if SoundActived then<br />
&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Enabled:= SetNotes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p dir="ltr" style="text-align: left">&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
<br />
&nbsp; end;<br />
end;<br />
</p>
</code><br />
<p><b>2- مثلث سرپنسکی:</b><br />
دومین فرکتالی که می خواهیم بررسی کنیم مثلث سرپنسکی است. این فرکتال اینگونه ایجاد می شود که در مرحله اول ابتدا مثلثی تو پر را در نظر می گیریم سپس وسط اضلاع را به هم وصل میکنیم و مثلث حاصل میانی را از مثلث اولیه حذف کرده و در مرحله بعد همین کار را با سه مثلث باقی مانده انجام می دهیم و در مراحل بعد نیز همین کار را برای مثلثهای باقی انجام می دهیم. مانند شکل زیر:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_10.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، مثلثهای ایجاد شده در هر مرحله دارای صدایی خاص می باشند که با پیمایش آنها در هر مرحله موسیقی مربط به فرکتال ایجاد میشود. در شکل زیر نحوه صدا گذاری روی مثلثها نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_11.gif" /></p>
<p>حال با پیمایش این مثلثها به ترتیب زیر موسیقی ایجاد میشود:<br />
<br />
</p>
<p dir="ltr" style="text-align: center">a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,d1,a,d3,b,d3,c,d3,d2,a,d3,&#8203;b,d3,c,d3,d2,a,d3,b<br />
,d3,c,d3,d2,d1,a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,a,d3,b,d3,c,d3,d2,d1</p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_serpinsky.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<code><span dir="ltr" style="text-align: left"><br />
<p>procedure TfrmMainForm.DrawFractal;<br />
var<br />
<br />
&nbsp; MyBitmap: TBitmap;<br />
&nbsp; K:&nbsp; Integer;</p>
<p>&nbsp; procedure DrawTri(a, b,&nbsp; c:&nbsp; TPoint);<br />
&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.Polygon([a, b,&nbsp; c]);<br />
&nbsp; end;</p>
<p>&nbsp; procedure AddToSoundArray(ID: ShortString);<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Inc(K);<br />
<br />
&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
&nbsp;&nbsp;&nbsp; if&nbsp; ID&nbsp; = 'a' then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 1;<br />
<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; ID&nbsp; = 'b' then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; ID&nbsp; = 'c' then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; 3 + StrToInt(Copy(ID, 2,&nbsp; 100));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;</p>
<br />
<p>&nbsp; procedure ShowFractal(a, b, c:&nbsp; TPoint;&nbsp; Level: Integer;&nbsp; TriID:&nbsp; ShortString);<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; abm,&nbsp; acm,&nbsp; bcm:&nbsp; TPoint;<br />
<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; if Level&nbsp; = 1 then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray(TriID);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawTri(a, b, c);<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abm.X:= Round((a.X&nbsp; + b.X)&nbsp; / 2);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abm.Y:= Round((a.Y&nbsp; + b.Y)&nbsp; / 2);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acm.X:= Round((a.X&nbsp; + c.X)&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acm.Y:= Round((a.Y&nbsp; + c.Y)&nbsp; / 2);</p>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bcm.X:= Round((b.X&nbsp; + c.X)&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bcm.Y:= Round((b.Y&nbsp; + c.Y)&nbsp; / 2);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(a,&nbsp; abm,&nbsp; acm,&nbsp; Level&nbsp; - 1, 'a');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray('d' + IntToStr(FractalLevel - Level + 1));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(acm,&nbsp; bcm,&nbsp; c,&nbsp; Level&nbsp; - 1, 'b');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray('d' + IntToStr(FractalLevel - Level + 1));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(abm,&nbsp; b,&nbsp; bcm,&nbsp; Level&nbsp; - 1, 'c');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddToSoundArray('d' + IntToStr(FractalLevel - Level + 1));<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;<br />
begin<br />
<br />
&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<p>
&nbsp;&nbsp;&nbsp; MyBitmap:=&nbsp; TBitmap.Create;</p>
<p>&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap&nbsp; do<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Canvas.Pen.Color:= clBlack;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Width:=&nbsp; imgWhiteBoard.Width;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Height:= imgWhiteBoard.Height;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; Set3Point;<br />
&nbsp;&nbsp;&nbsp; K:= 0;</p>
<p>&nbsp;&nbsp;&nbsp; MyBitmap.Canvas.Brush.Color:= &#36;009FE6FD;<br />
&nbsp;&nbsp;&nbsp; ShowFractal(Points[1],&nbsp; Points[2],&nbsp; Points[3],&nbsp; FractalLevel, 'a');</p>
<br />
<p>&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
&nbsp;&nbsp;&nbsp; Caption:= 'مرحله '&nbsp; +&nbsp; IntToStr(FractalLevel);</p>
<p>&nbsp;&nbsp;&nbsp; if SoundActived and SetNotes then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute<br />
<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Down:= False;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
<br />
&nbsp; end;<br />
end;</p>
</span></code><br />
<p><b>3- درخت:</b><br />
سومین فرکتالی که بررسی می کنیم درخت است. این فرکتال این گونه ایجاد می شود که ابتدا خطی قائم را به عنوان شاخه اصلی درخت در نظر می گیریم، در مرحله اول به اندازه 2/3 و با زاویه 45 درجه نسبت به شاخه اصلی دو شاخه از دو طرف آن رشد خواهد کرد و در مراحل بالاتر به همین ترتیب برای هر شاخه دو شاخه دیگر با اندازه 2/3 و زاویه 45 درجه نسبت به آن از دو طرف آن رشد می کنند. مانند شکل زیر:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_12.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، شاخه ایجاد شده در هر مرحله دارای صدایی خاص می باشند که با پیمایش آنها در هر مرحله موسیقی مربط به فرکتال ایجاد میشود. در شکل زیر نحوه صدا گذاری روی شاخه ها نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_13.gif" /></p>
<p>حال با پیمایش این خطوط به ترتیب زیر موسیقی ایجاد میشود:</p>
<br />
<p dir="ltr" style="text-align: center">665665466566543665665466566543266566546656654366566546656654321</p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_tree.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<code><span dir="ltr" style="text-align: left"><br />
<p>procedure TfrmMainForm.DrawFractal;<br />
var<br />
&nbsp; MyBitmap: TBitmap;<br />
<br />
&nbsp; K:&nbsp; Integer;</p>
<p>&nbsp; procedure ShowFractal(a,&nbsp; b:&nbsp; TPoint; Ang:&nbsp; Real; LLen,&nbsp; Level, LineID: Integer);<br />
&nbsp; var<br />
<br />
&nbsp;&nbsp;&nbsp; P1, P2: TPoint;</p>
<p>&nbsp;&nbsp;&nbsp; procedure DrawLine(X, Y:&nbsp; TPoint; LID:&nbsp; Integer);<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap.Canvas do<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MoveTo(X.X, X.Y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LineTo(Y.X, Y.Y);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inc(K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; LID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; if&nbsp; Level = 1 then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawLine(a, b,&nbsp; LineID);<br />
<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LLen:=&nbsp; Round(2 * LLen&nbsp; / 3);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ang:= Ang - Pi&nbsp; / 4;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P1.X:=&nbsp; b.X + Round(Sin(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P1.Y:=&nbsp; b.Y + Round(Cos(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(b,&nbsp; P1, Ang,&nbsp; LLen, Level - 1,&nbsp; LineID&nbsp; + 1);</p>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ang:= Ang + Pi&nbsp; / 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P2.X:=&nbsp; b.X + Round(Sin(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P2.Y:=&nbsp; b.Y + Round(Cos(Ang) * LLen);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowFractal(b,&nbsp; P2, Ang,&nbsp; LLen, Level -&nbsp; 1, LineID&nbsp; + 1);</p>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawLine(a, b,&nbsp; LineID);<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; end;<br />
begin<br />
&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; SetInitLine;</p>
<p>&nbsp;&nbsp;&nbsp; MyBitmap:=&nbsp; TBitmap.Create;<br />
&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap&nbsp; do<br />
&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Canvas.Pen.Color:= clOlive;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Canvas.Pen.Width:=&nbsp; 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Width:=&nbsp; imgWhiteBoard.Width;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Height:= imgWhiteBoard.Height;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; K:= 0;</p>
<p>&nbsp;&nbsp;&nbsp; ShowFractal(InitLine.P1,&nbsp; InitLine.P2,&nbsp; Pi,&nbsp; LineLen, FractalLevel, 1);</p>
<p>&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
<br />
&nbsp;&nbsp;&nbsp; Caption:= 'مرحله '&nbsp; +&nbsp; IntToStr(FractalLevel);</p>
<p>&nbsp;&nbsp;&nbsp; if SoundActived then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Enabled:= SetNotes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute;<br />
<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
&nbsp; end;<br />
end;<br />
<br />
</p>
</span></code><br />
<p><b>4- سرخس:</b><br />
آخرین فرکتالی که بررسی می کنیم DLA است. روش ساخته شدن این فرکتال در بالا توضیح داده شده است. شکل زیر با 10000 نقطه ایجاد شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_14.gif" /></p>
<p>موسیقی ایجاد شده مربوط به این فرکتال بدین گونه است که، صفحه را به قطاع هایی تقسیم می کنیم و برای هر قطاع صدایی خاص در نظر می گیریم حال با شروع از اولین و پیمایش نقاط به ترتیب ثابت شدنشان، با توجه به اینکه نقاط در کدام قطاع قرار دارند صدایی خاص ایجاد می شود. در شکل زیر نحوه نقسیم کردن صفحه به قطاع های مساوی نشان داده شده است:</p>
<p style="text-align: center"><img alt="" src="http://rfsoft.ir/article/img/fractal_15.gif" /></p>
<p>برنامه کامپیوتری به همراه&nbsp;نت آن را می توانید با کلیک روی <a href="http://rfsoft.ir/article/download/fractal_dla.zip">اینجا</a> دانلود کنید. در زیر کد قسمت اصلی برنامه که به زبان دلفی است&nbsp;جهت رسم و ایجاد موسیقی فرکتال آورده شده است:</p>
<br />
<code><span dir="ltr" style="text-align: left"><br />
<p>procedure TfrmMainForm.DrawFractal;<br />
var<br />
&nbsp; MyBitmap: TBitmap;<br />
&nbsp; NewPoint: TPoint;<br />
&nbsp; MaxX, MaxY, I,&nbsp; J,&nbsp; K: Integer;<br />
<br />
&nbsp; Table:&nbsp; array of array&nbsp; of&nbsp; Integer;<br />
&nbsp; CurCl:&nbsp; Integer;</p>
<p>
&nbsp; function&nbsp; ExistPRoundOfP(X, Y:&nbsp; Integer):&nbsp; Boolean;<br />
<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Result:=&nbsp; False;<br />
&nbsp;&nbsp;&nbsp; if&nbsp; ((Y - 1) &gt; 0)&nbsp; and (Table[Y - 1, X]&nbsp; &gt;= 0) then<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; ((X + 1) &lt; MaxX)&nbsp; and (Table[Y, X + 1]&nbsp; &gt;=&nbsp; 0) then<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; ((Y + 1) &lt; MaxY)&nbsp; and (Table[Y&nbsp; + 1, X]&nbsp; &gt;=&nbsp; 0) then<br />
<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; ((X - 1) &gt; 0)&nbsp; and (Table[Y, X&nbsp; - 1]&nbsp; &gt;=&nbsp; 0) then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:=&nbsp; True;<br />
&nbsp; end;</p>
<p>&nbsp; function&nbsp; GetRandomStartP:&nbsp; TPoint;<br />
&nbsp; var<br />
<br />
&nbsp;&nbsp;&nbsp; Zel:&nbsp; Integer;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Zel:= Random(4);</p>
<p>&nbsp;&nbsp;&nbsp; case&nbsp; Zel of<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; Random(MaxX);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; MaxX;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Random(MaxY);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; Random(MaxX);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; MaxY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Random(MaxY);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; end;<br />
<br />
&nbsp; end;</p>
<p>&nbsp; function&nbsp; GetNewRandomPoint(X, Y:&nbsp; Integer):&nbsp; TPoint;<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; Jehat:&nbsp; 0..3;<br />
<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Jehat:= Random(4);</p>
<p>&nbsp;&nbsp;&nbsp; case&nbsp; Jehat of<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; X - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; Y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; Result.X&nbsp; &lt; 0 then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; MaxX<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; Result.X&nbsp; &gt; MaxX&nbsp; then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.X:=&nbsp; 0;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; Result.Y&nbsp; &lt; 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; MaxY<br />
<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; Result.Y&nbsp; &gt; MaxY&nbsp; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Y:=&nbsp; 0;<br />
<br />
&nbsp; end;</p>
<p>&nbsp; function&nbsp; Trace:&nbsp; TPoint;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Result:=&nbsp; GetRandomStartP;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; while not ExistPRoundOfP(Result.X,&nbsp; Result.Y)&nbsp; do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result:= GetNewRandomPoint(Result.X,&nbsp; Result.Y);<br />
&nbsp; end;</p>
<p>&nbsp; procedure PaintTable;<br />
<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; I,&nbsp; J:&nbsp; Integer;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; with&nbsp; MyBitmap.Canvas do<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for J:= 0 to&nbsp; High(TAble[I]) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; Table[I,&nbsp; J]&nbsp; &gt; 0 then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pixels[J, I]:=&nbsp; Table[I,&nbsp; J];</p>
<p>&nbsp;&nbsp;&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp;&nbsp;&nbsp; imgWhiteBoard.Refresh;<br />
&nbsp; end;</p>
<p>&nbsp; procedure SetPointNote(P: TPoint);<br />
<br />
&nbsp; var<br />
&nbsp;&nbsp;&nbsp; Section,&nbsp; X,&nbsp; Y:&nbsp; Integer;<br />
&nbsp;&nbsp;&nbsp; C:&nbsp; Variant;<br />
<br />
&nbsp;&nbsp;&nbsp; Arg:&nbsp; Double;<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; X:= P.X - Round(MaxX&nbsp; / 2);<br />
&nbsp;&nbsp;&nbsp; Y:= Round(MaxY&nbsp; / 2)&nbsp; - P.Y;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; C:= VarComplexCreate(X, Y);<br />
&nbsp;&nbsp;&nbsp; Arg:= VarComplexAngle&copy;;<br />
&nbsp;&nbsp;&nbsp; Section:= Round((Arg + Pi) * SecCount / (2 * Pi));</p>
<p>&nbsp;&nbsp;&nbsp; Inc(K);<br />
&nbsp;&nbsp;&nbsp; SetLength(SoundsArray,&nbsp; K);<br />
<br />
&nbsp;&nbsp;&nbsp; SoundsArray[K - 1]:=&nbsp; Section;<br />
&nbsp; end;<br />
begin<br />
&nbsp; Randomize;<br />
&nbsp; prgFractal.Max:=&nbsp; StrToInt(edtPointsCount.Text);<br />
<br />
&nbsp; SecCount:=&nbsp; StrToInt(edtSecCount.Text);<br />
&nbsp; K:= 0;</p>
<p>&nbsp; MaxX:=&nbsp; imgWhiteBoard.Width;<br />
&nbsp; MaxY:=&nbsp; imgWhiteBoard.Height;<br />
<br />
&nbsp; MyBitmap:=&nbsp; TBitmap.Create;<br />
&nbsp; with&nbsp; MyBitmap&nbsp; do<br />
&nbsp; begin<br />
&nbsp;&nbsp;&nbsp; Width:= MaxX;<br />
<br />
&nbsp;&nbsp;&nbsp; Height:=&nbsp; MaxY;<br />
&nbsp; end;</p>
<p>&nbsp; SetLength(Table,&nbsp; MaxY&nbsp; + 1);<br />
&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
<br />
&nbsp;&nbsp;&nbsp; SetLength(Table[I],&nbsp; MaxX&nbsp; + 1);</p>
<p>&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
&nbsp;&nbsp;&nbsp; for J:= 0 to&nbsp; High(Table[I]) do<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table[I,&nbsp; J]:=&nbsp; -1;</p>
<p>&nbsp; imgWhiteBoard.Picture.Graphic:= MyBitmap;<br />
&nbsp; imgWhiteBoard.Refresh;</p>
<p>&nbsp; try<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crHourGlass;</p>
<br />
<p>&nbsp;&nbsp;&nbsp; CurCl:= clRed;<br />
&nbsp;&nbsp;&nbsp; Table[Round(MaxY / 2), Round(MaxX&nbsp; / 2)]:= 0;<br />
&nbsp;&nbsp;&nbsp; for I:= 1 to&nbsp; StrToInt(edtPointsCount.Text)&nbsp; - 1 do<br />
&nbsp;&nbsp;&nbsp; begin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewPoint:=&nbsp; Trace;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table[NewPoint.Y,&nbsp; NewPoint.X]:= CurCl;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; SoundActived&nbsp; then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetPointNote(NewPoint);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prgFractal.Position:= prgFractal.Position + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CurCl:= TColor(RGB(Random(256), Random(256), Random(256)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp; I mod 1000&nbsp; = 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PaintTable;<br />
<br />
&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp; PaintTable;</p>
<p>&nbsp;&nbsp;&nbsp; if SoundActived then<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbtnSound.Enabled:= SetNotes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abfThreadComponent.Execute;<br />
<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp; finally<br />
&nbsp;&nbsp;&nbsp; for I:= 0 to&nbsp; High(Table) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetLength(Table[I],&nbsp; 0);<br />
&nbsp;&nbsp;&nbsp; SetLength(Table,&nbsp; 0);</p>
<br />
<p>&nbsp;&nbsp;&nbsp; prgFractal.Position:= 0;<br />
&nbsp;&nbsp;&nbsp; Screen.Cursor:= crDefault;<br />
&nbsp;&nbsp;&nbsp; MyBitmap.Free;<br />
&nbsp; end;<br />
end;<br />
</p>
</span></code><br />
<p><b>نوتهای بکار رفته جهت ایجاد موسیقی:<br />
<br />
</b>نوتهایی که در برنامه کامپیوتری برای ایجاد موسیقی فرکتالها استفاده شده را می توانید از <a href="http://rfsoft.ir/article/download/notes.zip">اینجا</a> دانلود کنید.با جایگزینی نوتها می توان موسیقی های متفاوتی را ایجاد کرد.</p>
<p style="text-align: center"><b>پایان</b></p>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[پیشنهادات شما برای ورژن بعدی نرم افزار]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=25</link>
			<pubDate>Mon, 26 Apr 2010 11:19:41 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=25</guid>
			<description><![CDATA[لطفا پیشنهادات خود را برای اضافه کردن در ورژن بعدی برنامه را بصورت واضح در پاسخ به این موضوع بیان کنید.]]></description>
			<content:encoded><![CDATA[لطفا پیشنهادات خود را برای اضافه کردن در ورژن بعدی برنامه را بصورت واضح در پاسخ به این موضوع بیان کنید.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[پیشنهادات شما برای ورژن بعدی نرم افزار]]></title>
			<link>http://rfsoft.ir/forum/showthread.php?tid=24</link>
			<pubDate>Mon, 26 Apr 2010 11:00:13 +0000</pubDate>
			<guid isPermaLink="false">http://rfsoft.ir/forum/showthread.php?tid=24</guid>
			<description><![CDATA[لطفا پیشنهادات خود را برای اضافه کردن در ورژن بعدی برنامه را بصورت واضح در پاسخ به این موضوع بیان کنید.]]></description>
			<content:encoded><![CDATA[لطفا پیشنهادات خود را برای اضافه کردن در ورژن بعدی برنامه را بصورت واضح در پاسخ به این موضوع بیان کنید.]]></content:encoded>
		</item>
	</channel>
</rss>
