• 0
hbate_allah

algortihm maintai local position and distance

سؤال

السلام عليكم

انا بصدد برمجة خوارزمية بحيث

 

input = C1[3],C2[3],C3[3],C4[3],C5[3],C6[3],C7[3],Target[3]output =C'1[3],C'2[3],C'3[3],C'4[3],C'5[3],C'6[3],C'7[3
 

هدف الخوارزمية هو جعل   C7 في مكان target  بحيث يجب ان نحافظ على قيمة C1 نفسها و نحافظ على المسافة بين 

C1-C2C2-C3C3-C4C4-C5C5-C6C6-C7
و نحافظ ايضا على

 

موقع C2 بالنسبة لِC1                    

موقع C3 بالنسبة لِC2

موقع C4 بالنسبة لِC3

موقع C5 بالنسبة لِC4

موقع C6 بالنسبة لِC5

موقع C7 بالنسبة لِC6

 

the imput of my algortihme isC1,C2,C3,C4,C5,C6,C7, Targetwhere the aim is :-C7 will be in target Position-C1 d'ont change it's position- keep the distance and the local position betweenC7-C6,C6-C5,C3-C2,C2-C1C7-C6= mean the posiiton of the C7 relative to C6 (we must keep it and distance too)SO the algorithm is like that
 عملت الخوارزمية  لكن عندي مشكلة في النتيجة  تحقق كل الشروط الا الشرط الاخير 

هاهي خوارزميتي ارجو مساعدتي فيها

Real  C1_Orig[3]; Ogre::Real  C7_Temp[3];  Tolerance=1;  while (Tolerance > 1.0E-5) {      for (i0 = 0; i0 < 3; i0++) {        C7_Temp[i0] = C7[i0];      }for (i0 = 0; i0 < 3; i0++) {    C1_Orig[i0] = C1[i0];  }      k++;           for (i0 = 0; i0 < 3; i0++) {        C7[i0] = Target[i0];      }          maintain_relative_position(C7, pos66,dv0);      for (i0 = 0; i0 < 3; i0++) {        C6[i0] = dv0[i0];      }         maintain_relative_position(C6, pos55,dv0);      for (i0 = 0; i0 < 3; i0++) {        C5[i0] = dv0[i0];      }        maintain_relative_position(C5, pos44,dv0);           for (i0 = 0; i0 < 3; i0++) {        C4[i0] = dv0[i0];      }        maintain_relative_position(C4, pos33,dv0);      for (i0 = 0; i0 < 3; i0++) {        C3[i0] = dv0[i0];      }        maintain_relative_position(C3, pos22,dv0);         for (i0 = 0; i0 < 3; i0++) {        C2[i0] = dv0[i0];      }   maintain_relative_position(C2, pos11,dv0);       for (i0 = 0; i0 < 3; i0++) {        C1[i0] = dv0[i0];      }                Tolerance = b_VectorMagnitude(C1, C1_Orig);        if (Tolerance > 0.0) {        /*  cout<<"stage2222";    cout<<"\n";*/        for (i0 = 0; i0 < 3; i0++) {          C1[i0] = C1_Orig[i0];        }                   maintain_relative_position(C1, pos2,dv0);        for (i0 = 0; i0 < 3; i0++) {          C2[i0] = dv0[i0];        }              maintain_relative_position(C2, pos3,dv0);        for (i0 = 0; i0 < 3; i0++) {          C3[i0] = dv0[i0];        }              maintain_relative_position(C3, pos4,dv0);        for (i0 = 0; i0 < 3; i0++) {          C4[i0] = dv0[i0];        }             maintain_relative_position(C4, pos5,dv0);        for (i0 = 0; i0 < 3; i0++) {          C5[i0] = dv0[i0];        }         maintain_relative_position(C5, pos6,dv0);        for (i0 = 0; i0 < 3; i0++) {          C6[i0] = dv0[i0];        }         maintain_relative_position(C6, pos7,dv0);        for (i0 = 0; i0 < 3; i0++) {          C7[i0] = dv0[i0];        }         Tolerance = b_VectorMagnitude(C7, Target);        if (abs(b_VectorMagnitude(C7_Temp, C7)) < 1.0E-5) {          Tolerance =  5.0E-6;        }      }    }  }
void maintain_relative_position(Real base_point[3], Real relative_position[3], Real new_point[3]) {    /* new_point is an output parameter whose value on return is the point that is relative_position away from base_point. */    int i;    for (i = 0; i < 3; i++) {        new_point[i] = base_point[i] + relative_position[i];    }}
"b_VectorMagnitude(C7, Target)" is to calculate the distance between Target and C7 تم تعديل بواسطه C++er
تعديل التنسيق
0

شارك هذا الرد


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

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

  • 0

و لا اجابة؟

استطيع الشرح اكثر

0

شارك هذا الرد


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

الكود المكتوب مبهم فكيف لأحد ان يستطيع تجربته أو تصحيحه.

 

لغة الـ ++C لا تحتوى على Real فهل هو compound type او synonym لـ primitive type، أيضا ما هى الفئه Ogre و اين يوضع الكود الذى كتبته و ما هى مدخلاته و ما نوع Tolerance فمرة انت تسند غليه int و مره اخرى تستخدمه كأنه double.

يمكننى ان اكمل فى السلسلة الأمور المبهمه لديك و التى واحد منها يكفي ألا ينظر احد فى مشكلتك.

 

استطيع الشرح اكثر

 

إليك بعض النقاط التى إن استوفيتها حصلت على حل لمشكلتك سواء هنا أو فى اى مكان أخر.

  1. إجعل الشرح واضح و باللغه الخاصه بالمكان الذى تكتب فيه المشكله (فى حالتنا هذه بدلا من إستخدام اللغه الإنجليزيه يمكنك الشرح بالعربية و ستجد إقبال أكثر و حتى إن لم يحتوى على حلول فسيحتوى على افكار لهم).
  2. أذكر الفكره التى تريد الوصول لها عموما و ركز فى النقطه التى تحدث المشكله فيها.
  3. عندما تضع كود تذكر ان أغلب الأعضاء عندما يقرؤه سيحتاجوا لتنفيذه حتى ينتجوا المشكله التى تتحدث عنها لذا إن كان مشروعك كبير حاول إما ان تضع الجزء الذى فيه المشكله مع مثال كيفية استخدامه أو ان تكتب مثال يظهر المشكله التى تحدث فى برنامجك.

 

و الله ولي التوفيق

1

شارك هذا الرد


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

مجرد تخمين، إذا كنت تحاولين عمل شيء مثل تحريك سلسلة نقاط، إذا تحرك الرأس تتبعه بقية النقاط:

قبل التحريك: *--*----*-*--*بعد التحريك:        *--*----*-*--** : نقطة- : مسافة بمقدار وحدة

فيمكنك حساب المتجه بين النقطة المستهدفة target و c7 عن طريق طرحهما من بعض:

c7      = (x1, y1)target  = (x2, y2)vector  = <x2 - x1, y2 - y1>

الآن ممكن أن تضيفين قيمة vector على كل النقاط ويفترض أن تحقق شروطك:

c1  += vectorc2  += vectorc3  += vector...
تم تعديل بواسطه Mr.B
1

شارك هذا الرد


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

السلام عليكم

الفكرة انه عندي راس السلسلة و نهايتها

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

0

شارك هذا الرد


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

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

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