abshammeri

قانون التسارع

53 ردود في هذا الموضوع

السلام عليكم

يا اخون انا الان اريد ان اصمم مثال بسيط للعبة سباق سيارات فقط للتدرب ..

لكن وقفت عن مشكلة بسيطة وهي

عندما اريد تطبيق قانون التسارع على السيارة فاني لا اعرف كيف

قانون التسارع كما تعلمون .. = التغير في سرعة الجسم ÷ دلتا الزمن

لكن كيف اطبقه .. مثلا حاولت محاولة شبيهة بالتالي ..

t=(s2-s1)/(time2-time1)

car.ps=t

لكن لايحدث تسارع في حركة السيارة ... فالسرعة ثابتة في بداية انطلاق السيارة وفي نهايتها ..

فكيف اطبق القانون صح ..

علما اني استخدم دوال API ...

0

شارك هذا الرد


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

انت اصلا كيف تحرك السيارة؟

قصدي ان عندك متغير يبين مكان السيارة, صح؟ و هذا الموقع يتم تغييره باستمرار حسب السرعة. و السرعة طبعا هي ايضا متغير.

طيب, نفس الشي مع السرعة و التسارع. خلي متغير السرعة يتغير باستمرار حسب متغير التسارع.

علاقة المكان بالسرعة هي نفس علاقة السرعة بالتسارع.

0

شارك هذا الرد


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

ما نوع التسارع ؟

تسارع خطي ، ام تسارع زاوي ؟

0

شارك هذا الرد


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

خطي .. ..

يعني اطبق .. معدالات الحركة الخطية .. او قانون التسارع مباشرة دون استخدام المعادلات الخطية ؟

معادلات الحركة مشكلة <_<

تم تعديل بواسطه الشـمري
0

شارك هذا الرد


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

عفوا نسيت الاخ حسن ..

بصراحة يا اخي انا ما فهمت شي .. لاني دايخ .. اليوم صاحي الساعة 6 والان 12 ... :( وكل اليوم وانا على الجهاز .. دماااار

سأراجع كلامك بكرا لما اصحح كويس ...

سلام

0

شارك هذا الرد


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

علاقة المكان بالسرعة هي نفس علاقة السرعة بالتسارع.

بلي ،

المكان تفاضله الاول هو السرعة ، تفاضل السرعة هي التسارع - العجلة .

Position--->Velocity---->Acceleration

المشكلة يا شمري

انك لا تستطع تطبيق قوانين الحركة بحذافرها في الكوميبوتر الشخصية التي نملكها .. في برامج المحاكاة الاحترافيه بيستخدموا اجهزة super computer لاستخدام هذه المعادلات .

نحتاج إلي طرق ترقيبيه لها ومنها طريقة Euler .

اشتقاقها طويل و لا احد اظن انه بيحفظه / الاستنتاج فقط يحفظ

اتبع معي في هذا الكود

عملنا هيكل للسيارة بها خصائصها الفيزيائية

struct my_car

{

int acceleration, velocity,force,mass;

};

my_car car;

اكيد انت عارف ان العجلة = القوة المؤثرة علي كتلة السيارة

car.acceleration=force/mass;

car.velocity = car.velocity + (car.acceleration * t);

معادلة الحركة الثانية لنيوتن علي ما اتذكر - السرعة الابتدائية = السرعة النهائية + العجلة في الزمن

طبعاً هنا اضافة لو عايز تدور السيارة

x = x + (float) sin(r * 0.0175f) * car.velocity;

z = z + (float) cos(r * 0.0175f) * car.velocity;

t خلي بالك من البارمتر

هنجيبه من إين ؟؟؟

t الزمن هو

هنا بداية المحاكاة

startTime = timeGetTime();

Time = timeGetTime() - startTime;

بس .. الطريقة بسيطة استخدمنا الدالة timeGetTime() الوقت الحالي من بعد تشغيل الويندوز بنطرحه من بداية الوقت كده جبنا الفرق في الزمن " التغيرفي الزمن" ستحتاجه في معادلات الحركة. بتجيب لنا

0

شارك هذا الرد


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

حسن& احمد صالح

مشكورين ..

------------

انا لي الان يومين وانا احاول ان اطبق المثل عمليا بعد ان قرأت الردود ..

ووصلت لنتيجة طيبة ... (( على ورق خارجي :) ))

سأعرض ماتوصلت له خلال اليومين القادمين .. وسأطبق المثال على opengl لانها اسهل من WIN API ...

لكن واجهتني مشاااكل..

0

شارك هذا الرد


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

هذا ما توصلت اليه بعد قراءة مستفيضة للردود ...

اولا سأنشئ كائن السيارة

car.createMyCar();

الان نعلن عن المتغيرات اللتي نريد استخدامها

السرعة الابتدائية .. وسميتها first_velocity

السرعة النهائية ..وسميتها last_velocity

الزمن وسميته TM

