المحتوى

30‏/10‏/2011

المحاذاة ناحية اليمين , مشكلة وحل رياضي

السلام عليكم

المحاذاة ناحية اليمين واجهتني هذه المشكلة مرتين وكلا المرتين في الرسوميات , حينما أريد أن أقوم بمحاذات صورة ناحية اليمين ولكن احداثي رسم الصورة هو الركن العلوي الأيسر ؟؟؟

المشكلة ليست هنا ولكن المشكلة تكمن عندما يكون عرض الصورة غير محدد أي أنه يتغير باستمرار , مثلا عند عمل برنامج يستعرض صور متنوعة ولكن الصور تختلف في العرض !!!

لذا قمت بعمل دالة تقوم بحساب المسافات ,,,,,

والتطبيق كالتالي: يوجد في لغة الPHP مكتبة باسم GD للكتابة على الصور , وميزة هذه المكتبة هو دعمها للغة العربية , إلا أن المحاذاة فيها من ناحية اليسار لذا قمت بوضع الحل لذلك وسأشرحه بما يسر الله:

المطلوب هو حساب المسافة الفارغة التي تترك بين المحاذاة اليمنى وبين نهاية الكلمة , فإذا وجدنا هذه المسافة في وقت التشغيل فما علينا إلا إضافتها للمحاذاة اليسرى ونحصل على الاحداثي السيني الذي يحقق المحاذاة التي نريدها , أي أن ملخص طلبنا هو الإحداثي السيني الذي يمثل محاذاة فعليا "إن شاء الله تصل الفكرة" , رغم أني لم أجد طريقة لطرح الأمر ببساطة إلا هذه , لأن مثل هذه الأمور الدقيقة تحتاج لشرح صوتي وهذا ما لا أريد الخوض فيه , قد يكون خجلا أو شيء من هذا القبيل هههههههه.

المسافة المطلوبة للاحداثي السيني=المساحة الفارغة التي تترك Q مضافا إليها المحاذاة اليمنى L1
المساحة الفارغة التي تترك Q = المسافة بين المحاذاة اليمني والمحاذاة اليسرى J مطروحا منه المسافة التي تشغلها الكلمة S
Q=J-S

أولا: المسافة بين المحاذاة اليمني والمحاذاة اليسرى J =المحاذاة اليمنى L2 مطروحا منه المحاذاة اليسرى L1
J=L2-L1
ثانيا: المسافة التي تشغلها الكلمة S=المساحة التي يشغلها الحرف Sa مضروبا في عدد الأحرف في الكلمة Ni
S=Sa*Ni

وحيث أن: المساحة التي يشغلها الحرف Sa=المسافة بين المحاذاة اليمنى والمحاذاة اليسرى J مقسوما على عدد الأحرف الكلية التي يمكنها شغل المسافة بين المحاذتان "إن صح التعبير" Nmax
Sa=J/Nmax

وبالرجوع إلى: المسافة التي تشغلها الكلمة S=المساحة التي يشغلها الحرف Sa مضروبا في عدد الأحرف في الكلمة Ni

S=J/Nmax*Ni

وبالرجوع إلى:المسافة الفارغة التي تترك Q = المسافة بين المحاذاة اليمني والمحاذاة اليسرى مطروحا منه المسافة التي تشغلها الكلمة

Q=J-S

وبذلك تكون المسافة المطلوبة للاحداثي السيني X

X=L1+Q
X=L1+(J-S)
X=L1+(J-(J/Nmax*Ni))
X=L1+J(1-(1/Nmax*Ni))

وهذه هي المعادلة ,,,,,,,, تظهر هنا صعبة في صياغتها , ولكن في العمل أسهل من ذلك ,,,,,,
سأضع إن شاء الله صورة الورقة التي قمت فيها بتحليل الأمر ,,,,,,,, خلاصة القول: بإمكاننا وضعها برمجيا باستخدام PHP كالتالي:
$xx_l1=250;
$xx_l2=590;
$xx_j=($xx_l2-$xx_l1);
$xx_n=(strlen($text)-1)/2;
$xx_nmax=40;
$rt=$xx_l1+$xx_j*(1-($xx_n/$xx_nmax));

على اعتبار L1&L2&nmax ثوابت , والمتغير هو عرض الكلمة text والنتيجة هي الاحداثي السيني rt

أترككم مع المعادلة ,,,,,,,, في أمان الله

ليست هناك تعليقات:

إرسال تعليق