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

كيفية رسم و تحريك التٌّروُس (simulation)

بدأه مصفوفة في 28 أغسطس 2008 · 7 رد · 7,785 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الحمدالله رب العالمين

اما بعد:

هذا الموضوع سوف يتناول فكرة السير (ترس متصل مع ترس آخر عبر حبل )

عموما

في هذا الموضوع سوف نتناول فكرة رسم التروس بالمعادلات + برنام بإستخدام مكتبة Qt به صف به امرين فقط الأول لرسم الترس والثاني لتوصيل بين ترسين تحددهما انت انظر الصور

5ebbce2b9f.jpg

76f02fdf2b.jpg

ولكن كيف يتم الربط بين التروس

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

وهناك فكرة أخرى هندسية للرسم وهي تعتمد على مثلث ذو متوسط يمر بمركزي الترسيين

انظر الرسمة (الرسمة باليد لعدم توفر برامج للرسم)

939417f740.jpg

1-من الرسم نجد زاوية ميل المتوسط عن طريق نقاط مركز التروس أولا وبإستخدام معكوس الضا

2-ثم نجد الزاوية بين المتوسط والمماس العلوي او السفلي وذلك بطرح انصاف القطر من بعضها البعض وقسمته على المسافة بين المركزين وايجاد معكوس الجا

3-نطرح او نجمع الى الناتج باي/2 ونجد الجا والجتا لهما ونضربهما في نصف القطر لنجمعها مع احداثيات نصف القطر

هذه ثلاث خطوات سريعة انظر الشيفرة

void gear::tailGear(int from,int to){
	QGraphicsLineItem* line;
	// (زاوية ميل المستقيم المار بمركزي الترس ( منصف المثلث
	double t=atan((centers[to].y()-centers[from].y())/(centers[to].x()-centers[from].x()));
	//  الزاوية بين المنصف ومماسي التروس
	double c=asin((radials[to]-radials[from])/
	(pow(pow(centers[to].x()-centers[from].x(),2)+pow(centers[to].y()-centers[from].y(),2),.5)));
	//خط التماس العلوي
	double m=t+c;
	double y1=sin(m-pi/2)*radials[from]+centers[from].y();
	double x1=cos(m-pi/2)*radials[from]+centers[from].x();
	double y2=sin(m-pi/2)*radials[to]+centers[to].y();
	double x2=cos(m-pi/2)*radials[to]+centers[to].x();
	scene->addItem(line=new QGraphicsLineItem(QLineF(x2,y2,x1,y1)));
	line->setPen(QPen(QBrush(Qt::green),3,Qt::DashDotDotLine));
	//خط التماس السفلي
	m=t-c;
	y1=sin(m+pi/2)*radials[from]+centers[from].y();
	x1=cos(m+pi/2)*radials[from]+centers[from].x();
	y2=sin(m+pi/2)*radials[to]+centers[to].y();
	x2=cos(m+pi/2)*radials[to]+centers[to].x();
	scene->addItem(line=new QGraphicsLineItem(QLineF(x2,y2,x1,y1)));
	line->setPen(QPen(QBrush(Qt::green),3,Qt::DashDotDotLine));
}

آمل ان ينال رضاكم وشكرا

برنامج رسم التروس في المرفقات بإستخدام Qt

gear.zip

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#2

المرحلة الثانية

هذه المرة نربط التروس بطريقة عكسية

فمن الرسمة التالية

36990fdffb.jpg

نستنتج المعادلات التالية

