PDA

View Full Version : سوال: شرح این سورس کد !



ghasem110deh
جمعه 02 آبان 1393, 18:55 عصر
سلام
دوستان لطف میکنید این کد رو خط به خط برام شرح بدین !
واسه رسم موج سینوسی تو یه پنل هست ...
.
.
.
میترسم استاد بپرسه نتونم جواب بدم ؟

private double DegreeToRadian(double angle) {
return Math.PI * angle / int.Parse(textBox3.Text);
}


private void Draw(double N)
{
int Yoffset = panel1.Height / 2;
Graphics G = panel1.CreateGraphics();
Pen P = new Pen(Color.Yellow, 1.5f);//ضخامت نمودار
float x1, y1;
for (double X = 0; X <= 360; X++)
{
x1 = (float)X;
y1 = Yoffset + ((float)Math.Sin(DegreeToRadian(X * N)) * int.Parse(textBox2.Text));
G.DrawRectangle(P, x1, y1, .5f, .5f);
}
P.Dispose();
}

elec60
شنبه 03 آبان 1393, 21:14 عصر
تابع تبدیل درجه به رادیان رو که اشتباه نوشتی! پس عدد ۱۸۰ کجاست؟!

behzadkhan
شنبه 03 آبان 1393, 21:38 عصر
با سلام

کد زیر واضح می باشد یک مقدار اعشاری گرفته و درجه را به رادیان تبدیل می کند و مقدار آن را برمی گرداند.
int.Parse(textBox3.Text) که مقدار رشته را به عدد تبدیل میکند.


private double DegreeToRadian(double angle) {
return Math.PI * angle / int.Parse(textBox3.Text);
}



کد زیر برای رسم گرافیکی موج سینوسی هست.

private void Draw(double N) {


نقطه وسط کنترلی که قرار است رسم نمودار از آنجا شروع شود بدست می آید.

int Yoffset = panel1.Height / 2;

برای اینکه نمودار در کنترل panel1 رسم شود.(یعنی مختصات که می دهیم به کنترل panel1 می رود)

Graphics G = panel1.CreateGraphics();

برای این که بتوانیم چیزی بنویسیم یا رسم کنیم باید یک قلم تعریف کنیم که اینجا رنگ و ضخامت آن تعریف شده.

Pen P = new Pen(Color.Yellow, 1.5f);

دو تا متغیر اعشاری برای نگهداری مختصات

float x1, y1;

یه حلقه

for (double X = 0; X <= 360; X++) {


مقدار x را از نوع doube به نوع float‌ تبدیل کرده و در متغیر x1 می ریزد

x1 = (float)X;

همون فرمول اصلی هست که باعث می شه y در موج سینوسی بالا پایین بشه

y1 = Yoffset + ((float)Math.Sin(DegreeToRadian(X * N)) * int.Parse(textBox2.Text));

میگه یک مستطیل در مختصات(x1,y1) با عرض و طول (.5f, .5f) با قلم p که قبلا تعریف کردی و درون panel1 رسم می شود.

G.DrawRectangle(P, x1, y1, .5f, .5f);

حافظه ای که به p اختصاص یافته را آزاد می کند.

} P.Dispose();

}



با تشکر

ghasem110deh
یک شنبه 04 آبان 1393, 20:01 عصر
تابع تبدیل درجه به رادیان رو که اشتباه نوشتی! پس عدد ۱۸۰ کجاست؟!


سلام ...
اینو از یجا گیر آوردم ! اگه خودم نوشته بودم که شرح نمی خواستم :خجالت:
چطوری بهش زمان رو هم اضافه کنم که فرکانس رو بر حسب هرتز بهم بده ...

behzadkhan
یک شنبه 04 آبان 1393, 23:12 عصر
سلام ...

چطوری بهش زمان رو هم اضافه کنم که فرکانس رو بر حسب هرتز بهم بده ...


با سلام


با سلام لطفا بیشتر توضیح بدهید.


با تشکر

ghasem110deh
دوشنبه 05 آبان 1393, 18:32 عصر
سلام
الان توی تکست باکس ها عدد رو میدی بترتیب :
1- تعداد موج = 8
2- ارتفاع موج = 25
3- سیمبل ریت (پیش فرض 180)

یک موج سینوسی با فرکانس 8 (هشت موج) با ارتفاع موج 25 رسم میکنه !
حالا میخوام بهش زمان رو هم اضافه کنم (واحد فرکانس هرتز - فرکانس تقسیم بر ثانیه)
که بعد از رسم موج توی یه لیبل این هشت موج رو تقسیم بر زمان کنه و حاصل رو بده (که با این مثال میشه 8 هرتز و اگه زمان بشه 2 ثانیه جواب میشه 4 هرتز)

می خواین سورس رو بزارم ؟

