PDA

View Full Version : حرفه ای: رسم مسیر مارپیچ در فرم c# + معادله خط برای Buzzer کردن فرم



Amir4317
شنبه 20 تیر 1394, 13:14 عصر
سلام
نمی دونم تالار گفتگوی درستی رو انتخاب کردم یا نه!

من فقط می‌خواستم یک Buzzer* برای فرمم بزارم که رسیدم به این مسأله‌ی بسیار جالب
مساله به این صورته که با استفاده از جذر اعداد باید یک مارپیچ رو درون فرم رسم کنم:
http://texample.net/media/tikz/examples/PNG/rooty-helix.png



البته شکل ساده تر مساله به این صورته:

133141




البته رسم گرافیکی منظورم نیست ها!
خب برای بازر مختصات فرمم رو صفر در نظر میگیرم
حالا چجوری با چه فرمولی فرمم رو حرکت بدم؟

کد حرکت فرم در دسکتاپ رو نمی خوام ها
فقط فرمول بدست آوردن نطقه‌ی بعدی جهش!

Buzzer* : نمی دونم ازاون قدیمیای Yahoo هستید یا نه ولی توی چت یه لرزاننده‌ی جالب داشت که وقتی میزدی فرم خیلی قشنگ می لرزید حالا من بصورت رندم هم فرمم رو تکون تکون میدم ولی خب کار باید قشنگ باشه!

rahnema1
شنبه 20 تیر 1394, 17:41 عصر
سلام
اگه منظورتون به شکل حلزون حرکت کنه به این صورته

Point polarToCartesian(double distance , double angle)
{
return new Point((int)(Math.Cos(angle) * distance) ,(int) (Math.Sin(angle) * distance));
}
IEnumerable<Point> Halazoon(double startAngle, int scale, Size offset)
{
for (int i = 1; i < 87; i++)
{
yield return
Point.Add
(
polarToCartesian
(
Math.Sqrt(i + 1)* scale ,
startAngle += Math.Acos(Math.Sqrt((double)i / (i + 1)))
),
offset
);
}
}
void Button1Click(object sender, EventArgs e)
{
var pts = Halazoon(0.0, 20, new Size(200, 200));
foreach (var element in pts)
{
this.Location = element;
System.Threading.Thread.Sleep(10);
}
this.CreateGraphics().DrawLines(Pens.Black, pts.ToArray());
}

Amir4317
یک شنبه 21 تیر 1394, 19:35 عصر
بسیار بسیار ممنون از شما!

من کدهای بالا رو یکم دستکاری کردم تا برای نمایش به کاربر مناسب باشه.


کاربران عزیز قطعه کد زیر رو به برنامه اضافه کنید :



using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;


// Thanks to
// rahnema1 [http://barnamenevis.org]
// test and improved by amir4317
namespace BuzzerTest
{
public static class Buzzer
{
private static Point PolarToCartesian(double distance, double angle)
{
return new Point((int)(Math.Cos(angle) * distance), (int)(Math.Sin(angle) * distance));
}

private static IEnumerable<Point> Halazoon(double startAngle, int scale, Size offset, int range = 180)
{
for (var i = 1; i < range; i++)
{
yield return
Point.Add(
PolarToCartesian(Math.Sqrt(i + 1) * scale,
startAngle += Math.Acos(Math.Sqrt((double)i / (i + 1)))),
offset);
}
}
public static void BuzzerMe(this Form form, int scale = 1, int sleep = 3, int range = 180)
{
var pts = Halazoon(0.0, scale, new Size(form.DesktopLocation), range);
var elements = pts as IList<Point> ?? pts.ToList();
for (var i = elements.Count - 1; i > 1; i--)
{
form.DesktopLocation = elements[i];
//Refresh();
form.BringToFront();
System.Threading.Thread.Sleep(sleep);
}

//CreateGraphics().DrawLines(Pens.Black, elements.ToArray());
}



}
}





و درون فرمتون هنگامی که میخواهید فرم ویبره بزنه از این کد خیلی راحت استفاده کنید:

this.BuzzerMe();

برنامه‌ی مثال برای شما آماده کردم:
133190

بدانلودید و لذت ببرید!
(صلوات توی این ماه عزیز فراموش نشه!)133191

MehdiElexal
سه شنبه 20 مرداد 1394, 20:59 عصر
بسیار بسیار ممنون از شما!

من کدهای بالا رو یکم دستکاری کردم تا برای نمایش به کاربر مناسب باشه.


کاربران عزیز قطعه کد زیر رو به برنامه اضافه کنید :



using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;


// Thanks to
// rahnema1 [http://barnamenevis.org]
// test and improved by amir4317
namespace BuzzerTest
{
public static class Buzzer
{
private static Point PolarToCartesian(double distance, double angle)
{
return new Point((int)(Math.Cos(angle) * distance), (int)(Math.Sin(angle) * distance));
}

private static IEnumerable<Point> Halazoon(double startAngle, int scale, Size offset, int range = 180)
{
for (var i = 1; i < range; i++)
{
yield return
Point.Add(
PolarToCartesian(Math.Sqrt(i + 1) * scale,
startAngle += Math.Acos(Math.Sqrt((double)i / (i + 1)))),
offset);
}
}
public static void BuzzerMe(this Form form, int scale = 1, int sleep = 3, int range = 180)
{
var pts = Halazoon(0.0, scale, new Size(form.DesktopLocation), range);
var elements = pts as IList<Point> ?? pts.ToList();
for (var i = elements.Count - 1; i > 1; i--)
{
form.DesktopLocation = elements[i];
//Refresh();
form.BringToFront();
System.Threading.Thread.Sleep(sleep);
}

//CreateGraphics().DrawLines(Pens.Black, elements.ToArray());
}



}
}





و درون فرمتون هنگامی که میخواهید فرم ویبره بزنه از این کد خیلی راحت استفاده کنید:

this.BuzzerMe();

برنامه‌ی مثال برای شما آماده کردم:
133190

بدانلودید و لذت ببرید!
(صلوات توی این ماه عزیز فراموش نشه!)133191
ممنون از برنامه ای که گذاشتی ولی من دانلود میکنم اما اکسترکت نمیشه و میگه دمیج داره فایل ممنون میشم مجدد آپلود کنید