void gear::tailGearX(int from,int to){
	QGraphicsLineItem* line;
	double t=atan((centers[to].y()-centers[from].y())/(centers[to].x()-centers[from].x()));
	double c=acos(radials[from]/((radials[from]/(radials[from]+radials[to]))*
	pow(pow(centers[to].x()-centers[from].x(),2)+pow(centers[to].y()-centers[from].y(),2),.5)));
	//خط التقاطع الموجب
	double m=t+c;
	double y1=sin(m-pi)*radials[from]+centers[from].y();
	double x1=cos(m-pi)*radials[from]+centers[from].x();
	double y2=sin(m)*radials[to]+centers[to].y();
	double x2=cos(m)*radials[to]+centers[to].x();
	scene->addItem(line=new QGraphicsLineItem(QLineF(x2,y2,x1,y1)));
	line->setPen(QPen(QBrush(Qt::green),3,Qt::DashDotDotLine));
	m=t-c;
	y1=sin(m+pi)*radials[from]+centers[from].y();
	x1=cos(m+pi)*radials[from]+centers[from].x();
	y2=sin(m)*radials[to]+centers[to].y();
	x2=cos(m)*radials[to]+centers[to].x();
	scene->addItem(line=new QGraphicsLineItem(QLineF(x2,y2,x1,y1)));
	line->setPen(QPen(QBrush(Qt::green),3,Qt::DashDotDotLine));

}

لينتج لدينا مايسمى بالروابط المتقاطعة أنظر الصور

f8f5052f75.jpg

وهذه الصورة عبارة عن دمج عدة روابط سويا

a8b026b21a.jpg

وبهذا الشكل اصبحت لدينا ثلاث دوال

دالة لرسم التروس

دالة لربط التروس المباشرة وهو استمرار لحركة التروس

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

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

وكل عام وانتم بخير

gear.zip

تم تعديل هذه المشاركة بواسطة مصفوفة في 28 أغسطس 2008 في 05:37

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#3

السلام عليكم

.,,.,.,.,.,.,.,.,.,.,..,.,.,.,

تم إرجاع الموضوع...بالعنوان المناسب...مع الرجاء الخالص بعدم إنعاش الموضوع بالدردشة الزائدة عن الحد(حتى ان بعض المشاركات دردشة صافية(سواليف)).

رجاءً يا اخ محمد

.,,.,.,.,.,.,.,.,.,.,.,.,.,.

وحاول تكتب تنويه للأعضاء بالعطب الموجود بالمرفقات. وأي رد من اي شخص خارج عن الموضوع او مشاركة في غير موضوعية الموضوع فهو رد محذوف.

,.,.,.,.,.,.,.,,.,.,.,.,.,.

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

−1

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#4

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

كيف حالك أخت رغد ؟

اما بعد :-

اقتباس
تم إرجاع الموضوع...بالعنوان المناسب...مع الرجاء الخالص بعدم إنعاش الموضوع بالدردشة الزائدة عن الحد(حتى ان بعض المشاركات دردشة صافية(سواليف)).

هذا كلام عاري من الصحه ولا يوجد أحد من الاعضاء تكلم خارج الموضوع.

وبالنسبه لتعديل العنوان الاولى ان تطلبين مني تعديل العنوان وليس ان تعدليه أنتي

اقتباس
وحاول تكتب تنويه للأعضاء بالعطب الموجود بالمرفقات. وأي رد من اي شخص خارج عن الموضوع او مشاركة في غير موضوعية الموضوع فهو رد محذوف.

الاعضاء حملوا المرفق ولم يظهر لديهم عطب في المرفق .

واذا كنتي لا تعرفين تشغيله فليس هناك مانع ان تسالي وأعلمكي طريقه تنفيذه نحن أخوه لا تخجلي من سؤالي .

تم تعديل هذه المشاركة بواسطة مصفوفة في 15 سبتمبر 2008 في 03:27

1

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#5
مصفوفة كتب:
وعليكم السلام ورحمة الله

كيف حالك أخت رغد ؟

اما بعد :-

هذا كلام عاري من الصحه ولا يوجد أحد من الاعضاء تكلم خارج الموضوع.

وبالنسبه لتعديل العنوان الاولى ان تطلبين مني تعديل العنوان وليس ان تعدليه أنتي

الاعضاء حملوا المرفق ولم يظهر لديهم عطب في المرفق .

واذا كنتي لا تعرفين تشغيله فليس هناك مانع ان تسالي وأعلمكي طريقه تنفيذه نحن أخوه لا تخجلي من سؤالي .

الحمد لله طيبة وبخير...يارب تكون هيك كمان

,.,.,.,.,.,.