behzadkhan
دوشنبه 05 آبان 1393, 18:52 عصر
با سلام

یعنی فرم بصورت آهسته نمایش داده بشه.

با تشکر

ghasem110deh
دوشنبه 05 آبان 1393, 19:44 عصر
نه !
در واقع موج رسم شده رو (اگه زمان 2 ثانیه هست) نصفش رو توی پنل نشون بده !
یعنی چهار تا از موج ها رو نشون بده (اگه فرکانس هشت باشه)

behzadkhan
دوشنبه 05 آبان 1393, 21:43 عصر
با سلام

دوست عزیز

تقریبا متوجه شدم.

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

با تشکر

ghasem110deh
سه شنبه 06 آبان 1393, 18:28 عصر
سلام این سورسه
http://s5.picofile.com/file/8147416350/Test_Spactrum_Analyzer.rar.html

behzadkhan
سه شنبه 06 آبان 1393, 21:59 عصر
با سلام

تغییرات اعمال شد.

ببین اونی که می خواستی شد:
======================================

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Test_Spactrum_Analyzer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private int Frequence;
private int height;
private int speed;
private int time;
private double DegreeToRadian(double angle)
{
return Math.PI * angle / int.Parse(textBox3.Text);
}

private void Draw(double N)
{
int Yoffset = panel1.Height / 2;
Graphics G = panel1.CreateGraphics();
Pen P = new Pen(Color.Yellow, 1.5f);
float x1, y1;
x1 = 0;
for (double X = 0; X <= 360; X++)
{
//x1 = (float)X;
y1 = Yoffset + ((float)Math.Sin(DegreeToRadian(X * N)) * int.Parse(textBox2.Text));
G.DrawRectangle(P, x1, y1, .5f, .5f);
x1 += (float)2;
}
P.Dispose();
}

private void button3_Click(object sender, EventArgs e)
{
try
{
this.Frequence = int.Parse(textBox1.Text);
this.height = int.Parse(textBox2.Text);
this.speed = int.Parse(textBox3.Text);
this.time = int.Parse(textBox4.Text);

Graphics G = panel1.CreateGraphics();
panel1.Refresh();
Draw(int.Parse(textBox1.Text)/int.Parse(textBox4.Text));
}
catch
{
MessageBox.Show("مقدار وارد شده صحیح نیست", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void button1_Click(object sender, EventArgs e)
{
Pen myPen = new Pen(Color.Red);
System.Drawing.Graphics formGraphics = this.CreateGraphics();
int my, mx;
int[] rasmx = new int[100];
int[] rasmy = new int[100];
for (int i = 1; i < 90; i++)
{
mx = i * 4;
my = Convert.ToInt32(Math.Sin(mx)) * 45;
rasmx[i] = mx;
rasmy[i] = my;
formGraphics.DrawLine(myPen, rasmx[i - 1] + 100, rasmy[i - 1] + 100, rasmx[i] + 100, rasmy[i] + 100);
}
}

private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
}

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

if (this.Frequence>0 && this.height>0 && this.speed>0 && this.time>0)
{
Draw(this.Frequence / this.time);
}
}
}
}


======================================

اگه توضیح خواستی بپرس

با تشکر

ghasem110deh
چهارشنبه 07 آبان 1393, 19:05 عصر
خیلی آقایی ... دقیقا همینه !
فقط یه توضیحاتی مثل اون قبلیه بدین ... و اینکه چطور پنل پاک میشه (میخوام یه کلید باشه که اون پنل رو پاک کنه)
و موج های دیجیتال و دنده اره ای هم بهش اضافه کنم .
-------------------------------------------------------------
یه سوال فنی : با مدولاسیون آشنایی دارین ؟

behzadkhan
چهارشنبه 07 آبان 1393, 21:04 عصر
با سلام

دوست عزیز

مواردی را که خواستید توضیح خواهم داد.

با مدولاسیون آشنایی ندارم.

=================================

شایان ذکر هست که هدف کمک به شما می باشد.

اما این مسئله باید با همراهی شما صورت گیرد تا در پایان هم به دانش شما و هم به دانش اینجانب اضافه گردد.

با تشکر

ghasem110deh
پنج شنبه 08 آبان 1393, 08:48 صبح
سلام
بازم ممنون ...
منم میخوام در اصل یاد بگیرم (این برنامه هم هیچ ربطی به رشتم نداره)
الان تقریبا یه بانک اطلاعاتی و با جزئیات و فاکتور و ... میتونم بنویسم ولی از توابع ریاضی یا گرافیکی اصلا نمیتونم استفاده کنم !
(البته کلا با ریاضی مشکل درام) :افسرده:
آموزش بدرد بخوری هم در مورد این دوتا مورد نیست ... ولی واسه بانک اطلاعاتی بسیار زیاده ...