1 مصطفى القباني نشر 15 أغسطس 2020 أرسل تقرير نشر 15 أغسطس 2020 تحياتي المطلوب هو تعريف الmethods للصنف Line. يمكن عمل المطلوب بوضع التالي في ملف Line.cpp : #include <cmath> #include "Line.h" Line::Line(double x1, double y1, double x2, double y2) { Line::x1 = x1; Line::x2 = x2; Line::y1 = y1; Line::y2 = y2; } double Line::getStartX() { return x1; } double Line::getStartY() { return y1; } double Line::getEndX() { return x2; } double Line::getEndY() { return y2; } double Line::getSlope() { return (y2 - y1) / (x2 - x1); } bool Line::isVertical() { return ((x2 - x1) == 0); } bool Line::isHorizontal() { return ((y2 - y1) == 0); } bool Line::isThroughOrigin() { return (x1 * (y2 - y1) == y1 * (x2 - x1)); } void Line::mirror(int axis) { double slope = getSlope(); double new_slope = -slope; if (isVertical() && axis >= 0) y2 = y1 - (y2 - y1); else if (isHorizontal() && axis < 0) x2 = x1 - (x2 - x1); else { if (axis >= 0) y2 = y1 + new_slope * (x2 - x1); else x2 = x1 + ((y2 - y1) / new_slope); } } شرح الدوال: بالنسبة للLine::Line هو الconstructor ويأخذ x1 و y1 وx2 وy2. بالنسبة ل getStartX getStartY getEndX getEndY يقومو بإرجاع النقاط الأربعة x1 y1 x2 y2 بالترتيب. بالنسبة لgetSlope تقوم بإرجاع ميل الخط المستقيم، ويتم حسابه من معادلة الميل: بالنسبة ل isVertical isHorizontal تقوم بالتحقق إذا كان الخط أفقي أو رأسي. ويتم التحقق من ذلك من خلال الكشف إذا كان x2 -x1 مساوي للصفر في حالة الكشف عن إذا كان الخط رأسي، وإذا كان y2 - y1 مساوي للصفر في حالة إذا كان الخط أفقي. بالنسبة ل isThroughOrigin تقوم بالتحقق إذا كان الخط يمر بنقطة الأصل (0،0)، ويتم ذلك عن طريق التحقق إذا كان (x1 * (y2 - y1) == y1 * (x2 - x1)) . بالنسبة ل mirror تأخذ متغير axis وتقوم بعمل إنعكاس للخط حول المحور الأفقي إذا كانت axis أكبر من أو تساوي للصفر، أو المحور الرأسي إذا كانت axis أقل من الصفر. وحسب المطلوب فإن الإنعكاس لا يغير نقطة البداية x1 y1 ولكن يغير نقطة النهاية فقط، مع ملاحظة أن إذا كان الإنعكاس حول المحور الأفقي فإن x1 y1 x2 لا يتغيروا، ويتغير فقط y2. وبالمثل إذا كان الإنعكاس حول المحور الرأسي فإن x1 y1 y2 لا يتغيروا، ويتغير فقط x2. ولاحظ أيضاً أنه عند عمل الإنعكاس، فإن الميل للخط المستقيم يتغير للسالب، مثلاً إذا كان ميل الخط 5 يصبح -5 وهكذا. وبالتالي يمكن معرفة النقطة الناقصة بالتعويض في معادلة الميل مع إضافة إشارة سالبة للميل وبالمثل لحساب x2. هناك نقطتين أخرتين يجب مراعاتهم في هذه الدالة، وهي أن التعويض في معادلة الميل سيعطي خطأ في حالة أن الخط أفقي أو رأسي، بسبب أن ميل الخط الأفقي = 0 ، والرأسي ميله لا نهاية، بالتالي يتم حساب نقطة النهاية بدون التعويض في القانون ولكن بإستخدام : y2 = y1 - (y2 - y1); في حالة الخط الرأسي. و باستخدام: x2 = x1 - (x2 - x1); في حالة الخط الافقي. بالتوفيق. 1 اقتباس
السؤال
Mohanad Hammoudeh
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.