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

algortihm maintai local position and distance

بدأه hbate_allah في 23 فبراير 2014 · 4 رد · 831 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

 

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 is
C1,C2,C3,C4,C5,C6,C7, Target
where the aim is :
-C7 will be in target Position
-C1 d'ont change it's position
- keep the distance and the local position between
C7-C6,C6-C5,C3-C2,C2-C1
C7-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 = base_point + relative_position;    }}
"b_VectorMagnitude(C7, Target)" is to calculate the distance between Target and C7

تم تعديل هذه المشاركة بواسطة C++er في 25 فبراير 2014 في 14:47 — السبب: تعديل التنسيق

#2

و لا اجابة؟

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

#3

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

 

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

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

 

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

 

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

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

 

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

1

مدونتي: C++ Tips and Tricks

#4

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

قبل التحريك:

 *--*----*-*--*

بعد التحريك:

        *--*----*-*--*

* : نقطة
- : مسافة بمقدار وحدة

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

c7      = (x1, y1)
target  = (x2, y2)

vector  = <x2 - x1, y2 - y1>

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

c1  += vectorc2  += vectorc3  += vector...

تم تعديل هذه المشاركة بواسطة Mr.B في 25 فبراير 2014 في 16:08

1
#5

السلام عليكم

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

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

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