التسارع وسميته .. acceleration

هذا المتغيرات التي استخدمها ..

كيف اوظفها ..

هكذا :

WHILE
case KEYDOWN:
switch (wParam)
case :VK_ENTER
مادام الزر انتر مضغوط(يعني دواسة السيارة مضغوطة) :)
first_velocity=0
last_velocity+=1
TM=??
car.move_forward=t

case KEYUP:
switch (wParam)
case :VK_ENTER
اذا رفع اصبعه عن الزر انتر
first_velocity=last_velocit
السرعة الابتدائية تساوي السرعة النهائية السابقة(( لاننا بدأنا مرحلة جديدة)
last_velocity-=1
السرعة النهائية تتناقص
TM=??
car.move_backward=t

طبعا التسارع نوجده من المعادلة

القانون المستخدم طبعا هو

السرعة النهائية=السرعة الابتدائية+التسارع × الزمن

نريد حساب التسارع .. ننقل الى الطرف الاخر ونظبط بالمعادلة فينتج التسارع ..

طبع المثال السابق كتقريب للفكرة ليس الا ..

=======

تلخيص :

الفكرة حسب مافهمت من الردود السابقة .. هي ان نوجد المجاهيل ثم نحسب

التسارع .. لكن المشكلة كيف نحسب المجاهيل ...

الزمن وضعت عليه علامة استفهام .. لاني مش ظابط الفكرة .. التي ذكرها احمد صالح

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

ثانيا : ياخ احمد رأيتك تستخدم الكتلة وforce ..... في المثال الذي اقترحته .. هل

هي مهمة الان.. انا لا اريد حركة واقعية كل مارايده تسارع في السيارة ..

x = x + (float) sin(r * 0.0175f) * car.velocity;
z = z + (float) cos(r * 0.0175f) * car.velocity;

الكود السابق رائع ... كنت متعقد ايضا من مسألة الدوران وكيف ادمجه مع التسارع ..

فتفاجأت ان المسألة ومافيها سطر واحد :)

لكن الله يخليك ..لاتدخلنا في Z انا الى الان في 2D :rolleyes:

الخلاصة :

المسألة اعقد مما تخيلت >>>>> استسلم :(

حاولت صياغة المسألة بالاكواد لكن استخدام دوال win api مقرف .. واكبر عيب عدم

وجود كميرا وصعوبة التعامل مع الدوال ..

لذا تحولت الى GL وبدأت بكتابة المثال .. لكن احتاج على الاقل يومين .. لاني حاليا

اقوم بتغليف الدوال .. وبعمل الامور الاساسية .. فاذا استطعت انهاء المثال خلال

اليومين القادمين فبها ونعمة ... ما استطعت .. العطلة قادمة والاختبارات قبلها ..

يعني بعد شهر ونص .. ان شاء الله ..

سلام ...

تم تعديل بواسطه الشـمري
0

شارك هذا الرد


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

انا بصراحة لست متأكدا من سياق المشكلة .. تقدر تحط الكود كله؟ لو سري للغاية؟

0

شارك هذا الرد


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

مافي مشكلة .. احط الكود .. لكن الى الان ما اكملت ولو 30% منه .. والكود سيكون OPENGL

احاول اخلصه في يومين او بالعطلة ان شاء الله

0

شارك هذا الرد


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

يا شمري

هذه ليست مجاهيل ..

هذه متغيرات كتبتها ووضعت قيمتها .. اتبع مثالي جيداً كما ذكرت

حساب الزمن ذكرته ، الزمن هو عبارة عن 1/عدد الفريمات ... تستطيع جلب التغير في الفريمات بدالة timeGetTime وهناك اشياء اخري مثل GetTickCount و QuieryPerfomance ... لا ارد التشويش عليك ...

حاول ان تضع الكود " اعتقد انها اول مشاركة فعالة رايتها في المنتديات العربية " .

0

شارك هذا الرد


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

اقوم حاليا بتغليف دوال openglالتي سأستعملها بالمثال حتى يستطيع اي شخص يرى المثال فهمه .. اتمنى ان انتهي قبل الاختبارات ..

0

شارك هذا الرد


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

السلام عليكم هل تقصد أخى أحمد إننا سنقوم بعمل هذا إذا أردت جلب الوقت بإستخدام دالة GetTickCount

Public Declare Function GetTickCount Lib "kernel32" () As Long

ثم تعريف متغير الوقت

Dim Time as long

ثم العلاقه لجلب التغير فى الوقت

Time = 1 / GetTickCount()

وبهذا نستطيع أستخدام المتغير Time فى 5 معادلات الحركه أم العلاقه لجلب الوقت التى كتبتها بها شىء خطأ أرجو المساعده والتوضيح أخى أحمد ؟

وآسف على كتابتى الكود بالـ VB لأن هذه اللغه الوحيده التى أتقنها وقريباً بإذن الله سأبدأ فى تعلم السى ++

0

شارك هذا الرد


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

نعم هذا ما اقصده

0

شارك هذا الرد


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

يا ringoject

اسف لم انظر إلي الكود بتمعن

انت قمت بقسمة 1/ علي عدد التكات " تك ـ تك " . لا

نحن نريد متوسط عدد التكات

فلنفرض هذه السلسة من التكات

( تك 1 - تك2 - تك2 ) .

نريد الدلتا او التغير في الزمن عندما انتقل من التك 1 إلي التك 2 .

هذا سيعطي لنا ناتج التكات علي الثانية ... و هذا هو التــــــــــــــردد " معلومة يجهلها حتي المحترفين .."

التردد = مقلوب الزمن = 1/time . اوك

انت تريد الزمن اقلب التردد الناتج من فوق .

time=1/ the delta of Tickes per secs

0

شارك هذا الرد


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

نعم أخى أحمد أنا فهمت الآن كيف أستطيع الحصول على الزمن ولكن ماذا عن هذه الطريقه ؟

هذه الطريقه رأيتها فى مشروع جاهز هنا حصل صاحب المشروع على الزمن دون تطبيق العلاقه التى ذكرتها وهى مقلوب الزمن

وإليك طريقته فهل طريقته سليمه ؟؟؟

Public Declare Function GetTickCount Lib "kernel32" () As Long

تعريف متغير الزمن وآخر Tick

Dim Time as Long,LastTickCount as Long

If (GetTickCount() - LastTickCount) >= 1000 Then

LastFrameCount = FrameCount

LastTickCount = GetTickCount()

Time = Time + 1

End If

فى هذه الطريقه هو قال عندما يكون الفرق بين التكات حالياً وبين آخر تكه أكبر من أو يساوى 1000 يزود على متغير الـ Time ثانيه وبهذا نكون حصلنا على التغير فى الزمن ؟

أرجو التأكيد أخى أحمد هذه الطريقه صحيحه أم خاطئه

المناقشه هنا للأفاده للجميع يا أخوانى فمن يواجه مشكله فليكتب مشكلته

وشكراً على الأهتمام

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

شارك هذا الرد


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

الذي اعرفه في الديناميكا ان قانون التسارع هو

V^2 = Vo^2 + 2 * a * d

حيث ال V هي السرعة النهائية و الVo هي السرعة الابتدائية و الa هي العجلة او الAcceleration و الd هي المسافة او الDistance

لا اعرف اذا كان هذا مفيدا ام لا و لكني اردت المساعدة :)

