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

الناقل : elmasry | الكاتب الأصلى : مصفوفة | المصدر : www.arabteam2000-forum.com

بسم الله الرحمن الرحيم
الحمدالله رب العالمين
اما بعد:
هذا الموضوع سوف يتناول فكرة السير (ترس متصل مع ترس آخر عبر حبل )
عموما
في هذا الموضوع سوف نتناول فكرة رسم التروس بالمعادلات + برنام بإستخدام مكتبة Qt به صف به امرين فقط الأول لرسم الترس والثاني لتوصيل بين ترسين تحددهما انت انظر الصور
Posted Image
Posted Image
ولكن كيف يتم الربط بين التروس
ان فكرة الربط بين التروس هو عبار عن مماسين لترسيين لهما نفس الميل = ميل المستقيم بين نقتي التماس
وهناك فكرة أخرى هندسية للرسم وهي تعتمد على مثلث ذو متوسط يمر بمركزي الترسيين
انظر الرسمة (الرسمة باليد لعدم توفر برامج للرسم)
Posted Image
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 (50.71كيلو )