ملء صندوق ثنائي الأبعاد مائل باستخدام C++
مقدمة
تعد البرمجة بلغة C++ واحدة من أكثر المهارات المطلوبة في مجال تطوير البرمجيات، وخاصةً عند التعامل مع الرسوميات ثنائية الأبعاد. في هذا المقال، سنتناول كيفية ملء صندوق ثنائي الأبعاد مُدوَّر بشكل مخصص، وهو أمر يحتاج إلى فهم عميق لكيفية التعامل مع النقاط والمحاور في البيئة البرمجية. سنقوم بإعداد نموذج للتعبئة باستخدام مكتبة OLED لتقديم فكرة واضحة حول كيفية تنفيذ هذا المفهوم.
المفاهيم الأساسية في الرسم ثنائي الأبعاد
قبل أن نبدأ في تفاصيل ملء الصندوق، دعونا نراجع بعض المفاهيم الأساسية. يمتلك الصندوق عدة خصائص، مثل الموضع والدوران والنقطة المحورية. من المهم ترتيب هذه الخصائص بشكل صحيح قبل البدء في رسم الصندوق.
تُعتبر النقطة المحورية (Pivot Point) هي النقطة التي حولها يتم دوران الصندوق. عندما نقوم بتدوير الصندوق، فإن النقاط الأربع لهذه الأشكال ستتغير مواقعها وفقاً للدوران المحدد.
إنشاء الصندوق ثنائي الأبعاد
لنبدأ بإنشاء صنف (Class) للصندوق ثنائي الأبعاد. يحتوي هذا الصنف على النقاط اللازمة، بالإضافة إلى وظائف تتيح لك ضبط الموضع والدوران. من الضروري التأكد من أن لديك إمكانية الوصول إلى النقاط الأربع التي تمثل زوايا الصندوق.
class Box_2D {
public:
void Draw(FillType fill) {
oled.line(point1.position().x, point1.position().y, point2.position().x, point2.position().y);
oled.line(point2.position().x, point2.position().y, point3.position().x, point3.position().y);
oled.line(point3.position().x, point3.position().y, point4.position().x, point4.position().y);
oled.line(point4.position().x, point4.position().y, point1.position().x, point1.position().y);
if(fill == FILLTYPE_CROSS) {
oled.line(point1.position().x, point1.position().y, point3.position().x, point3.position().y);
oled.line(point2.position().x, point2.position().y, point4.position().x, point4.position().y);
}
}
private:
int Pivot_x;
int Pivot_y;
Empty_2D point1;
Empty_2D point2;
Empty_2D point3;
Empty_2D point4;
};
أنواع التعبئة الممكنة
عند الحديث عن تعبئة الصندوق، لدينا نوعان رئيسيان: التعبئة الصلبة (FILLTYPE_FILL) والتعبئة المتقاطعة (FILLTYPE_CROSS). التعبئة الصلبة تعني ملء الصندوق بالكامل، في حين أن التعبئة المتقاطعة تعني رسم خطوط تقطع الصندوق لمنحه شكلًا مختلفًا.
تنفيذ تعبئة الصندوق
لملء الصندوق بشكل كامل، يمكنك استخدام حلقات لتحديد النقاط داخل الصندوق ورسمها. يمكن استخدام خوارزمية بسيطة لتحديد النقاط: ابحث عن جميع النقاط الواقعة بين النقاط الأربع ثم قم برسمها باستخدام دالة Draw()
.
if(fill == FILLTYPE_FILL) {
for(int i = minY; i < maxY; i++) {
for(int j = minX; j < maxX; j++) {
// تحقق مما إذا كانت النقطة داخل الصندوق
if(isPointInsideBox(j, i)) {
oled.setPixel(j,i);
}
}
}
}
الخاتمة
تعبئة صندوق ثنائي الأبعاد مع دوران مخصص يعد تحديًا شيقًا للمبرمجين، خاصة عند استخدام لغة C++. من خلال إنشاء صنف يمثل الصندوق والتعامل مع خصائصه بشكل دقيق، يمكن تحقيق نتائج مذهلة. سواء كنت تعمل على مشروع باستخدام Arduino أو تخطط للانتقال إلى ESP-WROOM-32، فإن المبادئ الأساسية تبقى كما هي. نأمل أن تكون هذه المعلومات قد قدمت لك فهمًا أفضل حول كيفية ملء صندوق ثنائي الأبعاد مُدوَّر بشكل مخصص في C++.