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

Project A Point Onto A Line

بدأه golden man في 6 مارس 2008 · 7 رد · 3,469 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف أستطيع معرفة إحداثيات نقطة إسقاط نقطة ما لدي إحداثياتها على مستقيم لدي إحداثيات نقطتين منه؟؟

مثال :

لدي نقطة : x = 10 , y = 33

و المستقيم محدد بنقطتين :

x1 = 33 , y1 = 64 , x2 = 65 , y2 = 87

و المطلوب معادلات رياضية لمعرفة إحداثيات نقطة تقاطع المستقيم العمودي من النقطة السابقة على المستقيم

أرجو مساعدتي بطريقة معرفة هذه الإحداثيات رياضيا.....

و جزاكم الله خيرا.

#2

ستقوم بفرض نقطة x,y فيكون لديك ثلاث نقاط النقطة المراد الإسقاط منها واحدى النقطتين الموجودتين على الخط والنقطة x,y ومنها يمكن كتابة معادلة في x,y باستخدام نظرية فيثاغورث

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

وبالتالي يصبح لديك معادلتين في مجهولين

سأترك لك التنفيذ

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#3

ممكن توجدها بفرض بارامتر t لنقطة التقاطع على الخط و استخدام الضرب dot product يساوي صفر لحل المسألة. انصحك بالرجوع الى الكتاب الرائع

Geometric Tools for Computer Graphics (The Morgan Kaufmann Series in Computer Graphics)

للمؤلف David H. Eberly

http://www.geometrictools.com/Books/Geomet...outTheBook.html

او البحث اكتر في جووجل لتجد حل مثل

http://www.geometryexpressions.com/explora...mp;PHPSESSID=d4

#4

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

وممكن كمان تفرض النقطة المطلوبة هى (x,y) وتكون معادلتين فى مجهولين , احدهما كما قال الاخ باسم هى معادلة الخط المستقيم نفسه (لان النقطة تحقق المعادلة) والاخرى من العلاقة بين ميل الخط المستقيم m1 (وممكن تعيينه من النقطتين المعلومتين على الخط) وميل العمودى m2 من نقطة الاسقاط على المستقيم (وممكن تعيينها من نقطة الفرض ونقطة الاسقاط). حيث ان m1*m2=-1 (شرط التعامد).

والله اعلى واعلم ,,,

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#5

السلام عليكم

جزاكم الله خير .

لقد قمت باتباع الطريقة التالية :

معادلة المستقيم :

y = mx + c	*

نوجد المعادلتين التاليتين بمجهولين :

المعادلة الأولى معادلة المستقيم الذي لدينا نقطتين منه :

نحسب ميل هذا المستقيم من العلاقة :

m1 = (y1-y2)/(x1-x2)

حيث أن x1 , y1 إحداثيات النقطة الأولى من المستقيم و x2 , y2 هي إحداثيات النقطة الثانية من المستقيم

و لحساب الثابت C نعوض m1 و إحدى النقطتين في معادلة المستقيم * :

c1 = y1 - m1x1

المعادلة الثانية هي معادلة المستقيم العمودي على المستقيم السابق و الذي يمر من القطة الثالثة التي احداثياتها x3 , y3 :

نحسب ميل هذا المستقيم عن طريق العلاقة التي ذكرها الأستاذ عماد :

m1*m2=-1
m2 = -1/m1

ثم نعوض أيضا النقطة التي لدينا إحداثياتها في هذه المعادلة :

c2 = y3 - m2x3

أصبح لدينا معادلتي مستقيمين بمجهولين هما :x , y

1) y = m1x+c1
2) y = m2x+c2

نحلهما حل مشترك :

m1x+c1 = m2x+c2

xn = (c2-c1)/(m1-m2)
yn = m1*xn+c1

هكذا توصلنا إلى احداثيات نقطة الإسقاط و التي هي xn , yn

لقد جربت هذه الطريقة على الـ c# و لكن يوجد هناك أخطاء باحداثيات النقطة الجديدة

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

بالنسبة لطريقتك أستاذ باسم فلم أفهمها و ما علاقة نظرية فيثاغورث بالحصول على الاحداثيات؟ أرجو الايضاح أكثر.

و بالنسبة للأستاذ elsheikhmh فقد وجدت الصفحة التي أشرت إليها في غوغل قبل وضع هذا الموضوع و لكني لم أعرف كيف أستنتج الثوابت في معادلة المستقيم من احداثيات نقطتين منه و التي هي a , b , c.

فأرجو منك إيضاح طريقة استنتاج قيم هذه الثوابت إن أمكن. و بالنسبة للكتاب لم أجد فيه المطلوب (و هل الرابط الذي وضعته يحوي الكتاب أم وصف لأبحاثه؟)

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

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

#6

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

أخى الفاضل golden man

طريقة الاخ باسم مضبوطه , واعتقد انه بقصد تكوين مثلث قائم الزاوية , وباستخدام احداثياات رءوسه يمكن تعيين اطوال اضلاعه , ومن ثم نطبق قاعدة فيثاغورث.

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

عامة نفرض ان المستقيم المعلوم يمر بالنقتطين P1, P2 وان النقطة الثالثة التى سيتم منها الاسقاط هى P3 واخيرا النقطة المراد تعيينها (تقاطع العمودى من النقطة P3 مع المستقيم المعلوم) هى P حيث

mimetex.cgi?P1=(x_1,y_1),%5C;%5C;%5C;%20

فيكون من المستقيم المعلوم

mimetex.cgi?%5Cfrac%7By-y_1%7D%7Bx-x_1%7

ومن العمودى عليه من النقطة P3

mimetex.cgi?%5Cfrac%7By-y_3%7D%7Bx-x_3%7

وهما معادلتين فى مجهولين , وبحلهما نحصل على

mimetex.cgi?x=%5Cfrac%7Bm(y_3-y_1)+x_3+m

mimetex.cgi?y=%5Cfrac%7Bm(x_3-x_1)+y_1+m

وهذه العلاقات تم تجريبها , ونتائجها مضبوطة ان شاء الله. وده كود بالـ C++ ومجرب ايضا

#include <iostream>

using namespace std;


int main(){


    double x1=5, y1=0, x2=0, y2=5, x3=0, y3=0, m, x, y;


    m=(y2-y1)/(x2-x1);

    x=(m*(y3-y1)+x3+m*m*x1)/(m*m+1);

    y=(m*(x3-x1)+y1+m*m*y3)/(m*m+1);


    cout << "x=" << x << ", y=" << y << endl;


    return 0;

}

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

تم تعديل هذه المشاركة بواسطة عماد حمدي احمد في 9 مارس 2008 في 05:10

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#7

جزاك الله خيرا أستاذ عماد و زادك علما .

تم تجريب الطريقة و هي صحيحة في جميع الحالات .

شكرا للجميع.

#8

السلام عليكم في الحقيقة لدي نفس مشكلة الاخ

الا انني اعمل في 3D

p1(x1,y1,z1) p2(x2,y2,z2) ,p3(x3,y3,z3) and P(X,Y,Z).

 

في هذه الحالة كيف يكون الحل

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