• 0
Ahed Alwafa

تمثيل البندول البسيط برمجيآ ؟؟

سؤال

السلام عليكم ورحمة الله وبركاته

 

آريد تمثيل فكرة البندول البسيط الموجودة بهذا الفلآش برمجيآ  ؟!

 

http://up.zeidanphy.com/files/yj5okdt6hc2eu8wovlw0.swf 

لمشاهدتها بشكل اوضح :

http://up.zeidanphy.com/files/yj5okdt6hc2eu8wovlw0.swf

اريد عمله في فورم خاص بنفس هذة الفكرة تمامآ كيف ممكن تجسيدها ؟!

من خلال حركة الخيط وحجم الكرة للبندول

والوقت وطول الخيط ؟!
ممكن احد يساعدني !!

تم تعديل بواسطه Ahed Alwafa
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

11 إجابة على هذا السؤال .

  • 0

وعليكم السلام ورحمة الله،،،

 

هناك مثال بنفس الخواص على Code Project، المثال عبارة عن تطبيق WPF ضمن #C

 

 Pendulum

 

هي نفسها على Windows From، الفرق فقط بالرسم.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ششششكرآ لك آخي الكريم
سآحاول تنفيذهاا  واذا حصلت اي مشكلة وأجهتني
بيكون لي عودة والسؤال عنها ..
جزيتَ خيرآ ..~

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

 

0c3f444260fa05.png

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله وبركاته

في نافذة "Solution Explorer" قم بعمل right click على برنامجك ثم اختر "Add Reference" ثم اختر "PresentationFramework"

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 المشكلة ليست بالمكتبات، المشكلة بالتقنية نفسها.

كنت قد ذكرت أن المثال WPF.

انت الآن تحاولين تطبيق نفس الكود على مشروع Windows Form

ومكتبات التقنيتين تختلف.

 

المهم في عمل النواس، هو خوارزمية الحركة، والزاوية وطول السلك، اما الرسم فهو المرحلة الأخيرة.

 

لذلك نحن سنستفيد من خوارزمية الحركة، ونرسم على Windows Form.

،،،

بالتالي نحن بحاجة لمقدمة بسيطة في مبادئ الرسم ضمن Windows Forms والتي تستخدم تقنية +GDI

 

---

اذا كانت خوارزمية الحركة مفهومة، سنقوم بتطبيق الرسم مباشرة على windows form

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اهآآ آيييه فهمت السبب !
انا عندي خلفية عن تقنية GDI+
واستخدمتها في المشروع نفسه
لكن الخوارزمية الحركةة ماقد سمعت بها :( !
يعني ما بيطبق الفلآش برمجيأ  الا بالخوارزمية دي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أختي الكريمة،،،

المقصود بخوارزمية الحركة؛ أي المعادلة الفيزيائية لحركة النواس، وتتم باستخدام قانون نيوتن الثاني للحركة.

 

فيجب تعريف المتغيرات اللازمة لهذه المعادلة: طول الخيط، زاوية البدء، السرعة، وكتلة الجسم المنوّس.

 

ثم يتم توليد معادلة بالنسبة لهذه القيم. (هذا مفهوم فيزيائي يجب فهمه قبل عمل محاكاة للنواس).

،،،

الآن نأتي للبرمجة (تمثيل حركة النواس برمجياً) ويتم غالباً باستخدام تقينات الرسم، +GDI مثلاً ضمن Windows Forms

حيث نقوم بإدخال القيم السابقة يدوياً، باستخدام Text Boxes ومثلاً، ولبدء الحركة وايقافها نستخدم Timer. حيث كل مرة يعمل بها Timer نقوم بإعادة تشكيل المعادلة، حسب تغير القيم، ثم نقوم بالرسم مجدداً.

،،،

أترك لك هذا المثال البسيط، لحركة النواس

Pendulum.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرآ لك وجزأك الله خيرآ 
فهمت الفكرة وجآآري تحميل المرفق
وبطلع عليه ولو فيه سوال لي عودة ..
أستحملنا شوي :)
ربي يسعدكَ ..~

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اعتذر على الغياب بسبب زحمةة الاختباراات وضغوطات الدراسة

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

0c3f454267f505.png

 

كود البرنامج :: بعدالتعديل :)

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;//using System.Threading.Tasks;using System.Drawing.Drawing2D;namespace startproject{    public partial class Form21 : Form    {        double angle = Math.PI / 3/2;        double angleAccel;        double angleVelocity = 0;        double dt = 0.1;        int length = 50;        int g = 30;        int t;        Timer timer;        public Form21()        {            InitializeComponent();            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);                  }        private void timer1_Tick(object sender, EventArgs e)        {          // panel1.Invalidate();            pictureBox1.Invalidate();        }        private void trackBar1_Scroll(object sender, EventArgs e)        {            //timer2.Stop();            //timer1.Stop();            trackBar1.SetRange(51, 100);            length = trackBar1.Value;        }        private void trackBar2_Scroll(object sender, EventArgs e)        {            //timer2.Stop();            //timer1.Stop();            trackBar2.SetRange(31, 39);            g = trackBar2.Value;        }        private void timer2_Tick(object sender, EventArgs e)        {            t = t + 1;            textBox1.Text = Convert.ToString(t);                    }        private void button1_Click(object sender, EventArgs e)        {            timer = new Timer();            timer1.Interval = 5;            timer.Tick += timer1_Tick;            timer1.Start();            timer2.Interval = 1000;            timer2.Start();            t = 0;        }        private void button2_Click(object sender, EventArgs e)        {            timer2.Stop();            timer1.Stop();            textBox1.Text = "---";        }        private void pictureBox1_Paint(object sender, PaintEventArgs e)        {            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;            int anchorX = (pictureBox1.Width / 2) - 12;            int anchorY = pictureBox1.Height / 4;            int ballX = anchorX + (int)(Math.Sin(angle) * length);            int ballY = anchorY + (int)(Math.Cos(angle) * length);            e.Graphics.FillRectangle(Brushes.Brown, 90, anchorY - 24, 150, 20);            angleAccel = -1.81 / length * Math.Sin(angle);            angleVelocity += angleAccel * dt;            angle += angleVelocity * dt;            e.Graphics.DrawLine(Pens.Black, new Point(anchorX, anchorY), new Point(ballX, ballY));            e.Graphics.FillEllipse(Brushes.Black, anchorX - 3, anchorY - 4, 7, 7);            e.Graphics.FillEllipse(Brushes.Orange, ballX - 7, ballY - 7, g, g);                    }    }}

تم تطبيق الكود ولكن ..
1-  حجم الكرة لا يؤثر على  حركة الخيط !! اريد له تاثير

2- اداة التراك بار track bar كيف يتم عمل لها ترقييييييييم !! وكذلك
اريدها ان تربط بالــ text box عند سحب الاداة بالزيادة او النقصان تكتب القيمة داخله مثل مايحدث بالفلاش ..
وشكرآ

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعدل هذا السطر

            e.Graphics.FillEllipse(Brushes.Orange, ballX - 7, ballY - 7, g, g); 

الي

e.Graphics.FillEllipse(Brushes.Orange, ballX - (g/2), ballY - (g/2), g, g);
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تم عمل الكود واستبداله بس ماتأثر حركة البندول بحجم الكرة لما نغيرها >< :(


 


وبرضه كيف اعمل ترقيييييييييم لاداة التراك بار track bar وايضا


كيف اربطها بالــ text box عند سحب الاداة بالزيادة او النقصان تكتب القيمة داخله !!! 


تم تعديل بواسطه Ahed Alwafa
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .