الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه Ahed Alwafa في 14 مايو 2014 · 11 رد · 1,076 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

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

 

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

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

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

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

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

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

تم تعديل هذه المشاركة بواسطة Ahed Alwafa في 14 مايو 2014 في 01:44

#2

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

 

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

 

 Pendulum

 

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

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#3

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

#4

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

 

 

0c3f444260fa05.png

#5

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

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

#6

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

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

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

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

 

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

 

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

،،،

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

 

---

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

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#7

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

#8

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

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

 

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

 

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

،،،

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

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

،،،

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

Pendulum.rar

• • •


[ ربيّ احفظ سوريا الحبيبة]


oFOK7Kd.png

#9

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

#10

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

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

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 عند سحب الاداة بالزيادة او النقصان تكتب القيمة داخله مثل مايحدث بالفلاش ..
وشكرآ

#11

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

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

الي

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

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


 


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


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


تم تعديل هذه المشاركة بواسطة Ahed Alwafa في 17 يونيو 2014 في 19:19

مواضيع مشابهة