لأ...انا ادرى بالمشاركات وبتلك المشاركات وانا مسؤولة عن سلامة المواضيع مضموناً ومعرفياً ومعلوماتياً وأمنياً...وليست هناك اي مشاركة محذوفة علمية وذات صلة بالموضوع بالمرة(مشوهة للموضوع) وبعض مشاركاتي انا بالرغم كانت توجيهية...

,.,.,.,.,.,.,

أما بخصوص المرفق ماني خجلانة ابداً لأني سألت...ولم تُجب لأيام...

.,,.,.,.,.,.

عموماً لا تهتم بخصوص السؤال...وحاول ان تضع الشيفرة المصدرية فقط The source code في المرات القادمة طبعاً...ضرورية لقوانين المنتدى العامة...حتى لو كانت بعض الأقسام يتساهلوا بهذا الأمر...انا (نظامية) :happy:

,.,.,.,.,.,.

شاكرة تعاونك الكريم

−1

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#6

الحمدالله

اقتباس
عموماً لا تهتم بخصوص السؤال...وحاول ان تضع الشيفرة المصدرية فقط The source code في المرات القادمة طبعاً...ضرورية لقوانين المنتدى العامة...حتى لو كانت بعض الأقسام يتساهلوا بهذا الأمر...انا (نظامية) happy.gif

الشيفرة المصدرية تجدينه داخل مجلد src ان حملتي البرنامج فإذا لم يفتح معكي البرنامج اعدي ترجمة الشيفرة من جديد وهكذا نكون قد انتهينا من سؤالك :D

اتمنى انك تحذفي الردود الأربعة التي لنا حتى لا نشوش على ذهن القارئ

وحتى نطبق المثل القائل ->

اقتباس
وأي رد من اي شخص خارج عن الموضوع او مشاركة في غير موضوعية الموضوع فهو رد محذوف.
1

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#7
مصفوفة كتب:
الحمدالله

الشيفرة المصدرية تجدينه داخل مجلد src ان حملتي البرنامج فإذا لم يفتح معكي البرنامج اعدي ترجمة الشيفرة من جديد وهكذا نكون قد انتهينا من سؤالك :D

مزبوط هيك...

شايف المجلد هاد (src)؟هو فقط اللي يكون بالمرفقات...

.,,.,.,.,.,.

شاكرة لك الإجابة على السؤال وبس لما بكون فاضية رايحة اعمل اعادة ترجمة متل ما تفضلت...مش وعد!! ولكن إن شاء الله...هو الآن عامل معي اخطاء

compile-time errors

نوع الأخطاء

,.,.,.,.,.,.

لكن بعدين افضل

بوقت فراغي إن شاء الله

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#8

هلا اخوي محمد ، جزاك الله خيرا ،الدرس ممتاز جدا 10/10 ..

لكن بالنسبة لتوزيع البرنامج ، فلا حاجة مثلا للبرنامج .exe لانه لن يعمل الا عند من يملك مكتبة Qt ، او على الاقل المكتبات المستخدمة وفي الغالب هي QtCore4.dll و QtGui4.dll و mingwm10.dll "لمن لا يملك حزمة MinGW ".

لذا يكفي فقط الـ Source code لتوزيع البرنامج ، لكن اذا حبيت نشر نسخة .exe فيجب ان ترفقه مع ملفات dll السابقة وذلك حتى يعمل البرنامج على اي جهاز لا يحوي Qt ، او تقوم باعادة ترجمة Qt كـ static version ومن ثم تترجم برنامجك وتوزع النسخة التنفيذية بدون الحاجة لملفات dll "لكن حجم الـ exe سيكبر بالتاكيد".

حاليا برنامجك يتكون من :

gear.h و gear.cpp و main.cpp .

وللترجمة يجب نسخهم على اي مجلد جديد "او في نفس المجلد src" ونفذ :

qmake -project

qmake

make

اما الملفات dialogimpl.cpp و dialogimpl.h فلا حاجة لهم .

شكرا لك، وبانتظار الـ Bézier curve "رياضيا + برمجيا" :wub: ،،

سلام.

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