0

شارك هذا الرد


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

مشكور جداً أخى الباشمهندس على المساعده لكن أنا بسأل فى جزئيه فى الكود لجلب التغير فى الزمن لتطبيقه فى قانون التسارع

0

شارك هذا الرد


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

نعم الطريقة صحيح ringojet

FrameCount ؟؟

0

شارك هذا الرد


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

اخي ringojet بدأت أحسدك :) على انك تتقن vb على الاقل تعمل مربع وصورة وووو وتحركها بسهولة .. وبالتالي يكون تركيزك على الفيزياء فقط ..

:)

اتمنى ان تواصل في عمل هذا المثال .. لاني انا توقفت على GL ..فدوال API متعبة ..

بالتوفيق ..

0

شارك هذا الرد


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

متشكر جداً على الأجابه أخى أحمد وعلى أهتمامك بالرد على الموضوع

0

شارك هذا الرد


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

متشكر جداً أخى الشمرى على تعاطفك وقريباً بإذن الله سأضع مثال كتطبيق على قانون التسارع

0

شارك هذا الرد


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

انت محتاج سوبر كومبيوتر لتطبق قوانين نيوتن بحاذفيرها !

V^2 = Vo^2 + 2 * a * d

هنا العجلة ثابتة مثلاً 2 متر لكل ثانية مربعة

0

شارك هذا الرد


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

V^2 = Vo^2 + 2 * a * d

هنا العجلة ثابتة مثلاً 2 متر لكل ثانية مربعة

اخي هل تطبيق القوانين الفيزيائيه صعبه

انا مفكر اننا سنستخدم من تعلمناه هكذا مثلا

مثلا قانون( هذا مثال) التسارع يقول الزمن * المسافه

ففي اللعب نقوم بايجاد الزمن والمسافه ونضربهما ببعض فينتج متغير جديد هو التسارع فنقوم باستخدامه

فل هذا هو استخدام الفيزياء باللعبه ام ان الشيء اعمق واعقد ؟؟؟

0

شارك هذا الرد


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

مش لدرجة Super Computer المعادلة كلها ثوابت تقريبا و يمكن حسابها مرة واحدة في اول العملية لعمل optimization.

اما بالنسبة لقدرة الاجهزة الحالية فهذه العملية تافهة جدا و لن تسبب اي مشاكل هذا في رايي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

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

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