<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Nour Eldeen]]></title><description><![CDATA[Obsidian digital garden]]></description><link>http://github.com/dylang/node-rss</link><image><url>site-lib/media/favicon.png</url><title>Nour Eldeen</title><link/></image><generator>Webpage HTML Export plugin for Obsidian</generator><lastBuildDate>Thu, 11 Jun 2026 21:27:13 GMT</lastBuildDate><atom:link href="site-lib/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Jun 2026 21:27:12 GMT</pubDate><ttl>60</ttl><dc:creator/><item><title><![CDATA[README]]></title><description><![CDATA[Egyptian Arabic summaries and study notes for academic courses at MET.Subjects:
GIS (Geographic Information Systems)
Computer Graphics
Networks
Prolog
🌐 Live site: <a data-tooltip-position="top" aria-label="https://noureldeenmahmoud.github.io/MET-Summaries/" rel="noopener nofollow" class="external-link is-unresolved" href="https://noureldeenmahmoud.github.io/MET-Summaries/" target="_self">noureldeenmahmoud.github.io/MET-Summaries/</a>]]></description><link>readme.html</link><guid isPermaLink="false">2 - Areas/College/README.md</guid><pubDate>Thu, 11 Jun 2026 21:26:46 GMT</pubDate></item><item><title><![CDATA[Index]]></title><description><![CDATA[11/6/2026 المواد الي اتشرحت لحد دلوقتي هما : Networks , Prolog , Computer Graphics , GIS
دوس علي اللينك بتاع المادة الي انته عايزها هيوديك علي المحتوي بتاعها, ومهم تقرا الكلام الي مكتوب في اول الفايل. لو فيه اي اخطاء سواء في الشرح او في الاسالة قولي عشان اعدلها — <a rel="noopener nofollow" class="external-link is-unresolved" href="https://t.me/DevNourEldeen" target="_self">https://t.me/DevNourEldeen</a>]]></description><link>index.html</link><guid isPermaLink="false">2 - Areas/College/Index.md</guid><pubDate>Thu, 11 Jun 2026 21:20:51 GMT</pubDate></item><item><title><![CDATA[Index]]></title><description><![CDATA[لو فيه اي اخطاء في الشرح قولي عشان اعدلها — <a rel="noopener nofollow" class="external-link is-unresolved" href="https://t.me/DevNourEldeen" target="_self">https://t.me/DevNourEldeen</a>]]></description><link>networks/index.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Index.md</guid><pubDate>Thu, 11 Jun 2026 20:07:09 GMT</pubDate></item><item><title><![CDATA[Lecture 8 - Cartography]]></title><description><![CDATA[مقدمة الجزء ده بيتكلم عن الخرائط (Cartography) وعناصر الخريطة (Map Elements).
أهم المحاور: مقاييس القياس (Nominal, Ordinal, Interval, Ratio)، استراتيجيات الترميز (Point, Line, Area, Dot Distribution)، وتشريح الخريطة (Neatline, Border, Title, Legend, Scale, North Arrow, Inset Map). مستويات قياس البيانات (Scales of Measurement)، بتتقسم لـ 4 أنواع حسب إحنا بنستخدم الأرقام إزاي:
أربعة مقاييس للبيانات
القيم العددية بتتحدد بالنسبة لـ 4 مقاييس: Nominal data information that is simply grouped into categories on the basis of qualitative considerations: a road distinguished from a river or a forest distinguished from an open field.
1. المقياس الاسمي (Nominal):
الفكرة: الأرقام هنا مجرد "هوية أو اسم" للتمييز فقط، ملهاش أي قيمة رياضية.
الخصائص: مفيش ترتيب، ومينفعش نجمع أو نطرح.
الأمثلة: زي رقم تليفونك. رقم الـ T-shirt بتاع المتسابق (المتسابق رقم 9 مش معناه إنه أحسن أو أكبر من رقم 5، ده مجرد كود ليه).
في الـ GIS: تصنيف الحاجات زي (غابة، نهر، طريق). الأرقام بتعمل هوية بس — مش بتدي ترتيب أو قيم.
يعني: رقم التليفون (2218000 مش اكبر من 2217000).
<img border="0" alt="image" src="https://i.ibb.co/RdyKYJP/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Ordinal data is grouped by rank on the basis of some quantitative measure: small, medium, and large cities or single-lane, double-lane, and four-lane roads. الأرقام هنا بتعبر عن "ترتيب أو رتبة"، لكن منعرفش المسافة أو الفرق بين كل رتبة والتانية قد إيه.
أمثلة: مراكز السباق (1st, 2nd, 3rd) — مش عارفين الفرق الزمني بينهم.
الـ Ordinal Data: بيانات بتتجمع حسب الترتيب بناءً على قياس كمي — مدن صغيرة/متوسطة/كبيرة، طرق حاره واحدة/اتنين/أربعة.
<br><img border="0" alt="image" src="https://i.ibb.co/998nss5M/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
هنا الترتيب موجود، وكمان الطرح بين الأرقام ليه معنى ثابت، لكن مفيش صفر حقيقي (الصفر مش معناه انعدام الحاجة).
الطرح ينفع، لكن القسمة/النسبة مينفعش.
القسمة مش معنوية — 200°C مش ضعف 100°C.
درجات الحرارة (Celsius): درجة 20°C أدفى من 10°C بعشر درجات (الطرح شغال)، لكن مينفعش تقول إن 20°C "ضعف حرارة" 10°C؛ لأن مثلا عشان تقول ان 4 ضعف 2 لازم يكون الرقمين بادئين من الصفر (اول مره اعرف المعلومه دي). ده أعلى وأدق مقياس. فيه ترتيب، والمسافات متساوية، وكمان فيه صفر حقيقي مطلق.
الخصائص: الجمع، الطرح، والأهم القسمة والنسبة كلهم ليهم معنى.
أمثلة: الوزن (50 kg = نص 100 kg)، مدة السباق ( اللي خلص السباق في 5 ساعات، أخد "ضعف" الوقت بتاع اللي خصه في ساعتين ونص (5 / 2.5 = ).
صفر الميزان مطلق، لكن صفر Celsius مش مطلق.
<br><img border="0" alt="pasted image 20260605220457" src="https://i.ibb.co/3y7zXMkg/pasted-image-20260605220457.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">ملاحظة مهمة معظم البيانات الجغرافية في الـ GIS Nominal أو Ordinal — القيم بتعمل ترتيب أو هوية بس، ونادرًا Interval أو Ratio. Three Levels of Measurement: Nominal (Qualitative) — بيانات نوعية.
Ordinal — بيانات مرتبة.
Ratio (Quantitative) — بيانات كمية. <br><img border="0" alt="image" src="https://i.ibb.co/nqJBY1z9/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الفكرة: بنستخدم رمز (غالباً دائرة)، وحجم الرمز ده بيكبر ويصغر حسب القيمة اللي بيعبر عنها. (مثلاً: دائرة كبيرة = عدد سكان كتير، دائرة صغيرة = عدد سكان قليل).
الميزة (Easy to see distribution): ممتازة جداً عشان توريك "التوزيع المكاني". بمجرد النظر للخريطة هتعرف الأماكن الزحمة والأماكن الفاضية.
العيب (Hard to see if overlapping): لو الأماكن قريبة من بعض والقيم كبيرة، الدوائر هتكبر وتدخل في بعضها (Overlapping) وتغطي على تفاصيل الخريطة وماتعرفش تقراها كويس.
<br>
<img border="0" alt="image" src="https://i.ibb.co/whLhPr1F/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الفكرة: بدل ما نحط دائرة أو لون، بنحط رسم بياني كامل (زي الـ Pie Chart أو الـ Bar Chart) جوه كل منطقة أو محافظة على الخريطة.
الميزة (Magnitudes and categories obvious): بتوضح الأرقام (الكميات) والفئات بدقة. (مثلاً: تقدر تشوف رسمة بتوضح نسبة الذكور للإناث في كل محافظة بوضوح).
العيب (Hides spatial pattern): الرسومات البيانية بتعمل "زحمة بصرية"، فبتداري معالم الخريطة الأصلية، وبتخليك مش قادر تلمح "النمط الجغرافي العام" بسهولة.
<br>
<img border="0" alt="image" src="https://i.ibb.co/9KDSHqz/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الجزء ده بيشرح "عناصر الخريطة الأساسية" (Map Elements) وإزاي بنعمل إخراج نهائي للخريطة (Map Composition) بحيث تطلع مريحة للعين وفيها توازن بصري (Visual Balance).
<br><img border="0" alt="image" src="https://i.ibb.co/7NvXSwJ6/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Map Scale: Map scale defines the amount of reduction of reality. ده من أهم العناصر، وهو "نسبة تصغير الواقع على الورقة".
قاعدة مهمه في الـ GIS: دايماً يفضل "تصغر" خريطة دقتها عالية، بدل ما "تكبر" خريطة دقتها قليلة (عشان الجودة والتفاصيل بتبوظ لما بتكبر).
3 أنواع من Scale: مقياس لفظي (Verbal Scale): بيتكتب بالكلمات العادية، زي: (1 سم يمثل 1 متر).
مقياس كسري/نسبي (RF - Representative Fraction): بيتكتب كنسبة مئوية، زي: (1:100,000) يعني كل 1 سم على الخريطة بيساوي 100,000 سم في الحقيقة.
مقياس خطي (Graphic Bar): مسطرة مرسومة على الخريطة ومتقسمة مسافات. (وده أفضل نوع للخرايط المطبوعة، لأنك لو صورت الخريطة وكبرتها أو صغرتها، المسطرة هتكبر وتصغر معاها بنسبة وتناسب). <br>
<img border="0" alt="image" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS94_Ll1KuysKo_mlPcdmJ-FCmolfIfMVDxXA&amp;s" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Title الفرق بين المقياس الكبير والصغير (مهمة ): ا Large Scale (مقياس كبير): الكسر بتاعه كبير (زي 1:1,000). بيعرض مساحة صغيرة بس فيها تفاصيل كتير جداً (زي خريطة شارعك).
ا Small Scale (مقياس صغير): الكسر بتاعه صغير (زي 1:1,000,000). بيعرض مساحة كبيرة جداً بس تفاصيلها قليلة (زي خريطة العالم أو خريطة مصر كلها). The reference area on a map that lists: The colors, Symbols, Line patterns, Shadings and other annotation used on the map, and their meanings. ده "القاموس" بتاع الخريطة. بيترجم للـ User كل حاجة مرسومة (الألوان، الرموز، أشكال الخطوط، التظليل) معناها إيه في الحقيقة. (مثال: الخط الأحمر = سكة حديد).
<br>
<img border="0" alt="image" src="https://i.ibb.co/4RZz5Tfs/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 200px; max-width: 100%;"> The question of what is north can be an issue on some maps. مؤشر بيعرفك اتجاه الشمال فين. وفيه نوعين من الشمال: الشمال الحقيقي (True North): الاتجاه الثابت للقطب الشمالي (وده اللي بنستخدمه في الخرايط).
الشمال المغناطيسي (Magnetic North): ده اللي البوصلة بتشاور عليه، ومكانه بيتغير بمرور الزمن بسبب تغيرات القشرة الأرضية. <br>
<img border="0" alt="image" src="https://i.ibb.co/jvgKt94B/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 300px; max-width: 100%;"> Readers will need to know about the sources from which the map was derived. لازم تكتب البيانات بتاعتك جاية منين (زي هيئة المساحة أو قمر صناعي معين) عشان القارئ يثق في دقة وصحة الخريطة. لازم يكون واضح، بيشد الانتباه، ومناسب للهدف من الخريطة والجمهور اللي هيقراها. ودي الطريقة اللي فردنا بيها الأرض "الكروية" على ورقة "مسطحة". لازم يتكتب نوع الـ Projection لأن أي Projection في الدنيا بيعمل تشويه في واحدة من الأربعة دول: (المساحة Area، المسافة Distance، الاتجاه Direction، أو الشكل Shape). اسم الشخص أو الشركة اللي رسمت وأخرجت الخريطة. عنصر حساس جداً. القارئ لازم يعرف الخريطة دي معموله سنة كام، لأن لو خريطة "طرق" قديمة ممكن تودي الناس في داهية، بينما خرايط تانية (زي الجبال) مش بتتأثر أوي بمرور الزمن. The outer neatline of a map--its border--helps to frame the entire map composition to draw the reader's attention to the various elements of information.
Neatlines are also used to "clip" the area of the body of the map and of locator, and inset maps ده "البرواز" أو الخطوط اللي بتحوط الخريطة. بتعمل حاجتين بتفصل الخريطة عن الورقة وتشد عين القارئ.
بتستخدم كـ (مقص) تقطع بيه حدود منطقة معينة عشان تعرضها في خريطة فرعية. The cartographer adds a "helper" or locator map that places the body of the map within a larger geographical context with which the reader can be expected to be familiar. دي خريطة "مُساعدة" صغيرة بتتحط في الجنب، بتوريك "السياق الأكبر". (مثال: لو أنت عامل خريطة لمدينة المنصورة، بتحط خريطة صغيرة لمصر كلها وفيها نقطة حمرا على المنصورة عشان لو حد مش من المنصوره يعرف مكانها فين). provide the reader with additional close-up, "zoomed in" maps of these smaller areas. دي عكس اللي فوق. لو الخريطة الأصلية زحمة جداً وفيها حتة مليانة تفاصيل متداخلة ومش باينة، بنقوم واخدين الحتة دي في مربع على جنب ونعملها "Zoom in" عشان نوضحها.
ملخص 1. مقاييس البيانات (Scales): ا Nominal: تصنيف وهوية فقط (أنواع الأراضي، رقم التليفون).
ا Ordinal: ترتيب ورتبة فقط (الأول، التاني).
ا Interval: فرق ثابت بين القيم لكن مفيش صفر مطلق (درجة الحرارة).
ا Ratio: دقة كاملة بـ صفر مطلق، ينفع فيها القسمة (الوزن، المسافة). 2. استراتيجيات الترميز (Symbols): ا Graduated (رموز متدرجة): حجم الرمز يعبر عن القيمة. (حلوة للتوزيع المكاني، عيبها التداخل في الزحمة).
ا Charts (رسومات بيانية): دقيقة في الأرقام، بس بتعمل زحمة وتداري معالم الخريطة الأساسية. 3. عناصر الخريطة (Map Anatomy): ا Scale (المقياس): المقياس الكبير = تفاصيل كتير لشارع، المقياس الصغير = تفاصيل قليلة لدولة. (المقياس الخطي هو الأفضل للطباعة).
ا Legend: قاموس الخريطة (معاني الألوان والرموز).
اNeatlines: برواز الخريطة الخارجي.
اLocator Map: خريطة مساعدة بتوريك مكانك جوه سياق أكبر (نقطة على خريطة الدولة).
اInset Map: خريطة مكبرة (Zoom-in) لحتة معينة زحمة في الخريطة عشان توضحها.
حاجات تانية: Title (العنوان)، Direction (اتجاه الشمال)، Projection (المسقط - دايماً بيعمل نسبة تشوه)، والـ Date/Source (تاريخ ومصدر البيانات). ]]></description><link>gis/lectures/lecture-8-cartography.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 8 - Cartography.md</guid><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><enclosure url="https://i.ibb.co/RdyKYJP/image.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/RdyKYJP/image.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Lecture 6 - Spatial Data Inputs]]></title><description><![CDATA[مقدمة الجزء ده بيتكلم عن مصادر إدخال البيانات المكانية (Spatial Data Inputs) في الـ GIS.
أهم المحاور: تصنيف البيانات الجغرافية, الطرق الرئيسية لجمع البيانات (Photogrammetry, Remote Sensing, GPS), وآليات كل طريقة بالتفصيل. خرائط الـ GIS رقمية (Digital) مش Analog — كل البيانات بتتخزن في الكمبيوتر وبتتحلل رقميًا.
وظيفة الـ GIS هي جمع البيانات من مصادر مختلفة ودمجها في قاعدة بيانات موحدة (Integrated GIS Database).
مصادر البيانات
البيانات بتيجي من مصادر كتير: خرائط موجودة (Maps) — خرائط ورقية بتتمسح ورقمية.
بيانات أقمار صناعية (Satellite Data) — صور من الفضاء.
بيانات رقمية (Digital Data) — ملفات رقمية جاهزة.
بيانات جدولية (Tabular Data) — جداول إكسل وقواعد بيانات.
أفكار ومعلومات (Soft Ideas) — معرفة وخبرات. Data Pipeline
Reality → Features → Objects → Entities → Attributes
كل ظاهرة في الواقع بيتكتبها الـ GIS كـ Feature (نقطة، خط، مضلع) وبعدها بيتمثّل كـ Object فيه Attributes. ا Primary Data Collection: جمع البيانات من المصدر الأصلي لأول مرة.
ا Secondary Data Collection: تحويل أو معالجة بيانات موجودة بالفعل.
definition Photogrammetry is the technology of obtaining reliable 3-D information about physical objects through processes of measuring, and interpreting photographic images. هي التكنولوجيا اللي بنقدر من خلالها نطلع مجسمات أو خرائط ثلاثية الأبعاد (3D) لأي مكان أو مبنى، عن طريق استخدام صور فوتوغرافية عادية (2D).
الـ Photogrammetry بتستخدم صور جوية (Aerial Photos) عشان تجيب قياسات ومعلومات مكانية عن المجسمات على سطح الأرض.
بتعتمد على فكرة تقليد عين الإنسان. ربنا خلق لينا عينين كل عين بتشوف نفس الحاجة بس من زاوية مختلفة اختلاف بسيط. المخ بياخد الصورتين دول يدمجهم مع بعض، وده اللي بيخلينا نقدر نشوف "العمق" ونحس بالأبعاد الـ 3D. Stereoscopic Vision: Viewing an object from 2 different camera positions achieves 3-D effects.
Stereoscopy ا Binocular Vision: كل عين بتشوف الصورة من زاوية مختلفة، والدماغ بيدمجهم في صورة ثلاثية الأبعاد.
أهم شرط عشان الطريقة دي تنجح (قاعدة التداخل - Overlap): الطيارة مستحيل تصور كل حتة مرة واحدة وتمشي، لازم الصور "تركب على بعضها" عشان نضمن إن كل مبنى اتصور من زاويتين مختلفتين (عشان نعمل فكرة العينين اللي شرحناها فوق). التداخل الأمامي (Overlap): الطيارة وهي ماشية لقدام، الصورة الجديدة لازم تغطي من 60% لـ 80% من مساحة الصورة اللي لسه متصورة قبلها. (الصورتين دول مع بعض بنسميهم Stereo Pair).
التداخل الجانبي (Sidelap): لما الطيارة تلف وترجع في خط موازي عشان تصور الشارع اللي جنبه، الخط الجديد بيتداخل مع الخط القديم بنسبة 20% لـ 30%. <img src="https://www.researchgate.net/profile/Kinga-Kiss-2/publication/262375346/figure/fig4/AS:667782517645325@1536223167277/Overlap-between-aerial-photographs.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
المميزات تفاصيل عالية (High Resolution) — صور أوضح من الصور الأقمار الصناعية القديمة.
تكاليف معقولة لمساحات صغيرة ومتوسطة.
مرنة — ممكن تصوير في أي وقت حسب الطقس. العيوب محتاجة طقس صافي (Clear Weather) — الغيوم والضباب بيأثروا على جودة الصور.
معالجة بطيئة — الصور الجوية بتحتاج معالجة كتير.
تكلفة عالية لمساحات كبيرة. Definition RS Process The process of acquiring information about the Earth's surface without being in contact with it — by sensing and recording reflected or emitted energy and processing, analyzing, and applying that information. الاستشعار عن بُعد (Remote Sensing) هو علم اكتساب معلومات عن سطح الأرض بدون لمس مباشر (Without Physical Contact) — عن طريق كشف وتسجيل الطاقة المنعكسة أو المُصدَرة من الأجسام. بيعتمد على قياس "الأشعة الكهرومغناطيسية" (Electromagnetic radiation) اللي بتنعكس أو بتنبعث من الأجسام، باستخدام أجهزة استشعار (Sensors) بتلقط موجات مختلفة (زي الضوء المرئي، أو الميكروويف).
ا HOW MUCH — تحديد بالعد أو قياس المساحة أو النسبة المئوية.
ا WHERE — ربط المواقع بالخرائط أو المواقع الحقيقية على الأرض.
ملاحظة: كلمة "Where" بتتكون لفترة زمنية كمان (التوقيت مهم). الاستشعار السلبي (Passive): جهاز بيستقبل بس. بيعتمد على مصدر إضاءة طبيعي (غالباً الشمس). الاستشعار الإيجابي (Active): جهاز "بيبعت ويستقبل". الجهاز نفسه بيطلع أشعة تخبط في الأرض وترجعله يقيسها. كأنك بتصور بالليل وشغلت الفلاش. (أشهر أمثلته: الرادار RADAR، والليزر LIDAR).
Passive RS Interactions فيه 3 تفاعلات بتحصل في الـ Passive RS: ا Extinction: الطاقة بتتمتص أو تتبعثر من الحزمة.
ا Emission: الطاقة بتتسرَّب من الجسم (الغلاف الجوي).
ا Scattering: الطاقة الطبيعية بتتتبعثر نحو القمر الصناعي. Active RS Interaction في الـ Active RS فيه تفاعل واحد بيحصل الـ Backscattering: الإشعاع الاصطناعي بيتبعثر رجوعًا نحو القمر الصناعي من سطح الأرض. RS Elements ا Energy Source / Illumination (A) — مصدر الطاقة (الشمس).
ا Radiation and the Atmosphere (B) — مرور الإشعاع عبر الغلاف الجوي.
ا Interaction with the Target (C) — تفاعل الطاقة مع السطح.
ا Recording of Energy by the Sensor (D) — تسجيل الطاقة بالحساس (القمر الصناعي).
ا Transmission, Reception, and Processing (E) — نقل البيانات ومعالجتها.
ا Interpretation and Analysis (F) — تفسير وتحليل البيانات.
ا Application (G) — التطبيق (خرائط، تقارير). Radiation Interactions
-لما الأشعة أو الطاقة (Incident Energy - I) بتسيب الغلاف الجوي وتخبط في سطح الأرض بيحصلها حاجة من تلاتة (أو ميكس بينهم): الامتصاص (Absorption - A): الهدف بيمتص الطاقة دي. (زي الأسفلت لما يمتص حرارة الشمس ويسخن).
النفاذية (Transmission - T): الأشعة بتخترق الهدف وتعدي الناحية التانية. (زي لما الضوء بيعدي جوه الماية أو إزاز الشباك).
الانعكاس (Reflection - R): الأشعة بتخبط في الهدف و"ترتد" وتنعكس تاني لفوق. (وده أهم واحد بالنسبة لنا، لأن ده اللي القمر الصناعي بيلقطه عشان يصور الهدف).
النسب بتاعت كل تفاعل بتعتمد على الطول الموجي (Wavelength) و نوع المادة (Material) و حالة السطح (Condition). نظام تحديد الموقع العالمي (GPS) هو نظام ملاحة فضائي مبني على قمر صناعي، بيتم التحكم فيه من الولايات المتحدة (U.S Air Force) لصالح وزارة الدفاع (DOD).
اشتغل في 26 يونيو 1993 مع إطلاق القمر الصناعي الـ 24.
جهاز الـ GPS بتاعك بيستقبل إشارات عشان يحسب 3 حاجات: (مكانك، سرعتك، والوقت).
عشان الموبايل يقدر يحدد مكانك بدقة في الـ 3D (خط الطول، دائرة العرض، والارتفاع) ويظبط الوقت، لازم يلقط إشارة من 4 أقمار صناعية على الأقل. كل ما الأقمار زادت، الدقة زادت.
GPS Characteristics مجاني (Free)
دقيق (Precise)
موثوق (Reliable)
يشتغل في كل الظروف الجوية (All Weather)
في أي وقت وأي مكان (Anytime &amp; Anywhere) — مع ملاحظة إن "Almost!" على الشريحة
لا نهائي المستخدمين (Unlimited User Capacity) الـ GPS النظام مبني على 3 شرائح (Segments). ا Space Segment
ا Control Segment
ا User Segment <br> <img src="https://www.pdhonline.com/courses/l116/fig2.gif" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> ا مجموعه (constellation) من 24 قمر صناعي بيدوروا حول الأرض على ارتفاع حوالي 11,000 ميل بحري (nautical mile). كل قمر بيدور مرة كل 12 ساعة. كل قمر ليه رقم تعريفي فريد وبيبث إشارة فريدة. الإشارة بتسافر بـ سرعة الضوء (Speed of Light). كل قمر فيه ساعة عالية الدقة — 0.000000003 ثانية. زي ما اتفقنا قبل كده، عشان الجهاز يحدد مكانك، لازم يعرف المسافة بينك وبين أكتر من قمر صناعي. الـ GPS بيستخدم نوعين من الإشارات عشان يحسب المسافة دي: الـ Code-phase ranging الـ Carrier-phase ranging الـ Code-Phase Ranging (حساب المسافة بالكود): الإشارة (Signal &amp; Time stamp): كل قمر صناعي بيبعت إشارة فريدة خاصة بيه، ومكتوب عليها "وقت انطلاقها" بالظبط.
حساب الزمن (Time Delay): الرسيفر (الموبايل) متسجل عليه نسخة من نفس الإشارة، فبيحسب الإشارة اتأخرت قد إيه عشان توصله (وقت الوصول - وقت الانطلاق).
المعادلة (The Equation): الجهاز بيحسب المسافة بقانون السرعة: (المسافة = الزمن × السرعة). الـ Carrier-phase ranging: الطريقة دي بتعتمد على إن الجهاز بيقيس المسافة بـ "عد موجات الراديو" نفسها اللي شايلة الإشارة، بدل ما يقرا الكود اللي جواها. وعشان الموجات دي قصيرة جداً، بتدي دقة مرعبة بالسنتيمتر، فبيستخدموها في أجهزة المساحة الهندسية الاحترافية مش في الموبايلات العادية. دي محطات موجودة على الأرض (محطة رئيسية ومحطات فرعية) متوزعة في العالم. المحطة رئيسية وظيفتها إنها تراقب الأقمار الصناعية، تظبط مساراتها، وتصلح ساعاتها لو أخرت أو قدمت. 5 محطات تحكم حول العالم: ا Falcon AFB, Colorado Springs — Master Control Monitor Station
ا Hawaii Monitor Station
ا Ascension Island Monitor Station
ا Diego Garcia Monitor Station
ا Kwajalein Monitor Station النظام فيه كمان 12 انتينا (command and control antennas) ، و16 محطة مراقبة Master Control Station determines satellite conditions (orbit, clock, health status) and calibrates the satellite’s clock ده جهاز الـ GPS بتاعك (أو موبايلك). وظيفته بس إنه يستقبل ويفك شفرة الإشارات اللي جاية من الأقمار ومبيبعتش حاجة. المستقبل الأساسي مفيش جهاز إرسال (No Transmitter).
مستويات دقة مختلفة — من $100 لـ $30,000.
المستقبل بيحدد موقعه عن طريق التثليث المساحي (Trilateration).
Types of Receivers Garmin Handheld — مستقبل يدوي للمستخدمين العاديين.
Trimble GeoCE — جهاز ميداني للمحترفين.
HiPer Pro — جهاس مسحي دقيق على Tripod. كل قمر صناعي بيعرف موقعه ومسافته من مركز الأرض وبيبث المعلومات دي باستمرار. المستقبل بيحسب مسافته من كل قمر وبيحدد موقعه. قمر صناعي واحد: المستقبل ممكن يكون في أي مكان على الدائرة المحيطة بالقمر.
<br> <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT0mgtErblxkQ-cUyHCx5R_1B8FGO3k8RGdPQ&amp;s" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> قمرين: المستقبل بيضيق لموقعين فقط (نقطتين بتتقاطع).
<br> <img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQefqIb1Vf4ddzhz7TsR2ICr-Gy9FeCF-pK-HBV1xmUKTSz9jQr" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> 3 أقمار: المستقبل بيحدد موقعه لأن أحد المواقع بيكون في الفضاء (غير ممكن).
<br> <img src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTz5mVMhKU1fpywp4WqnD2uBCI9i9nQlGBR_f1IgG3h1fIEI8Sz" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> 4 أقمار أو أكتر: الدقة بتزيد كل ما الأكتر أقمار اتستخدمت.
<br> <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRq9CjJ9ZXEZyxQx4S9HJzqNNyew5c5DUGuvw&amp;s" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> ملاحظة: الأقل 4 أقمار مطلوبين لحساب الموقع في 3 أبعاد + فرق الوقت (Time Offset). أحياناً الـ GPS بيغلط، ده بيحصل بسبب: ا Satellite Geometry — توزيع الأقمار في السماء.
ا Satellite Orbits — أخطاء في مسار القمر.
ا Multipath — إشارات بترتد من أسطح صلبة (مباني، عربيات).
ا Atmospheric Effects — الغلاف الجوي بيبطئ الإشارة.
ا Clock — أخطاء في ساعة المستقبل أو القمر. PDOP is Position Dilution of Precision
Satellite Geometry ا Good PDOP: ألما الأقمار تكون متوزعة وبعيدة عن بعض في السماء، التقاطع بتاعهم بيكون دقيق جداً . ا Poor PDOP: لو الأقمار كلها متجمعة في حتة واحدة في السماء (فوق دماغك مثلاً)، التقاطع بيكون واسع والدقة بتقل جداً. ا PDOP = Position Dilution of Precision — كل ما القيمة اقل، كل ما الدقة أعلى. <br><img border="0" alt="image" src="https://i.ibb.co/93TmTskr/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">Sources of Signal Interference ا Earth's Atmosphere — الغلاف الجوي بيأثر على سرعة الإشارة.
ا Solid Structures — المباني بتسبب Multipath.
ا Metal — العربيات والهياكل المعدنية بترتد الإشارة.
ا Electro-magnetic Fields — الأسلاك الكهربائية بتسبب تداخل. Atmospheric Error إشارات الراديو بتسافر بسرعة الضوء في الفضاء، لكن الغلاف الجوي بيبطئهم.
الإشارات منخفضة التردد بتتأثر أكتر.
المستقبل بيفرق بين وقت وصول الترددات العالية والمنخفضة وبيحسب تصحيح. نظام تحديد الموقع العالمي التفاضلي (DGPS) بيبعت إشارات تصحيح (RTCM Corrections) للأجهزة على الأرض وبيزود دقة الموقع وجودة الإشارة.
عشان نحل مشاكل الأخطاء، عملوا نظام اسمه DGPS. الفكرة إننا بنحط جهاز GPS ثابت على الأرض إحنا "عارفين إحداثياته الحقيقية بالمللي". الجهاز ده بيستقبل الإشارة ويقارنها بمكانه الحقيقي، فيعرف "قيمة الخطأ" كام، ويقوم باعت إشارة لاسلكية لجهازك (اللي بيتحرك) يقوله: "نقص 5 متر من الـ X، وزود 3 متر على الـ Y عشان تبقى دقيق".
How DGPS Works ا DGPS Site بيبقي في موقع معروف تمامًا (True Coordinates = x+0, y+0).
القمر الصناعي بيبث إشارة فيها خطأ (Error).
المستقبل العادي بيحسب موقعه مع الخطأ: x+30, y+60.
الـ DGPS Site بيحسب الخطأ ويبعت تصحيح (Correction): x-5, y+3.
المستقبل بيستخدم التصحيح: x+25, y+63 → أدق بكتير. Real-Time DGPS: التصحيح بيحصل في الوقت الفعلي (Real-Time) على السفن، العربيات، والمروحيات.
<br><img border="0" alt="image" src="https://i.ibb.co/qMzm5b6Z/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">Future Systems ا GPS (USA) — النظام الحالي.
ا GLONASS (Russia) — نظام روسي.
ا GALILEO (Europe) — نظام أوروبي. الأنظمة دي بتشتغل مع بعض وبتعلي الدقة والتوفر.
ملخص مصادر البيانات: Primary (جمع أولي) و Secondary (جمع ثانوي) × Raster/Vector.
الفوتوجرامترية (Photogrammetry): بتستخدم صور جوية مع Overlap 60% و Sidelap 30% + Stereoscopy لإنشاء إحداثيات.
الاستشعار عن بُعد (Remote Sensing): علم الحصول على معلومات بدون لمس مباشر — Passive (شمس) و Active (LIDAR/RADAR).
عناصر الـ RS السبعة: Energy Source → Atmosphere → Target Interaction → Sensor Recording → Transmission → Interpretation → Application.
تفاعلات الإشعاع: Absorption, Transmission, Reflection — بت depend على الطول الموجي والمادة.
ا GPS: نظام ملاحة فضائي بـ 3 شرائح (Space, Control, User) — 24 قمر على ارتفاع 11,000 nautical mile.
التثليث (Trilateration): 4 أقمار على الأقل لحساب الموقع في 3 أبعاد + الوقت.
أخطاء GPS: Geometry, Orbits, Multipath, Atmosphere, Clock.
ا PDOP: كل ما أكتر انتشار الأقمار، كل ما الدقة أعلى.
ا DGPS: محطة على موقع معروف بتبعت تصحيحات للمستقبلات → دقة أعلى.
أنظمة مستقبلية: GPS (USA), GLONASS (Russia), GALILEO (Europe). ]]></description><link>gis/lectures/lecture-6-spatial-data-inputs.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 6 - Spatial Data Inputs.md</guid><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><enclosure url="https://www.researchgate.net/profile/Kinga-Kiss-2/publication/262375346/figure/fig4/AS:667782517645325@1536223167277/Overlap-between-aerial-photographs.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src="https://www.researchgate.net/profile/Kinga-Kiss-2/publication/262375346/figure/fig4/AS:667782517645325@1536223167277/Overlap-between-aerial-photographs.jpg"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Lecture 5 - Raster Data Model]]></title><description><![CDATA[مقدمة الجزء ده بيتكلم عن الـ Raster Data Model في الـ GIS، مع مقارنة بـ Vector و TIN.
أهم المحاور: الـ Tessellations, تعريف وخصائص الـ RDM, نموذج الـ TIN, عناصر الـ RDM, أنواع بيانات الـ Raster, مقارنة الـ Raster مع الـ Vector و الـ TIN, هياكل البيانات (Cell-by-Cell, Run-Length Encoding, Quadtree, Block Coding, Chain Coding, Wavelet), تحويل البيانات, ودمج الـ Raster مع الـ Vector. في الـ GIS فيه 2 من نماذج بيانات رئيسية (Geographic Data Models): الـ Vector Data Model ممتاز للعناصر المنفصلة اللي ليها: موقع محدد تمامًا (Well-defined location).
شكل واضح (Shape). لكن الـ VDM مش بيشتغل كويس مع الظواهر المكانية اللي بتتغير باستمرار (Spatial phenomena that vary continuously) زي Precipitation, Elevation, و Soil Erosion.
يعني
نموذج الـ Vector بيمثل المعالم بـ Point, Line, Area — لكن مش بيمثل الظواهر المستمرة زي المطر والتضاريس بشكل كويس.
الـ Raster بيحل المشكلة دي لأنه بيخزن قيمة لكل خلية، والتغير في القيم بيعبر عن التغير المكاني للظاهرة.
definition Tessellations geometric arrangements of figures that completely cover a flat surface. الـ Tessellations عاملة بالظبط زي فكرة تجميع البازل. هي عبارة عن تكرار لشكل هندسي (أو أكتر) جنب بعض بحيث يغطوا مساحة معينة بالكامل.
عشان نقول على النمط ده إنه "Tessellation"، لازم: مفيش ثغرات (No Gaps): الأشكال لازم تكون لازقه في بعض، مفيش أي مسافة فاضية بينهم.
مفيش تداخل (No Overlaps): الأشكال ماينفعش تركب أو تغطي على بعضها. <img border="0" alt="Screenshot 2026 06 04 154943" src="https://i.ibb.co/xthpr1Fz/Screenshot-2026-06-04-154943.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الشكل الهندسي لـ Tessellation بياخد أشكال مختلفة: ا Triangle — مثلث (3 أضلاع).
ا Quad (Quadrilateral) — أرباع الأضلاع (4 أضلاع).
ا Pentagon — خماسي (5 أضلاع) Three Basic Regular Tessellations
في 3 أشكال أساسية من الـ Regular Tessellations: Triangular — مثلثات.
Square — مربعات.
Hexagonal — سداسيات. لو رصيت الأرض بمربعات أو مثلثات، الشكل الناتج هو الـ Raster.
التعريف الأدق: الـ Regular Square Tessellation هو اللي بيسمّى Raster Data Model.
definition Raster Data Model (RDM) The regular square or rectangular tessellation is called the raster data model, The raster data model uses regular grid to cover space. الـ Raster هو نموذج بيانات بيستخدم شبكة منتظمة من المربعات (Regular Grid) عشان يغطي المكان ويمثل الظواهر المكانية المستمرة. الـ RDM هو الأكثر استخدامًا في الـ GIS عمليًا، وده بسبب التوافق مع: أجهزة مختلفة للإدخال والإخراج (Different types of hardware devices for data capture and output).
صور الـ Bitmap في الرسوميات الحاسوبية (Bit-mapped images in computer graphics).
أنظمة إحداثيات شبكية زي Plane Rectangular Coordinate System (Grid-oriented coordinate systems). حته زياده من الكتاب نموذج الـ Raster متغيرش من ناحية المفهوم أو الصيغة من 3 عقود (3 decades), البحث ركز بدل كده على هيكل البيانات وتقنيات الضغط.
بيانات الـ Raster بتشتغل مع ملفات زي DXF من AutoCAD — الـ GIS بيقدر يقرأها ويحدد لها الإحداثيات والبروجكشن والزون.
s
البيانات اللي بتشتغل بيها في الـ GIS بصيغة Rater: ا Digital Elevation Data — بيانات الارتفاع الرقمية.
ا Satellite Images — صور الأقمار الصناعية.
ا Digital Orthophotos — الصور الجوية الرقمية المعدلة.
ا Scanned Maps — الخرائط الممسوحة.
ا Graphic Files — ملفات الرسوميات.&gt; ملاحظة
الصور (Images) هي شكل من أشكال بيانات الـ Raster — كل صورة digitized عبارة عن Raster بيتمثّل بـ Rows و Columns و Pixels. ArcGIS بيقدر يقرأ صيغ صور كتير زي TIFF, JPEG, PNG، والمهم في الـ GIS هو الصيغة اللي بتخزن الإحداثيات زي GeoTIFF.&gt; برامج الـ GIS التجارية بتقدر تعرض بيانات الـ Raster و الـ Vector مع بعض في نفس الوقت (Simultaneously)، وتبدل بين الصيغتين بسهولة. <br><img border="0" alt="image" src="https://i.ibb.co/w8D2m2G/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الـ RDM بيقسم المساحة الجغرافية لشبكة من الخلايا (Grid Cells). كل خلية لازم يكون فيها قيمة (Value) — لازم كل Cell تحتوي على قيمة (Each cell must contain a value). القيمة دي بتبين الكمية أو الصفة (Quantity or Characteristic) للمعلم المكاني أو الظاهرة الموجودة في موقع الخلية. الـ Raster بيمثل المعالم كالتالي: ا Points — بنقطة واحدة (Single cell / Single cells).
ا Lines — بتسلسل من الخلايا المتجاورة (Sequences of neighboring cells).
ا Areas — بمجموعة من الخلايا المتصلة (Collections of contiguous cells). الـ RDM بيتكوّن من 4 عناصر أساسية: قيمة الخلية (Cell Value) — كل خلية لازم يكون فيها قيمة.
حسب نوع القيمة، الـ Raster ممكن يكون: ا Integer Raster — أرقام صحيحة من غير كسور (1, 2, 3...). بيعبر عن فئات أو أنواع (Categorical data) — ممكن مرتبة أو غير مرتبة.
مثال: 1 = Urban, 2 = Forest, 3 = Water.
الـ Value Attribute Table بتخزن قيم الخلايا. ا Floating-Point Raster — أرقام عشرية (20.15, 12.23...). بيعبر عن بيانات مستمرة (Continuous numeric data).
مثال: حاجات بتتغير بدقة شديدة زي بيانات المطر (Precipitation) .
بياخد مساحة أكبر في الميموري من الـ Integer.
ملوش Value Attribute Table (No VAT) عشان العدد كبير جدًا.
الاستعلام بيبقى على نطاق قيم (Ranges) مش قيم فردية (مثلاً: من 12.0 الي 19.9). <br><img border="0" alt="image" src="https://i.ibb.co/bjpdpnB4/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
حجم الخلية (Cell Size) — بيحدد الدقة (Resolution) بتاعة الـ Raster.
مثال: حجم خلية 10 متر = 100 متر مربع (10 × 10).
لو الحجم 30 متر، يعني المربع بيمثل 30×30 متر=900 متر مربع. (الـ 10 متر دقتها أعلى وتفاصيلها أوضح بكتير). كل ما حجم المربع (الخلية/البيكسل) يِصغر، كل ما الدقة والتفاصيل تبقى أحسن وأوضح.
مشكلة الخلية الكبيرة لو فيه مربع ضخم (مثلاً 100×100 متر) بيغطي حتة أرض في الحقيقة نصها غابة، وربعها بحيرة، وربعها مباني. المربع ده في الـ Raster لازم ياخد قيمة واحدة بس. هنديله قيمة الغابة ولا البحيرة؟ دي اسمها مشكلة الـ "Mixed Features".
عشان نحلها بنصغر حجم الخلايا، بس ده بيخلي حجم الملف كبير جداً وبياخد وقت طويل في المعالجة (Processing).. نطاقات الـ Raster (Raster Bands) — الـ Raster ممكن يكون: ا Single Band — نطاق واحد: الخلية فيها رقم واحد بس بيعبر عن حاجة واحدة. مثال: نموذج الارتفاع الرقمي (DEM)، المربع ده ارتفاعه 50 متر عن سطح البحر. مفيش معلومات تانية في الخلية دي. ا Multi-Band — نطاقات متعددة: كل خلية ليها أكتر من قيمة. مثال: صور الأقمار الصناعية (Satellite Image) — ممكن يكون فيها 5, 7, أو أكتر من نطاق.
كل نطاق بيمثل مدى أمواج (Spectral band) من الطيف الكهرومغناطيسي. <br><img border="0" alt="image" src="https://raw.githubusercontent.com/NEONScience/NEON-Data-Skills/main/graphics/raster-general/single_multi_raster.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> 1. الجزء اللي على الشمال: Single Band Raster (نطاق واحد) زي ما إنت شايف، دي طبقة واحدة (ورقة واحدة) وكل مربع في الطبقة دي بيشيل قيمة واحدة بس.
مثال: لو افترضنا إن دي خريطة لدرجات الحرارة، فالنقطة الخضراء دي مثلاً متسجل فيها رقم (25)، اللي هو درجة الحرارة في المكان ده. مفيش أي معلومة تانية الخلية دي تقدر تشيلها. 2. الجزء اللي على اليمين: Multi Band Raster (نطاقات متعددة) هنا بقى هتلاحظ إنهم 4 طبقات مرصوصين فوق بعض بالظبط، وكلهم بيمثلوا نفس المكان الجغرافي.
دي بتعبر عن فكرة صور الأقمار الصناعية. الطبقات الأربعة دول ممكن يكونوا: الطبقة الأولى (اللي تحت): بتسجل الأشعة الزرقاء.
الطبقة التانية: بتسجل الأشعة الخضراء.
الطبقة التالتة: بتسجل الأشعة الحمراء.
الطبقة الرابعة (اللي فوق خالص): بتسجل الأشعة تحت الحمراء. المرجع المكاني (Spatial Reference) عشان الـ Raster ده ميبقاش مجرد صورة طايرة في الهوا، لازم نربطه بإحداثيات حقيقية على كوكب الأرض (Georeferencing)، عشان لما نحطه فوق خريطة تانية ينزل في مكانه الصح. الـ Raster اللي اتعدل عشان يتطابق مع نظام إحداثيات مشروع بيتسمي Georeferenced Raster.
ملاحظة من الكتاب
في تعديلين لازم يتعملوا عشان الـ Raster يرتبط بنظام إحداثيات مُشروع: ال origin في نظام الإحداثيات المشروع بيبقى تحت علي الشمال (Lower-left corner)، لكن origin الـ Raster بيبقى فوق علي الشمال (Upper-left corner).
إحداثيات المشروع لازم تتطابق مع الصفوف والأعمدة بتاعة الـ Raster. حته زياده من الكتاب
الـ Raster في الـ GIS مش نوع واحد ده بيشمل أنواع كتير من البيانات حسب الغرض منها:
ا 1. Satellite Imagery (صور الأقمار الصناعية) صور بتتصور من الأقمار الصناعية عشان تقيس الضوء المنعكس من سطح الأرض. ممكن تبقى: ا Single-Band: أبيض وأسود (نطاق طيفي واحد). ا Multispectral: أكتر من نطاق طيفي للتحليل والتصنيف. ا 2. Digital Elevation Models (DEMs) دي خرائط بتمثل ارتفاعات سطح الأرض. كل Pixel فيها بيخزن قيمة الارتفاع عند المكان ده. من أدق طرق إنتاجها حاليًا تقنية LiDAR اللي بتستخدم الليزر. ا 3. Digital Orthophoto Quadrangles (DOQ) صور جوية متصورة من طيارات. بعد التصوير بيتم تصحيحها هندسيًا عشان يتشال منها أي ميل أو تشوه. في الآخر بتبقى دقيقة مكانيًا وتتعامل معاها كأنها خريطة. ا 4. Scanned Maps (الخرائط الممسوحة ضوئيًا) خرائط ورقية اتعملها Scan وتحولت لبيانات Raster. ا DRG (Digital Raster Graphics) خريطة طبوغرافية ورقية اتعملها Scan واتحفظت كصورة Raster ملونة. ا Bi-Level Images صور فيها قيمتين بس (0 و 1) أو أبيض وأسود. بتستخدم كتير قبل تحويل الخطوط والحدود إلى بيانات Vector. ا 5. Graphic Files (ملفات الصور العادية) ملفات صور معروفة زي: ا JPEG ا TIFF ا PNG أهم نوع في الـ GIS هو GeoTIFF لأنه بيخزن الإحداثيات والمعلومات المكانية جوه الملف نفسه. Comparison
"Raster is faster, but raster is vaster, and vector just seems more corrector" الـ Raster أسرع في الجمع والعرض، لكنه بياخد مساحة أكبر.
الـ Vector أبطأ في الجمع، لكنه أدق و بياخد مساحة أقل. معلومه زياده من الكتاب
لو الجهاز بتاعك فيه Processor ضعيف و Memory قديمة، الـ Raster هياخد وقت طويل عشان الصور كبيرة جدًا.
مثال: صورة من الساحة العسكرية ممكن تاخد 300+ GB — ده بسبب إن الـ Raster بيخزن كل خلية لواحدها.
Raster Pyramids الـ Raster Pyramids هي مجموعة نسخ من الـ Raster بدقة أقل (Reduced Resolution) بتتخزن عشان تسرّع عملية عرض البيانات على الشاشة (Screen Drawing). كل مستوى في الهرم بيكون نسخة أصغر من الصورة الأصلية، وبالتالي يحتاج وقت أقل في العرض والمعالجة. لما تعمل Zoom Out، البرنامج بيستخدم النسخة المناسبة من الـ Pyramid بدل ما يقرأ الصورة الأصلية كاملة. في ArcMap غالبًا بتتخزن الـ Pyramids في ملفات بامتداد .rrd. إنشاء الـ Pyramids لما تضيف Raster جديد في ArcMap ومفيش Pyramids موجودة، البرنامج غالبًا هيطلب منك تعملها (Build Pyramids). العملية دي بتحصل مرة واحدة وبعدها بتساعد في تسريع العرض بشكل ملحوظ. مثال لو عندك Raster حجمه 10000 × 10000 بكسل: Pyramid Level 1: 5000 × 5000 Pyramid Level 2: 2500 × 2500 Pyramid Level 3: 1250 × 1250 لما تعرض الصورة على مستوى عام (Overview) أو تعمل Zoom Out بشكل كبير، ArcMap هيستخدم النسخة الأصغر بدل الصورة الأصلية، وده بيخلي العرض أسرع بكتير ويقلل استهلاك الموارد. definition Cell-by-Cell Encoding : A raster is stored as a matrix, and its cell values are written into a file by row and column. هو أبسط هيكل بيانات للـ Raster. الـ Raster بيتخزن كـ Matrix وقيم الخلايا بتتكتب في ملف صف بصف وعمود بعمود (By row and column).
الطريقة دي مثالية لو قيم الخلايا بتتغير باستمرار (Continuous) — زي بيانات الارتفاع وصور الأقمار الصناعية.
صور الأقمار الصناعية كمان بتشتغل بالطريقة دي.
<br>
<img border="0" alt="image" src="https://i.ibb.co/gZjyxwwM/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الـ Raster على الشاشة بيبان كأنه شبكة ثنائية الأبعاد (2D Matrix) مكونة من صفوف وأعمدة. لكن الكمبيوتر مبيخزنوش كده الـ Linear Array: الكمبيوتر بياخد قيم الخلايا دي ويرصها كلها في "خط واحد طويل" (Linear array). يعني بيمسك الصف الأول يكتب أرقامه ورا بعض، وبعدين يلزق فيه الصف التاني، والتالت، وهكذا.
الإحداثيات الضمنية (Implicit Location): الكمبيوتر مش بيخزن إحداثيات (X, Y) لكل خلية. ليه؟ لأننا مجرد ما نعرف الخلية دي في الصف الكام والعمود الكام، الكمبيوتر يقدر يحسب مكانها الجغرافي تلقائياً. <br><img border="0" alt="image" src="https://i.ibb.co/HfJdqmVd/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> بما إن الكمبيوتر حول خزن البيانات في طابور طويل من الأرقام، لو جه يفتح الملف تاني مش هيعرف الطابور ده يمثل خريطة أبعادها كام في كام!(يعني هل دول 1000 صف × 1000 عمود، ولا 500 صف × 2000 عمود؟). عشان كده، أي ملف Raster لازم يتكون من حتتين: البيانات نفسها: اللي هي الأرقام المكتوبة صف ورا صف.
الـ Header (رأس الملف): وبتكون مكتوبة في أول الملف خالص عشان تفهم الكمبيوتر يقرأ الأرقام دي إزاي. الـ Header ده بيكون جواه معلومات أساسية زي: عدد الصفوف والأعمدة (Rows and Columns): عشان الكمبيوتر يعرف يكسر طابور الأرقام الطويل ده ويرجعه لشبكة (Matrix) تاني.
عدد البتات (Number of Bits): اللي بتحدد حجم الخلية في الذاكرة والألوان المتاحة (مثلاً 8-bit يعني 256 لون/قيمة).
نوع البيانات (Type): هل الأرقام دي صحيحة (Integer) ولا عشرية (Floating)
مفتاح الخريطة (Legend).
الإحداثيات الجغرافية (Coordinate Transformation): المعلومات اللي بتربط الصورة دي بمكانها الحقيقي على كوكب الأرض (Georeferencing). حته زياده من الكتاب لما الـ Raster يكون فيه أكتر من نطاق (Multi-band)، فيه 3 صيغ لتخزين البيانات: ا Band Sequential (.bsq): كل نطاق بيبقى ملف منفصل — Band 1, Band 2...
ا Band Interleaved by Line (.bil): القيم بتتكتب صف بصف — Row 1 Band 1, Row 1 Band 2...
ا Band Interleaved by Pixel (.bip): القيم بتتكتب بكسل ببكسل — Pixel(1,1) Band 1, Pixel(1,1) Band 2... زي ما قلنا قبل كده "Raster is vaster" (حجمه كبير)، وده بيعمل مشكلة كبيرة وبطء لو حابين نبعت الملفات دي أو نخزنها. عشان كده اخترعوا (Compression Algorithms) عشان نقلل مساحة الملفات دي.
ومن اشهر الطرق دي: ا Run Length Encoding
ا Block Coding
ا Chain Coding
ا Quadtrees
ا Wavelet Compression (زي صيغة MrSID): دي طريقة قوية جداً بتضغط الملف لحد 2% من حجمه الأصلي لكنها Lossy (يعني بتضحي بشوية جودة وتفاصيل مقابل تصغير الحجم). definition Run-Length Encoding Adjacent cells along a row with the same value are treated as group called a run length encoding. دي طريقه بتخزن تسلسل القيم المتكررة (Repeated Sequences), بدل ما الكمبيوتر يكتب قيمة كل خلية لوحدها ويفضل يكررها، بيعد الخلايا اللي شبه بعض ورا بعض ويكتبهم كـ مجموعة.
مثال: بدل ما نكتب الخريطة كده: A A A A A A A A A A B B A A A... بنكتبها بالـ RLE كده: 10A 2B 3A...
يعني (عشر خلايا قيمتهم A، بعدهم خليتين قيمتهم B، بعدهم 3 خلايا قيمتهم A). <br><img border="0" alt="image" src="https://i.ibb.co/csjSV7P/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"><br><img border="0" alt="image" src="https://i.ibb.co/27FKXgM5/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;">
بدل ما البرنامج يسجل إحداثيات كل بيكسل لوحده، بيحاول يجمع البيكسلات اللي ليها نفس القيمة، ويسجل بس نقطة البداية بتاعة كل كتلة وحجمها.
يعني بنشوف اكبر مربع نقدر نخزنه وهو في المثال بتاعنا في الصوره مربع 3x3 ,وبيبدا من 5,2
نشوف بعدها لو فيه مربعات تانية نقدر نجمعها مع بعضها هنلاقي مربعين 2x2 مكانهم 8,3 و 7,5وهكذا لحد ما نخزن كله.
<br><img border="0" alt="image" src="https://i.ibb.co/DDsCKRcx/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الطريقه دي بتمشي على حدود الشكل, بتختار نقطة بداية وبعدين تفضل تسجل الاتجاهات (يمين، شمال، فوق، تحت) لحد ما ترجع عند نقطة البداية. ا N (North) = فوق
ا S (South) = تحت
ا E (East) = يمين
ا W (West) = شمال المثال: لو قرأنا السطر المكتوب في الـ File structure: هنبدا من النقطه (4,3)
ا N,2 ⬅️ اطلع لفوق خطوتين.
ا E,4 ⬅️ امشي يمين 4 خطوات.
ا S,1 ⬅️ انزل لتحت خطوة.
وهكذا... لحد ما نقفل الشكل ونرجع لنقطة البداية. <br><img border="0" alt="pasted image 20260604174230" src="https://i.ibb.co/RTDpVfZ8/pasted-image-20260604174230.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الـ Quadtree بيقسم الـ grid (المربع الكبير او الشبكه) لـ اربع مربعات , وكل مربع منهم بيتقسم لاربع مربعات وهكذا (Recursive Decomposition).
Quadtree properties 2^k pixels
depth k+1
internal nodes always have 4 children
internal nodes represent non-homogeneous regions
leaves represent homogeneous regions بنبص على الراستر كـ مربع واحد كبير. ونشوف: هل المربع ده كله نفس اللون او القيمه (متجانس - Homogeneous)؟ لو الإجابة أيوة: بيسجل المربع ده كله بلون واحد ويقف.
لو الإجابة لأ (فيه ألوان مختلفة): نقسم المربع الكبير ده لـ 4 مربعات متساوية . نمسك كل مربع من الأربعة الجداد ونكرر نفس السؤال: زي بعض ولا مختلفين؟
المربع المتجانس بيقف ويبقى اسمه "نقطة نهاية" أو ورقة (Leaf). أما المربع الملون فبيتقسم لـ 4 مربعات أصغر.. وهكذا نفضل نقسم لحد ما كل المربعات اللي باقية تبقى بلون موحد.
<br><img border="0" alt="image" src="https://i.ibb.co/W41DKWSM/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
هيبدأ يقسم الشبكة لـ 4 أرباع كبيرة (أرقامهم: 0، 1، 2، 3): الربع 0 و 1 و 2: مربعات فاضية. عشان كده البرنامج هيوقف تقسيم فيهم.
الربع 3 (اللي تحت على اليمين): المربع ده جواه الشكل الأسود، يعني المربعات مش زي بعض، فهناخده ونقسمه لـ 4 مربعات أصغر. التقسيم جوه المربع 3 (أرقامهم 30، 31، 32، 33): المربع 30: أسود بالكامل (مساحته 2×2 بيكسل). كده بقى متجانس، هنقف عنده ونحفظه.
المربع 32 و 33: أبيض بالكامل، هنتجاهلهم.
المربع 31: أغلبه أبيض بس جواه بيكسل واحد أسود. كده لسه غير متجانس، هنقسمه مرة تالتة التقسيم جوه المربع 31 (أرقامهم 310، 311، 312، 313): قسمه لبيكسلات فردية عشان يقدر يعزل البيكسل الأسود لوحده.
لقى إن المربع 312 هو البيكسل الأسود، والباقي أبيض، فخلاص هيحفظ 312 ويوقف تقسيم. <br><img border="0" alt="image" src="https://i.ibb.co/GfD6d9Hj/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> هنا السؤال بيطلب مننا نمشي بحرف U , هنبدا بالمربع الي فوق علي الشمال ونشوف هل هو متشابه ؟ الاجابه لا يبقي هنقسمه لاربعه ونمسك كل واحد فيهم نشوف هل هو متشابه؟ اول مربع متشابه يبقي مش هنقسمه وهنعمله ك leaf دايره تاني مربع نفس الحاجة
تالت مربع مختلف فهنقسمه اول اتنين ابيض والاتنين التانيين اصفر كده اول مربع فوق علي الشمال خلص هندخل علي الي بعده ونكمل بنفس الطريقة في الاخر خالص بنرقم البيكسلزالي في التري من 0-3 ونكتب ارقام البيكسلرز المتظلله, زي 002 ده معناه ان اول مربع فوق علي الشمال متقسم لاربعه اول مربع فيهم اخر اتنين فيه متظللين لو عايز تجيب عدد البيك لو اتلغبطت من الي انا كاتبه اقرا المثال هتفهمه مع نفسك ثواني من غير شرح. Caution الترتيب الي بنشتغل فيه علي المربعات بيفرق , المفروض الطبيعي اننا شغالين بحرف Z يعني بنبدا فوق علي الشمال وبعدين فوق يمين وبعدين تحت شمال وبعدين تحت يمين بس لو السؤال قالك تستخدم طريقه تانية زي الي فوق يبقي هنمشي معاه. May be use to get variable resolution for imagery in the National Map
<br><img border="0" alt="image" src="https://i.ibb.co/6cQ6fQ6J/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الـ overlay ده باختصار اننا نحط اتنين راستر علي بعض , مثلا عندنا راستر لاماكن المايه وراستر لاماكن فيها ممكن تلوث المايه, بنحطهم علي بعض والاماكن الي يحصل فيها تقاطع يبقي فيها مايه ملوثه.
اللون الاسود ده المايه واللون الاخضر دي الماده الي بتلوث المايه واللون الاحمر هو التقاطع او المايه الملوثه
حته زياده من الكتاب ا DOQs, DRGs, Graphic Files: بتتستخدم كـ خلفية (Background) لعرض البيانات.
ا Bi-Level Scanned Files: مدخلات لـ ترقيم (Digitizing) خطوط أو مضلعات.
ا DEMs: أهم مصدر لاستخراج معالم التضاريس زي: ا Contour — خطوط التضاريس.
ا Slope — الانحدار.
ا Aspect — الاتجاه.
ا Drainage Network — شبكة الصرف.
ا Watershed — الحوض المائي.
المعالم دي ممكن تتخزن بصيغة Raster أو Vector. صور الأقمار الصناعية: مفيدة في الدمج — صور مرجعية مكانيًا زي DOQs.
بيانات الـ Vector: بتتستخدم كـ معلومات مساعدة (Ancillary information) لمعالجة صور الأقمار الصناعية. مثال: Image Stratification — تقسيم المشهد لمناطق مختلفة Characteristics ومعالجة كل منطقة لوحدها. ملخص نماذج البيانات: Vector (Points/Lines/Polygons), Raster (Grid Cells), TIN (Triangles).
الـ Raster Data Model بيستخدم شبكة منتظمة من الخلايا لتمثيل الظواهر المستمرة.
الـ Tessellations هي الترتيبات الهندسية اللي بتغطي السطح — الـ Raster بيستخدم المربعات.
كل خلية لازم يكون فيها قيمة بتبين الصفة أو الكمية في الموقع ده.
تخزين الـ Raster: بيتعرض كـ 2D Matrix لكن بيتحفظ كـ Linear Array — الموقع بيتحدد بشكل implicitly من الصف والعمود، والإحداثيات بتتحسب وقت العرض والتحليل.
عناصر الـ RDM:ا Cell Value (Integer/Floating-point), Cell Size (Resolution), Raster Bands (Single/Multi), Spatial Reference (Georeferenced).
أنواع بيانات الـ Raster:ا Satellite Imagery, USGS DEMs, DOQs, DRGs, Graphic Files, Bi-Level Scanned Files — الصور هي شكل من أشكال الـ Raster.
هياكل البيانات: Cell-by-Cell, Run-Length Encoding, Quadtree, Block Coding, Chain Coding, Wavelet (MrSID — lossy, يقلل لـ 2%). ]]></description><link>gis/lectures/lecture-5-raster-data-model.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 5 - Raster Data Model.md</guid><pubDate>Sat, 06 Jun 2026 21:16:53 GMT</pubDate><enclosure url="https://i.ibb.co/xthpr1Fz/Screenshot-2026-06-04-154943.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/xthpr1Fz/Screenshot-2026-06-04-154943.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Lecture 4 - Georelational Vector Data Model]]></title><description><![CDATA[مقدمة الجزء ده بيغطي Georelational Vector Data Model في الـ GIS.
أهم المحاور: نموذج البيانات الجيوم relations, تمثيل العناصر البسيطة (نقط, خطوط, مضلعات), Topology, بيانات بدون Topology (Shapefiles), ونماذج البيانات للمزايا المركبة (TIN, TIGER). لما بتبص على خريطة ورقية، بتشوف: شكل المعالم الجغرافية (roads, rivers, cities).
العلاقات المكانية بينهم (مثلا: Utah محاطة بـ Idaho, Montana, Wyoming, Nevada, Oregon, Washington, و Canada) (ولايات في امريكا). السؤال المهم: إزاي الكمبيوتر يشوف نفس المعالم والعلاقات دي؟
نموذج البيانات الـ Vector بيحل المشكلة دي في خطوتين: الخطوة الأولى: بيستخدم النقاط وإحداثياتها (X, Y) عشان يمثل المعالم الجغرافية كـ نقاط (Points), خطوط (Lines), و مضلعات (Areas).
الخطوة التانية: بينظم البيانات الهندسية والعلاقات المكانية بتاعتها في ملفات بيانات رقمية يقدر الكمبيوتر يقرأها ويتعامل معاها. Geo-relational data model: uses a split system to store spatial data and attribute data.
The object-based data model: Stores spatial data and attribute data in a single system نموذج الـ Vector Data Model اتغير أكتر من أي جانب تاني في الـ GIS.
شركة ESRI قدمت صيغ جديدة : الـ Georelational بيخزن البيانات المكانية والوصفية في ملفين منفصلين (split system). زي الـCoverage والـ Shapefile الـ Object-oriented (زي Geodatabase): بيخزنهم في ملف واحد موحد (single system). الـ Vector Data Model بيستخدم أشكال هندسية بسيطة لتمثيل المعالم الجغرافية: 0 أبعاد (No dimension / 0-cell).
بنعرف منه الموقع فقط (Location).
ممكن نسميه Node أو Vertex.
مثال: Wells (آبار), Lighting poles (عمود نور), Trees (أشجار). بعد واحد (1D / 1-cell) — بيحدد بالطول (Length).
عنده نقطتين نهاية (End points) ونقاط في المنتصف.
شكل الخط ممكن يكون منحنى ناعم (Smooth curve) عن طريق معادلات رياضية زي Splines، أو مستقيم Straight-line segments زي القنوات والشوارع.
ممكن نسميه Edge, Link, أو Chain.
مثال: Roads (طرق), Streams (أنهار), عنده بعدين (2D / 2-cell) — بيحدد بالمساحة (Area) والمحيط (Perimeter).
مكون من خطوط متصلة (Connected lines).
ممكن يكون فيه ثقوب (Holes) — زي غابة فيها أراضي خاصة جواها — عشان كده ليه حدود خارجية (External boundaries) و حدود داخلية (Internal boundaries).
ممكن نسميه Polygon, Face, أو Zone.
مثال: Timber stands (مساحات شجر), Water bodies (مساحات مائية). الـ Coverage هو نموذج بيانات مبني على Topology.
بيدمج العلاقات المكانية في هيكل البيانات نفسه.
شركة ESRI قدّمته في التمانينات عشان يفصل الـ GIS عن الـ CAD (زي AutoCAD). ESRI — Environmental Systems Research Institute <img border="0" alt="image" src="https://i.ibb.co/hJY08fLG/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
مفاتيح الرسمة الأساسية: النقط (Nodes): الأرقام (11, 12, 13, 14, 15) بتمثل نقطة بداية أو نهاية أي خط.
الخطوط (Arcs): الأرقام العادية (1, 2, 3, 4, 5, 6, 7) بتمثل الخطوط (اتجاه السهم مهم جدا).
المضلعات (Polygons): الأرقام المايلة (101, 102, 103, 104) بتمثل المساحات المقفوله.
الفراغ الخارجي: رقم (100) بيمثل أي مساحة بره حدود الخريطة (Universe Polygon). مهم تعرف اسامي الجداول
الجدول ده بيسجل كل خط (Arc) بيبدأ منين وبينتهي فين. ا F-node (From): نقطة البداية (عند ديل السهم).
ا T-node (To): نقطة النهاية (عند رأس السهم). الجدول ده بيعرف الكمبيوتر مين المضلعات المتجاورة من غير ما يبص على الرسمة. بص على Arc 6: السهم ماشي ناحية الشمال. وإنت ماشي معاه، المضلع اللي على يمينك هو 101 (R-poly)، والمضلع اللي على شمالك هو 103 (L-poly).
بص على Arc 1: السهم طالع لفوق ويمين. شمالك الفراغ الخارجي 100 (L-poly)، ويمينك المضلع 101 (R-poly). الجدول ده بيحدد إيه هي الخطوط (الحدود) اللي بتتقاطع عشان تقفل وتكون مضلع معين.
مثال: مضلع 101 حدوده هي الخطوط رقم 1, 4, 6.
رقم 0: بص على مضلع 102، مكتوب قدامه 4, 2, 5, 0, 7. ليه حطينا صفر؟ الصفر 0 بيُستخدم كـ "فاصل" عشان يقول للكمبيوتر إن المضلع ده جواه فراغ أو "مساحه مقفوله" (اللي هو مضلع 104).
يعني الخطوط 4, 2, 5 دي الحدود الخارجية لمضلع 102، والخط 7 هو الحد الداخلي ( الـ hole اللي جواه). الجدول ده ملوش علاقة بالـ Topology، ده إحداثيات (X, Y) من على الشبكة عشان ترسم شكل النقط والخطوط.
مثال: خط Arc 1: بيبدأ من النقطة (1,3)، وبيطلع لفوق ينكسر عند النقطة (1,9)، وبعدين يكمل لحد النقطة (4,9).
خط Arc 6: خط مستقيم بيبدأ من (5,3) وينتهي عند (1,3). definition
الـ Topology (علم التوبولوجيا) هو علم العلاقات المكانية بين المعالم — بيشرح إزاي المعالم مترابطة مع بعض من غير ما يتأثر بالتشويهات زي الثني أو التمدد (Invariant under bending/stretching). في الـ GIS بنستخدم Digraphs (رسوم بيانية موجهة) — فيها نقاط وخطوط ليها اتجاه: الخطوط الي ليها اتجاه بتتسمى Arcs.
النقاط اللي الخطوط بتتقابل عندها بتتسمى Nodes. الـ Coverage بيدعم 3 علاقات أساسية:
definition
ا Connectivity: الخطوط (Arcs) بتتصل ببعض عند النقاط (Nodes).
ا Area Definition: كل مضلع بيتحدد بسلسلة خطوط متصلة.
ا Contiguity: كل خط ليه اتجاه وحد أيسر ويمين (Left/Right Polygons). لو خط بيربط بين نقطتين، النقطتين بيقولوا عليهم متجاورين (Adjacent) للخط و محددين (Incident) عليه.
العلاقات دي بتتمثل في جداول (Matrices).
<br><img border="0" alt="image" src="https://i.ibb.co/XfvnJBXV/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> المصفوفة دي بتوصف كل نقطة (Node) إيه الخطوط (Arcs) اللي طالعة منها أو داخلة فيها. شكل الجدول: الصفوف (Rows) هي النقاط 11, 12...، والأعمدة (Cols) هي الخطوط 1, 2... مفتاح الحل: 1 = الخط طالع من النقطة (F-node). -1 = الخط داخل في النقطة (T-node). 0 = مفيش أي اتصال بين النقطة والخط ده.
2 = الخط بيلف ويرجع لنفس النقطة (Self-loop). أمثلة من الرسمة عشان تتأكد: بص على النقطة (11): الخط 1 داخل فيها ⟵ نكتب -1.
الخط 2 طالع منها ⟵ نكتب 1.
الخط 4 طالع منها ⟵ نكتب 1.
باقي الخطوط ملمستهاش ⟵ نكتب 0. (لو بصيت في الصف بتاع 11 في الجدول هتلاقيه مطابق). رقم 2: بص على النقطة (15). الخط 7 طالع منها ولافف وراجع يصب فيها تاني (عامل زي الدايرة المغلقة). عشان كده بنكتب في الجدول قدام خط 7 رقم 2. المصفوفة دي بتعرفنا هل في طريق (خط) مباشر بيوصل من نقطة لنقطة تانية ولا لأ؟ شكل الجدول: الصفوف والأعمدة هما الاتنين بيمثلوا النقاط (Nodes). مفتاح الحل: 1 = أيوة، فيه سهم طالع من نقطة الصف رايح مباشر لنقطة العمود.
0 = لأ، مفيش سهم مباشر في الاتجاه ده. أمثلة من الرسمة عشان تتأكد: من النقطة (11): السهم طالع من 11 رايح مباشر لـ 12 ورايح لـ 14. يبقى هنيجي في صف رقم 11، ونحط وحايد 1 تحت عمود 12 وعمود 14. والباقي أصفار. تأثير الاتجاه (مهم جداً): * هل ينفع أروح من 11 لـ 12؟ أيوة السهم معايا (الجدول فيه 1) طب هل ينفع العكس ؟ لا. رغي زياده من الكتاب بيانات الـ Topology ليها مميزتين رئيسيتين: بتكشف الخطوط اللي مش متقابلة صح (Dangling nodes).
بتكشف المضلعات اللي مش مسدودة صح (Unclosed polygons).
بتمنع المعالم الناقصة وتحافظ على سلامة البيانات (Data Integrity).
مثال: تحليل أقصر طريق (Shortest path analysis) بيحتاج الطرق تتقابل صح. لو في فجوة في شارع متصل، التحليل هياخد طريق أطول عشان يتجنب الفجوة.&gt; الـAddress Geocoding: عملية ربط عناوين الشارع بنقاط على الخريطة. الـ TIGER database فيها نطاقات عناوين بتقسم على يمين وشمال الشارع — الـ Topology بتمكّن من رسم العناوين صح.
تحليل تدفق المرور (Traffic flow): تدفق المرور بيتم semiclass الاتجاه، زي الـ Geocoding بالظبط.
تحليل تدفق الأنهار (Stream flow): التدفق في الأنهار كمان بيتم semiclass الاتجاه. صيغة الـ Shapefile هي الصيغة القياسية للبيانات بدون Topology.
definition
الـ Shapefile هو صيغة بيانات Vector غير Topology — بيخزن Geometry في ملفين: ا .shp: بيخزن شكل المعلم (Feature Geometry).
ا .shx: بيخزين الفهرس المكاني (Spatial Index). حته زياده من الكتاب عرض أسرع على الشاشة من البيانات المبنية على Topology — وده مهم للناس اللي بتستخدم مش بتنتج بيانات GIS.
غير ملكية ومتاحة (Non-proprietary and interoperable) — يعني تقدر تستخدمها بين برامج مختلفة (مثلا: MapInfo تستخدم Shapefiles و ArcView تستخدم MapInfo Interchange Format).&gt; ا&nbsp;.shp: بيخزن شكل المعلم (Feature Geometry).
ا&nbsp;.shx: بيخزين الفهرس المكاني (Spatial Index).
ا .dbf: بيخزن logical data , database file
ا .sbx: بيخزن geometrical data
ا .prj: بيخزن الـ projection مثال من الكتاب — Figure 4.10 تحويل Shapefile → Coverage بيتطلب بناء العلاقات.Topology وإزالة الخطوط المكررة.
تحويل Coverage → Shapefile أبسط، لكن لو الـ Coverage فيها أخطاء Topology (زي خطوط مش متقابلة صح)، الأخطاء دي ممكن تسبب فقدان معالم في الـ Shapefile.
مثال: لو شارع فيه فجوة في الـ Coverage، بعد التحويل للـ Shapefile الشارع هيختفي تمامًا. الـ Geodatabase بي implement الـ Topology عن طريق قواعد (Rules). Line: Must not have dangles ممنوع تسيب طرف "طاير في الهوا" <br><img border="0" alt="image" src="https://i.ibb.co/R4PhrW4k/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Line: Must not overlap ممنوع ترسم خطين فوق بعض بالظبط في نفس المكان <br><img border="0" alt="image" src="https://i.ibb.co/r2cnhT8g/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Polygon: Must not overlap يعني ممنوع مضلعين (زي قطعتين أرض أو محافظتين) يدخلوا في مساحة بعض او يبقوا فوق بعض <br><img border="0" alt="image" src="https://i.ibb.co/SDYcf6qX/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Point: Must be properly inside Polygons يعني النقطة لازم تترسم جوه حدود المضلع بتاعها ومتطلعش بره <br><img border="0" alt="image" src="https://i.ibb.co/qqDMFwd/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">definition Composite Features refer to those spatial features that are better represented as composites of points, lines, and polygons. دي المعالم الجغرافية اللي تمثيلها الاحسن يكون كـ مجموعة من النقاط والخطوط والمضلعات مع بعض. نموذج الـ Coverage بيدعم مزايا مركبة زي: TIN (Triangulated Irregular Networks)
Regions
Routes definition
الـ TIN هو نموذج بيانات رقمي بيستخدم في الـ GIS لتمثيل الأسطح غير المنتظمة زي التضاريس — بديل لخطوط التضاريس (Contour lines). مدخلات الـ TIN: نقاط (X, Y, Z) وخطوط ومضلعات.
الـ TIN بتمثّل الأرض بـ مثلثات غير متراكبة — كل مثلث بيفترض ميل ثابت (Constant gradient).
المناطق المنحدرة: مثلثات أكبر وأقل. المناطق عالية التباين: مثلثات أصغر وأكتر كثافة.
الأشكال الهندسية في الـ TIN: مثلثات (Faces), نقاط (Nodes), خطوط (Edges).
<br><img border="0" alt="image" src="https://i.ibb.co/jv46FSYZ/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الجدول ده بيعرفنا مكان كل نقطة على الخريطة (X, Y)، والأهم بقى: ارتفاعها عن سطح البحر (Z). ا Nodes: أرقام النقاط (11, 12, 13, 14, 15).
ا (X, Y): الإحداثيات العادية من على الشبكة.
ا Z: ده الارتفاع (Elevation). ده في الـ TIN اللي بيعمل البعد التالت. الجدول ده بيعرفنا كل مثلث متكون من أنهي نقاط، ومين المثلثات الجيران اللي لازقة فيه. ا Triangle: رقم المثلث (101, 102, 103).
ا Node list: إيه هي الـ 3 نقاط (رؤوس المثلث) اللي قفلوه؟
ا Neighbors: مين المثلثات الجيران اللي مشتركة معاه في الحيطان (الأضلاع)؟ (لو الضلع ده بيبص على الشارع بره الخريطة ومفيش جار، بنحط شرطة --). الـ Regions من الكتاب definition
الـ Region هو منطقة جغرافية فيها خصائص متشابهة — زي الأراضي الطبيعية, الغابات, الأنقاض, المجموعات العرقية, والأديان. الـ Region ممكن تكون: متصلة مكانيًا (Spatially joint) — قطع أراضي متجاورة.
غير متصلة مكانيًا (Spatially disjoint) — قطع أراضي متباعدة. الـ Regions ممكن (Overlapping) — يعني منطقتين ممكن يكونوا في نفس المنطقة. امثله: ا Clearwater National Forest: بتستخدم Regions عشان تخزن حدود الحرائق التاريخية — كل سنة region subclass لوحدها. ا National Hydrography Dataset (NHD): بتستخدم Regions عشان تخزن البحيرات ومناطق الفيضانات. الـ Regions فقدت أهميتها في السنين الأخيرة لأن الـ Shapefile والـ Geodatabase بيقدروا يتعاملوا مع مضلعات فيها مكونات غير متصلة. لكن المفهوم لسه مهم في الـ GIS. الـ Routes من الكتاب definition
الـ Route هو معلم خطي زي طريق أو نهر لكن فيه نظام قياس بيمكّن من استخدام مقاييس خطية على نظام إحداثيات مُشروع.
الخصائص الخطية (الحوادث, الجسور, حالة الإسفلت, جودة الماء, أسماك) بتتسمى Events وبتتربط بالـ Routes عشان تتعرض وتحلل مع المعالم المكانية. الـ Routes بتُخزن كـ subclasses في Line Coverage. كل Route بتتكون من Sections — كل Section بترجع لـ Arcs في الـ Line Coverage وبتحدد مواقع محددة عليها. استخدامات الـ Routes وكالات النقل: خطوط الحافلات المختلفة على نفس شبكة الشوارع.
أقسام الطرق: مسارات مختلفة للطرق السريعة والطرق المحلية.
الـ Measured Polylines في الـ Shapefile — أبسط في الهيكل وبتخزن X, Y وقيمة M (Measure). definition
الـ TIGER — Topologically Integrated Geographic Encoding and Referencing — هو قاعدة بيانات من مكتب التعداد الأمريكي (US Census Bureau) بتشمل العلاقات المكانية بين النقاط والخطوط والمناطق. الـ TIGER فيها: حدود قانونية وإحصائية — مقاطعات (Counties), أحياء التعداد (Census tracts), مجموعات الكتل (Block groups).
طرق، سكك حديدية، أنهار، مياه، خطوط طاقة، أنابيب.
نطاقات عناوين على كل جانب من شارع. في قاعدة بيانات الـ TIGER: النقاط بتتسمى 0-cells.
الخطوط بتتسمى 1-cells — كل واحدة موجهة من نقطة البداية لنقطة النهاية وليها يمين وشمال واضح.
المناطق بتتسمى 2-cells. مثال من الكتاب — Figure 4.6 — نطاقات العناوين كل شارع ليه اتجاه ونطاقات عناوين على اليمين والشمال.
مثال: شارع عليه اليمين 600-700 والشمال 601-701.
الـ ZIP codes بتتحدد بناءً على الاتجاه. definition
الـ Geocoding هو عملية تحويل وصف مكان لـ إحداثيات جغرافية. ممكن تعمل Geocoding عن طريق إدخال وصف مكان واحد كل مرة أو إدخال جدول كامل من الأماكن.
الناتج: معلومات جغرافية (Geographic Features) ببيانات وصفية تقدر تستخدمها في الرسم أو التحليل المكاني.
ملخص بيانات الـ GIS ليها نوعين: بيانات هندسية (Geometry) و بيانات وصفية (Attributes).
الـ Vector Data Model بيستخدم Point, Line, و Area لتمثيل المعالم الجغرافية.
الـ Georelational Data Model بيخزن البيانات المكانية والوصفية في نظامين منفصلين.
الـ Coverage هو صيغة Topology-based، أما الـ Shapefile فهو صيغة Non-topological.
الـ Geodatabase هو نموذج Object-oriented بيخزن البيانات في ملف واحد.
الـ Topology بتساعد في ضمان جودة البيانات وتحسين التحليل الجغرافي.
الـ TIN بيستخدم لتمثيل الأسطح غير المنتظمة زي التضاريس.
الـ Geocoding هو عملية تحويل وصف مكان لـ إحداثيات جغرافية. ]]></description><link>gis/lectures/lecture-4-georelational-vector-data-model.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 4 - Georelational Vector Data Model.md</guid><pubDate>Sat, 06 Jun 2026 17:09:55 GMT</pubDate><enclosure url="https://i.ibb.co/hJY08fLG/image.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/hJY08fLG/image.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Lecture 1 - GIS Fundamentals]]></title><description><![CDATA[مقدمة الجزء ده بيغطي أساسيات GIS - Geographic Information Systems.
هنتكلم عن إيه هو الـ GIS فعلا، مكوناته، و إزاي بيشتغل من Input لـ Output.
هندخل على Location Apps و التاريخ (John Snow 1854)، و نشوف الفرق بين System و Science و Studies و Service و Survey.
أهم المحاور: Location Apps, تاريخ الـ GIS, تعريفه, مكوناته, وظائفه, وتطبيقاته. الـ Location Apps و Live Location Services من أشهر التطبيقات اليومية لفكرة الـ GIS.
أي تطبيق بيستخدم مكانك الحالي أو بيعرض خريطة أو طريق أو موقع شخص تاني بيبقى داخل في نفس الفكرة العامة بتاعة الـ GIS.
يعني لما تستخدم: خريطة عشان تعرف مكانك او Live Location عشان تبعت موقعك لحد.
خدمة تعرض أماكن أو بيانات على الخريطة. كل ده مبني على نفس المبدأ: فيه مكان + فيه معلومة مرتبطة بالمكان. الـ GPS مش هو GIS الـ GPS بيحدد مكانك.
الـ GIS هو النظام الأكبر اللي بياخد المكان ده ويحطه مع Maps, Databases, Layers, Analysis, و Output.
يعني GPS يعتبر input داخل GIS، مش بديل عنه. note
John Snow analyzed a cholera outbreak in Soho, London in 1854. At this time people believed that cholera was spread in the air. Dr. Snow was skeptical of this hypothesis. من أهم الأمثلة التاريخية في GIS قصة John Snow في لندن سنة 1854.
كان فيه وباء Cholera في منطقة Soho, London.
وقتها الناس كانوا فاكرين إن الكوليرا بتنتشر عن طريق الهواء, بس John Snow مكانش مقتنع بالفرضية دي. ا John Snow بدأ يجمع أماكن الحالات على خريطة.
كل ما يعرف حالة، يحدد مكانها، وبعدين يقارن أماكن الحالات بمصادر المياه الموجودة في المنطقة.
الفكرة هنا شبه استخدام layers يدوي: طبقة فيها أماكن المرضى أو حالات الكوليرا.
طبقة فيها مصادر المياه أو الآبار.
وبعدين يقارن الطبقات ببعض عشان يطلع pattern. وصل لاستنتاج إن الحالات مرتبطة بمصدر مياه معين، يعني المشكلة مش في الهواء زي ما الناس كانت فاكرة، لكن في المياه.
ده مرتبط بفكرة Geostatistics أو الإحصاء المكاني: يعني نستخدم الإحصاء بس مع المكان، ونشوف عدد الحالات في كل منطقة وعلاقتها بمصدر معين. <img src="https://blog.rtwilson.com/wp-content/uploads/2012/01/SnowMap_Points.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;">
Tip
قصة John Snow مهمة عشان بتوري إن الـ GIS فكرته أقدم من البرامج الحديثة. زمان كان التحليل يدوي على خريطة، دلوقتي نفس الفكرة بتتعمل ببرامج وdatabases وlayers ( ومهمه عشان الدكتور جابها في الميد).
حته زياده من الكتاب أول GIS اتعمل في كندا في الستينيات عشان يحدد موارد الأرض والاستخدامات الحالية والمستقبلية.
في أواخر الستينيات، US Bureau of the Census عمل برنامج DIME (Dual Independent Map Encoding) لكل الشوارع الأمريكية عشان يدعم الإحصاء التلقائي.
في أواخر السبعينيات، جامعة Harvard عملت ODYSSEY GIS.
الـ Automated Cartography بدأ في الستينيات، وبحلول أواخر السبعينيات معظم الجهات الحكومية كانت بتشتغل بالكمبيوتر جزئيًا.
الـ GIS بدأ ينتشر في التمانينيات لما أسعار الهاردوير بقت ارخص (اوعدنا يارب). definition
GIS answers the queries of: What, Where and Why. What is attribute, Where is location, and Why is analytical why. الـ GIS بيجاوب على أسئلة أساسية: What?
Where?
Why? الـ What معناها إيه الحاجة أو الـ attribute اللي بنتكلم عنها؟
يعني المعلومة نفسها المرتبطة بالمكان.
مثال: اسم الدولة.
عدد السكان. الـ Where معناها الحاجة دي موجودة فين؟
ودي نقطة أساسية (Space is essential to Geography).
الجغرافيا أصلا معتمدة على المكان، فالسؤال المكاني هو قلب الـ GIS. ا Why معناها ليه النمط ده موجود؟ أو إيه التحليل اللي يفسر اللي شايفينه؟
هنا الـ GIS يدخل في التحليل مش العرض بس.
يعني مش بس نعرف إن الحوادث بتحصل في منطقة معينة، لكن نحاول نفهم: ليه بتحصل هناك؟
في أوقات معينة؟
هل فيه نمط مكاني أو زمني؟ بصمجيات ا What = الـ attribute أو المعلومة.
ا Where = الـ location أو المكان.
ا Why = الـ analysis او التحليل وفهم السبب. الفرق عن Database عادية الـ Database العادية ممكن تجاوبك على What: اسم، عنوان، رقم، قيمة، صفة.
الـ GIS بيضيف عليها Where: الحاجة دي موجودة فين؟
وبعد كده يدخل في Why: ليه النمط ده ظاهر هنا؟ وإيه العلاقة بين المكان والبيانات؟ definition
GIS is a means of storing, retrieving, sorting, and comparing spatial data to support some analytic process.
GIS = Information System + Geographic Position. الـ GIS هو نظام معلومات، بس الفرق إنه بيشتغل على بيانات مرتبطة بالمكان. يعني عندك جزئين أساسيين: ا Information System: تخزين، استرجاع، ترتيب، مقارنة، إدارة بيانات.
ا Geographic Position: مكان أو إحداثيات أو موقع على الأرض. لما الاتنين يتجمعوا، نقدر نعمل نظام يفهم البيانات مكانيًا. يعني مش بس نخزن إن فيه مدرسة، لكن نخزن مكانها، ونقارنها بمكان السكان والطرق والخدمات. الـ GIS مش خريطة لوحدها ومش database لوحدها. هو integration بين: ا Map / Graphic Representation
ا Database / Attribute Data يعني عندك رسمة أو خريطة، وعندك جدول بيانات، والاتنين مربوطين ببعض. حته زياده من الكتاب
GIS = CAD + DBMS + Spatial Analysis
الـ CAD بيركز على رسم العناصر، والـ DBMS بيركز على تخزين البيانات، أما الـ GIS فيربط بين الخريطة والبيانات الوصفية بحيث أي تعديل في أحدهما ينعكس على الآخر. بالإضافة إلى ذلك، يستطيع تحليل العلاقات المكانية بين العناصر وإنتاج خرائط ومعلومات جديدة من هذه العلاقات.
definition
GIS is a collection of computer hardware, software, and geographic data for capturing, managing, analyzing, and displaying all forms of geographically referenced information. Environmental Systems Research Institute (ESRI), 2007 (جت في الميد) التعريف ده مهم لأنه بيجمع كل أجزاء الـ GIS في جملة واحدة. الـ GIS عبارة عن مجموعة من: ا Hardware
ا Software
ا Geographic Data وبيستخدمهم عشان يعمل أربع وظائف رئيسية: ا Capturing: التقاط أو إدخال البيانات.
ا Managing: إدارة البيانات.
ا Analyzing: تحليل البيانات.
ا Displaying: عرض البيانات. وكل ده على معلومات Geographically referenced، يعني معلومات ليها علاقة بمكان على الأرض. كلمة Geographically referenced مهمة في التعريف.
معناها إن المعلومات الجغرافية لازم يكون لها مرجع مكاني موحد.
لو جهات مختلفة رسمت طبقات مختلفة من غير مرجع واحد، الطبقات هتتركب غلط.
عشان كده لازم يبقى فيه reference موحد للطبقات، بحيث كل layer تركب صح فوق التانية.
حته زياده من الكتاب والمحاضره definition الـ Base Map هي الخريطة الأصلية المرجعية اللي عليها بتتبني كل الطبقات. في أي دولة، الجهة المسؤولة عن إنتاج الصور المساحية الدقيقة هي الهيئة المساحية العسكرية. عشان نعمل Referenced Map في أي بلد، محتاجين صورة أو خريطة أصلية تبقى هي المرجع الأساسي.
الصورة دي اسمها Base Map، وده اللي كل الـ layers بتتبني عليه.
في أي دولة في العالم، الجهة الوحيدة المنتجة للصور المساحية الدقيقة هي: الهيئة المساحية العسكرية أو الجهة المختصة بالمساحة العسكرية.
يعني Military Survey Authority. الصور دي بتروح بعدها لجهات مختلفة عشان تطلع Layers: جهة المباني والعقارات تطلع Buildings Layer.
جهة الطرق والكباري تطلع Roads Layer.
جهة المياه تطلع Water Network Layer. كل layer ليها Base Map واحد، وده اللي بيخلي الطبقات تركب فوق بعضها صح.
لو مفيش Base Map موحد، الطبقات هتطلع غلط: عمود كهرباء في وسط المياه.
مبنى فوق جنينة.
طريق في مكان مش منطقي. حرف S في GIS ممكن يشير لأكتر من معنى حسب السياق: System
Science
Studies
Service
Survey definition
Geographic Information System: a collection of computer hardware, software, and geographic data for capturing, managing, analyzing, and displaying all forms of geographically referenced information. Technology for the acquisition and management of spatial information ده المعنى الأشهر، وهو محور المادة.
بيركز على النظام العملي اللي بنستخدمه عشان ندخل ونخزن ونحلل ونعرض البيانات الجغرافية.
definition
Geographic Information Science: comprehending the underlying conceptual issues of representing data and processes in space-time. ا GIScience ده العلم اللي ورا الـ GIS مهتم بالـ theory and concepts.
بيهتم بأسئلة زي: إيه النظريات والمفاهيم اللي ورا التكنولوجيا؟
الخوارزميات نطورها ازاي عشان النتائج تبقى أحسن؟ الـ GISystems يجاوب على what و where، أما GIScience مهتم بـ how والتطوير.
definition
Geographic Information Studies: understanding the social, legal and ethical issues associated with the application of GISy and GISc. ده جانب اجتماعي وقانوني وأخلاقي.
يعني استخدام الـ GIS مش تقني بس، فيه أسئلة مهمة: الخصوصية.
القوانين المرتبطة بالمعلومات الجغرافية.
الآثار الاجتماعية لاستخدام البيانات المكانية. definition
Geographic Information Service: functionality provided by a software entity through its interfaces defined as named sets of operations, and provisions of information generated from geospatial data. ده بيركز على الخدمات اللي بتتعامل مع المعلومات الجغرافية.
زي تصميم وتطوير نظم GIS، أو تقديم خرائط وخدمات جغرافية للمستخدمين.
مثال عملي: خدمة تحديد Location داخل تطبيقات زي WhatsApp أو أي تطبيق موبايل. لما حد يبعتلك Location، ده service مبنية على Geographic Information.
تطور الخدمات المكانية مرتبط بـ distributed object technology والإنترنت.
definition
Geographic Information Survey: collecting spatial data from the field using measurement tools and field work. الـ Survey يعني جمع وقياس بيانات مكانية من الواقع.
طرق التجميع الأساسية: عمل Field Survey يدوي في أماكن معينة.
استخدام Aerial Survey (صور جوية من طيران فوق مناطق معينة).
استخدام GPS لتسجيل مواقع دقيقة. بصمجيات ا System = النظام اللي بنستخدمه.
ا Science = العلم والنظريات اللي وراه.
ا Studies = الآثار الاجتماعية والقانونية والأخلاقية.
ا Service = خدمات مبنية على المعلومات الجغرافية.
ا Survey = جمع وقياس بيانات مكانية. definition
GIS is an organized collection of hardware, network, software, data, people, and procedures. مكونات الـ GIS الأساسية: Hardware
Network
Software
Data
People
Procedures definition
Hardware: the devices that the user interacts directly with to carry out GIS operations. يعني الأجهزة الملموسة اللي بنستخدمها في شغل الـ GIS.
أمثلة: ا Computer
ا Scanner
ا Digitizer
ا Plotter definition
Software provides the functions that the user needs to store, analyze and display geographical information. البرامج هي اللي بتدينا أدوات التخزين والتحليل والعرض.
مثال: برامج GIS و ArcGIS.
definition
Data is the most important component of GIS. البيانات هي قلب الـ GIS.
مثال: ا Vector Data
ا Raster Data
ا Attribute Data definition
People are the most active component dealing with the design, programming and management of GIS. الناس هما اللي بيصمموا النظام ويديروه ويحللوا البيانات.
من غير مستخدم فاهم، النظام مش هيطلع قرارات مفيدة. مجال الـ GIS فيه مجموعات مختلفة من المستخدمين، كل مجموعة ليها خلفية مختلفة وأولويات مختلفة: ا 1. Mature Technologies دول اللي بيشتغلوا مع الـ GIS وبيساهموا في إنتاج البيانات.
زي: Surveyors, Engineers, Cartographers, Scientists using Remote Sensing. ا 2. Management and Decision-Making دول اللي بيستخدموا الـ GIS في اتخاذ القرارات.
زي: Resource Managers, Urban Planners, Municipal Officials, Facilities Managers, Marketing and Retail Planning, Vehicle Routing and Scheduling. ا 3. Science and Research دول اللي بيدرسوا الـ GIS ويبحثوا فيه.
زي: Universities, Government Labs. definition
Procedures are related to the management aspects of GIS. خطوات وقواعد العمل.
يعني البيانات تدخل ازاي، تتحلل ازاي، تتراجع ازاي، وتطلع التقارير ازاي.
definition
Network allows rapid communication and sharing digital information. الشبكة بتسمح بمشاركة البيانات والخدمات الجغرافية بسرعة.
عشان نعمل تحليل كامل، محتاجين نجمع الطبقات دي من جهات مختلفة.
وده مهم في WebGIS و Online GIS.
بدون Network، كل جهة هتشتغل لوحدها وهنخسر القيمة الحقيقية للـ GIS.
بصمجيات
مكونات الـ GIS هما 6 (غلطت فيها في الميد والله)
حته زياده من الكتاب GIS is a convergence of technological fields and traditional disciplines. GIS has been called an 'enabling technology' because of the potential it offers for the wide variety of disciplines which must deal with spatial data. الـ GIS هو نتيجة ربط تطورات متعددة في مجالات مختلفة.
الـ Geography بتوفر مفاهيم وتقنيات Spatial Analysis وفهم العلاقات المكانية. الـ Cartography (رسم الخرائط) مسؤولة عن تصميم وعرض الخرايط، وهي مصدر مهم للبيانات وواحده من أهم مخرجات الـ GIS. الـ Remote Sensing بتوفر صور وبيانات من الأقمار الصناعية والطائرات، ودي من أهم مصادر البيانات الجغرافية. الـ Photogrammetry استخدام الصور الجوية لاستخراج قياسات ومعلومات دقيقة، خصوصًا الارتفاعات والتضاريس (Topography). الـ Surveying بيحدد مواقع وحدود الأراضي والمباني بدقة عالية، وبيوفر بيانات مكانية موثوقة. الـ Statistics بتستخدم في التحليل المكاني وفهم الأخطاء وعدم اليقين في البيانات. الـ Computer Science (احنا) بيوفر أدوات وتقنيات زي AI وCAD وComputer Graphics وDBMS لتخزين وتحليل وعرض البيانات. الـ Mathematics خاصة Geometry و Graph Theory، وبيكون ليها دور مهم في تصميم وتحليل بيانات الـ GIS. definition
Scanner is used to convert the analog paper map to computer readable form automatically. الـ Scanner بيحول الخريطة الورقية لصورة رقمية يقدر الكمبيوتر يقراها.
يعني بياخد حاجة analog ويطلعها في شكل رقمي.
مثال: خريطة أثرية قديمة أو خريطة ورقية عادية.
definition
Digitizer is used to transform information from analog format (paper map) to digital format so it can be stored and displayed with a computer. الـ Digitizer بيحول معلومات من خريطة ورقية لشكل رقمي.
الهدف إن البيانات تتخزن وتتعرض على الكمبيوتر.
مثال: عندك خريطة أثرية لطريق قديم أو خريطة لمنطقة محددة. عايز تحطها في GIS.
الخطوة الأولى: تمسحها بالـ Scanner أو تستخدم Digitizer عشان تحولها لشكل رقمي.
بعد كده تقدر تشتغل عليها في الـ GIS وتضيفها كـ Layer. معلومه علي السريع كده الـ Scanner والـ Digitizer الاتنين ممكن يستخدموا عشان يحولوا الخرايط لبيانات رقمية , بس الـ Scanner الناتج بيكون صورة Raster والـ Digitizer الناتج بيكون بيانات Vector definition
CAD provides techniques for data input, displaying, and representing data particularly in 3 dimensions. الـ CAD بيساعد في إدخال وعرض وتمثيل البيانات، خصوصا في 3D.
هو مش GIS كامل، بس مرتبط بتمثيل وتصميم البيانات.
definition
GPS is a set of hardware and software designed to determine accurate locations on the earth using signals received from satellites. الـ GPS بيحدد مواقع دقيقة على الأرض باستخدام إشارات من الأقمار الصناعية.
مهم جدا كمدخل من مداخل البيانات المكانية.
definition
SDE helps manage spatial data to provide quicker retrieval of that data from database engines such as Oracle, SQL Server and Informix. الـ SDE معناها Spatial Data Engine. وظيفتها إدارة البيانات المكانية وتسهيل استرجاعها بسرعة من قواعد البيانات. اتطورت لمجتمعين: ا GIS Community
ا DBMS Community الهدف إن قواعد البيانات العادية تقدر تدعم Spatial Technology. يقدر يتعامل مع بيانات جاية من مصادر مختلفة: يعني لو عندك data في Excel أو في SQL Server أو في Access، الـ GIS يقدر يستقبلها ويعالجها. definition
IMS provides maps through the Internet usually as images. ا IMS معناها Internet Map Server. بيوفر خرائط عن طريق الإنترنت، غالبا في شكل صور. بيخلي ناس مش لازم تكون فاهمة GIS تقدر تشوف وتتفاعل مع الخرائط. مرتبط بـ: ا WebGIS
ا Online GIS الـ Internet Map Services خرائط مرفوعة على الإنترنت ومتاحة لكل المستخدمين.
الناس تقدر تشوف الأماكن، وتضيف أماكن جديدة، وتحط صور وأسماء على الخريطة. بصمجيات ا SDE = إدارة واسترجاع أسرع للـ spatial data من databases.
ا IMS = عرض خرائط على الإنترنت للمستخدمين (Online). الـ GIS بيتعامل مع منظومة software وأدوات مرتبطة، مش برنامج واحد بس.
أمثلة: ا ArcGIS في إدارة وعرض وتحليل البيانات المكانية والجداول الوصفية.
ا QGIS بديل مشهور في برامج الـ GIS.
ا CAD أداة مرتبطة بإدخال وعرض وتمثيل البيانات.
ا SDE لإدارة spatial data داخل database engines.
ا IMS لتقديم الخرائط عبر الإنترنت. البنية الأساسية للـ GIS ممكن تتلخص بالشكل ده:
Data Input -&gt; Geographic Database -&gt; Transformation and Analysis -&gt; Output Display أمثلة إدخال البيانات: ا Satellite Imagery
ا Air Photos
ا Digitize
ا Scan
ا Digital Elevation Model
ا GPS
ا Tiger/Line يعني مصادر البيانات ممكن تكون صور أقمار صناعية، صور جوية، خرائط ممسوحة، بيانات GPS، أو نماذج ارتفاعات. بعد الإدخال، البيانات بتتخزن في Geographic Database.
الفرق هنا عن database عادية إن البيانات مش attributes بس، دي كمان مرتبطة بمكان. بعد التخزين، النظام يعمل تحويلات وتحليلات.
التحليل ممكن يجاوب أسئلة زي: فين المشكلة؟
إيه اللي تغير؟ مخرجات الـ GIS ممكن تكون: Maps
Charts
Reports definition
Where is what? means obtaining information from a location. يعني تبدأ من مكان وتسأل: إيه الموجود هنا؟
مثال: تضغط على قطعة أرض على الخريطة وتعرف المالك، العنوان، المساحة، نوع الاستخدام، والتقييم.
definition
What is where? means querying information to find location. يعني تبدأ بمعلومة وتدور على مكانها. مثال: عايز تعرف فين كل الأراضي الصناعية، أو فين المناطق ذات كثافة عالية. ا Where is what? = عندي location وعايز أعرف بياناته. ا What is where? = عندي attribute وعايز أعرف مكانه. حته زياده من الكتاب للـ GIS استخدامات كتير، منها: ا Mapping Where Things Are نرسم أماكن الأشياء.
مثال: أماكن المدارس، المستشفيات، الأشجار، الحوادث، الطرق. ا Mapping Quantities نرسم الكميات على الخريطة.
مثال: عدد السكان في كل منطقة، عدد الحوادث، كمية الإنتاج. ا Mapping Densities نرسم الكثافة.
يعني مش بس العدد، لكن العدد بالنسبة للمساحة.
مثال: كثافة السكان في كيلومتر مربع واحد في مناطق مختلفة.
مثال: Traffic Density خرايط الطرق بتعرض traffic density بألوان مختلفة: أخضر = حركة سلسة، _traffic قليل.
أصفر = حركة عادية.
أحمر = زحمة شديدة. الألوان دي مبنية على بيانات حقيقية من المستخدمين والـ mobile devices. ا Getting Information About a Feature ممكن تضغط على feature وتطلع بياناته. ا GIS Queries الـ GIS يقدر يجاوب على أسئلة كتير زي: ا What is at this location?: إيه الموجود في المكان ده؟
ا Where is the nearest gas station?: أقرب بنزينة فين؟ ا Routing and Navigation الـ GIS بيستخدم في تحديد أفضل طريق من مكان لمكان.
المدخلات: بيانات الـ Road Network.
بيانات الـ Traffic Density.
بيانات الـ Speed Limits.
بيانات الـ Signals. المخرجات: أفضل route من النقطة A للنقطة B. ا Change Detection استخدام GIS عشان نعرف التغير مع الزمن.
مثال: مقارنة خريطة المدينة في 1950 مع خريطة 1990.
ده مهم في التخطيط العمراني ومراقبة التوسع العمراني. ا Geocoding : the process of converting addresses into geographic coordinates (latitude/longitude) to be placed on a map. الـ Geocoding بيحول عناوين (Address) لإحداثيات (Latitude, Longitude). يعني لما تكتب عنوان مكان، النظام بيحوله لنقطة على الخريطة. ا Predictive / Forecasting Analysis استخدام GIS للتنبؤ بأحداث مستقبلية بناءً على بيانات مكانية.
مثال: توقع أماكن الحوادث بناءً على أنماط سابقة.
أو توقع التوسع العمراني فيnext 10 years. ا Land Parcel Based Applications تطبيقات مرتبطة بقطع الأراضي.
زي: ا Land acquisition
ا Environmental impact statements
ا Water quality management ملخص ا GIS = Information System (نظام معلومات) + Geographic Position (مكان جغرافي).
ا الفرق الأساسي: الـ GPS بيحدد المكان، والـ Database بتخزن بيانات عادية، الـ GIS بياخد الاتنين ويضيف عليهم Spatial Analysis.
ا قصة John Snow (1854): أول إثبات إن الـ GIS فكرة قبل ما يكون برنامج. استخدم خريطة وطبقات (Layers) لربط حالات الكوليرا بمصادر المياه (Geostatistics).
ا الـ W-W-W: الـ GIS بيجاوب على: What (المعلومة/Attribute)، Where (المكان/Location)، والأهم Why (التحليل المكاني/Analysis).
ا مكونات الـ GIS هما 6: Hardware, Software, Network, Data, People, Procedures. (الـ Data هي الأهم، والـ Network أساسي لربط البيانات بين الجهات المختلفة).
ا الـ S فيGIS : ا System: النظام والبرامج اللي بنشتغل عليها.
ا Science: العلم والنظريات والخوارزميات.
ا Studies: القضايا الاجتماعية والقانونية (زي الخصوصية).
ا Service: الخدمات والتطبيقات (زي شير اللوكيشن).
ا Survey: تجميع وقياس البيانات من الواقع. ا إدخال البيانات: الـ Scanner بيحول الخريطة لصورة (Raster)، والـ Digitizer بيحولها لبيانات متجهة (Vector).
ا مصطلحات قواعد البيانات: ا SDE (Spatial Data Engine): بيسرع استرجاع البيانات المكانية من قواعد البيانات (زي SQL).
ا IMS (Internet Map Server): بيعرض الخرايط للمستخدمين على الإنترنت (Online GIS). ا من تطبيقات الـ GIS: حساب الكثافة (Densities)، تحديد المسارات (Routing)، رصد التغيرات مع الزمن (Change Detection)، والـ Geocoding (تحويل العنوان العادي لإحداثيات). ]]></description><link>gis/lectures/lecture-1-gis-fundamentals.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 1 - GIS Fundamentals.md</guid><pubDate>Sat, 06 Jun 2026 16:44:16 GMT</pubDate><enclosure url="https://blog.rtwilson.com/wp-content/uploads/2012/01/SnowMap_Points.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://blog.rtwilson.com/wp-content/uploads/2012/01/SnowMap_Points.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Lecture 3 - Coordinate Systems]]></title><description><![CDATA[مقدمة الجزء ده بيغطي Coordinate Systems في الـ GIS.
أهم المحاور: الفرق بين GCS و PCS, شكل الأرض, Datum, Map Projections, أنواع التشوهات, UTM, واستخدامات أنظمة الإحداثيات في ArcGIS. فيه 3 مفاهيم أساسية لازم تتفهم مع بعض: نظام الإحداثيات (Coordinate System): النظام اللي بيدي لكل نقطة على الخريطة عنوان بالأرقام (زي شبكة الـ X والـ Y) عشان نقدر نحدد مكان النقط والخطوط والمضلعات بالظبط.
الـ Datum: بيحدد شكل الأرض الأقرب للواقع وبنحدد منه نقطة الصفر أو المركز اللي هنبدأ نقيس من عنده.
الـ Projection (نظام الإسقاط): العملية أو المعادلة اللي بناخد بيها مجسم الأرض الـ 3D (الحقيقي) ونفرده على خريطة مسطحة 2D عشان نقدر نتعامل معاه. definition
CRS - Coordinate Reference System defines how the two-dimensional projected map in your GIS is related to a real place on the Earth.
definition
الـ Geodesy (علم الجيوديسيا) هو علم قياس شكل الأرض وحجمها وحقل الجاذبية بتاعها. الـ Geodesy هو الأساس العلمي لكلمة أنظمة الإحداثيات — من غيره ما كانش هيبقى فيه GCS و لا PCS.
الـ Geodesists هما العلماء اللي بيشتغلوا في المجال ده — وشغلهم هو اللي خلّى الـ GPS يشتغل بدقة. الـ GCS والـ PCS هما النوعين الأساسيين لـ "أنظمة الإحداثيات" (Coordinate Systems): نظام الإحداثيات الجغرافي (GCS): ده نظام ثلاثي الأبعاد (3D) بيتعامل مع الأرض علي حقيقتها بشكلها الكروي. بيحدد مكان النقط على سطح الكوكب باستخدام الزوايا (خطوط الطول Longitude ودوائر العرض Latitude)، ووحدة قياسه هي "الدرجات".
2. نظام الإحداثيات المسقط (PCS): ده نظام ثنائي الأبعاد (2D) مستوي، بيتعامل مع الأرض بعد ما فردناها علي نظام 2D بيحدد الأماكن باستخدام شبكة (X, Y) ووحدات قياس خطية زي "المتر"، وهو متقسم لمناطق (Zones). <img src="https://gisrsstudy.com/wp-content/uploads/2022/08/GCS-vs-PCS.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;">
definition
GCS is a three-dimensional reference system that locates points on the Earth's surface. الـ GCS بيحدد أماكن الـ spatial features على سطح الأرض و كل point بيبقى ليها قيمتين: Latitude و Longitude.
دوائر العرض ( Parallels/Latitude): دي حلقات بالعرض بتقطع الأرض من (0 °-90 °). أهم حلقة فيهم هو الـ Equator او خط الاستواء (0°) ، وبيقسم الأرض لنصين قد بعض شمال (Northern Hemisphere) وجنوب (Southern Hemisphere). خطوط الطول (Meridians/Longitude): دي أقواس (أنصاف دوائر) بتنزل بالطول من القطب الشمالي لحد القطب الجنوبي من (0 °-180 °). نقطة البداية بتاعتهم هي الـ (Prime Meridian) او خط جرينتش (0°). <br> <img src="https://blog.clickandboat.com/en/wp-content/uploads/2026/01/latitude-longitute.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;"> 1° of longitude at the equator != 1° of longitude near the poles الـ Latitude و Longitude بيتم التعبير عنهم بوحدات: Degrees, Minutes, Seconds (DMS).
فيه أكتر من format لكتابة الإحداثيات:
definition
A Projected Coordinate System is also called a plane coordinate system. بيستخدم شبكة هندسية (X, Y) بدل الدرجات والزوايا.
معمول عشان Detailed calculations, Positioning, و Large-scale mapping: الحسابات الدقيقة (Detailed calculations): بيقيس بوحدات مسافة حقيقية وثابتة (زي المتر)، عشان كده بنقدر نحسب بيه المساحات والمسافات بدقة.
تحديد المواقع (Positioning): بيقدر يحدد أماكن المعالم (زي أركان المباني أو أعمدة النور) بدقة عالية جداً.
الخرائط التفصيلية (Large-scale mapping): هو النظام الأساسي لتخطيط المدن والأحياء اللي بتحتاج تفاصيل قريبة ومقاسات مترية. حل مشكلة التشوه بالـ (Zones): عشان نعمل Projectionللكره الارضية من غير ما يحصل Distortion او تشوه، بنقسم الخريطة لشرايح بالطول اسمها (Zones). كل Zone ليها مركز إسقاط (Projection Center) خاص بيها، ونسبة التشوه عند المركز ده بتبقى صفر، عشان تفضل المقاسات مظبوطة جوه المنطقة دي.
definition
Projection is the conversion of data sets from geographic coordinates to projected coordinates.
definition
Reprojection converts from one type of projected coordinates to another type. يعني: تحويل من GCS لـ PCS اسمه Projection.
تحويل من نوع PCS لنوع PCS تاني = Reprojection. <br> <img src="https://www.esri.com/arcgis-blog/app/uploads/2022/02/grid2.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;">
حته زياده من الكتاب definition
الـ Convergence والـ Projection مصطلحين مختلفين — الـ Convergence بيحول بين أنظمة إحداثيات، والـ Projection بيعمل خريطة 2D من بيانات 3D. يعني لما تحوّل بيانات من WGS84 لـ UTM Zone 36N — ده Convergence.
ولما ترسم خريطة للقاهرة باستخدام Transverse Mercator — ده Projection. إحنا غالبًا بنتخيل الأرض Sphere (كروية).
رغم انها أقرب لـ Spheroid أو Ellipsoid (بيضاوي) — نصف قطر الأرض عند خط الاستواء أكبر شوية من نصف القطر عند القطبين.
بس في الحقيقة الارض Geoid وده معناه انها شكل بيضاوي بس غير منتظم. Eratosthenes’ (276-194 BC) approach to determining the Earth’s circumference. الأرض مش كورة ملساء — فيها جبال وسهول ومحيطات وقشور أرضية مختلفة. كل منطقة ليها خصائص فيزيائية مختلفة (الجاذبية، الارتفاع، الكثافة).
عشان كده الـ Ellipsoid الواحد مش بيقدر يمثل الأرض كلها بدقة.
الحل: نعمل Datums محلية — كل منطقة ليها Datum مناسب ليها.
مثال: في أمريكا الشمالية NAD83 هو الأنسب، بس في أوروبا ETRS89 هو الأنسب.
الـ Global Datums (زي WGS84) حل وسط — بيحاول يمثل الأرض كلها بس مش بأعلى دقة في كل مكان.
<br><img border="0" alt="image" src="https://i.ibb.co/Y7GRZtvq/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">definition
An ellipse is defined by a constant distance from F1 to P to F2 for all points on the ellipse. الـ Ellipse بيتحدد باستخدام: Focal length = ε
Major axis = a
Minor axis = b لو ε = 0، الـ ellipse يبقى circle.
note
ا Bessel 1866 ا: Bessel هو اللي قاس نصف قطر الأرض أول مرة سنة 1866.
ا Clarke 1866 (التعديل): Clarke عدّل قياسات Bessel, ا Clarke 1866 هو اللي بيستخدم في NAD27.
ا GRS80 (التحديث): سنة 1980، اتقاس إن المحور الأكبر أقل من قياسات Clarke بحوالي 70-80 متر. ده خلّى GRS80 أدق.
definition
GRS80 - Geodetic Reference System 1980 is a geodetic reference system consisting of a global reference ellipsoid and a gravity field model. الـ GRS80 من أشهر الـ standard ellipsoids — وهو الـ reference coordinate system المستخدم في الـ GPS.
ا WGS84 قريب جدًا من GRS80 وبيستخدم عالميًا ومرتبط باستخدامات GPS.
الاتنين (GRS80 و WGS84) من أمثلة الـ best fit ellipsoids — يعني أدق ellipsoids اللي بتمثل شكل الأرض ككل.
definition
The geoid is a model of global mean sea level. الـ Geoid بيستخدم عشان قياس elevations بدقة.
ا Geodesists بيقيسوا الارتفاعات بناءً على sea level.
الـ Geoid مش جسم هندسي (geometrically) — لكنه جسم متعرف فيزيائيًا (physically) بالـ gravity، عشان الأرض نفسها bumpy وغير منتظمة.
definition
A Datum is a mathematical model of the Earth, which serves as the reference or base for calculating the geographic coordinates of a location. الـ Datum هو نموذج رياضي بيمثل كوكب الأرض. بنعتبره "المرجع" اللي بنبدأ من عندها حساب الإحداثيات الجغرافية (خطوط الطول ودوائر العرض) لأي مكان على الخريطة.
الـ Datum بيتكون من حاجتين أساسيتين: مجسم بيضاوي (Ellipse) ومحور دوران (Axis of rotation). وطبعاً بيُعتبر جزء أساسي من نظام الـ GCS. الـ Local Datum بيعمل (Align) أو بيظبط المجسم (Spheroid) على المنطقة دي بس، وبيحدد "نقطة أصل" (Origin Point) مكانها على سطح الأرض يقيس منها.
الـ Global Datum نقطة الأصل بتاعته مش على السطح، دي بتكون جوه "مركز كتلة الأرض" (center of the earth ), ده الأساس اللي بيعتمد عليه الـ GPS وقياسات الأقمار الصناعية. لو غيرت الـ datum، نفس النقطة هياخد إحداثيات مختلفة.
<br> <img src="https://courses.ems.psu.edu/geog862/sites/geog862/files/images/Lesson05/European%20Datum.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> في مصر فيه أمثلة datums زي: Helmert, Hayford, Suez 1974.
الاختيار بيعتمد على المنطقة اللي بتشتغل عليها — كل بلد ليها datum مناسب ليها.
حته زياده من الكتاب لما بتحول إحداثيات خريطة من المرجع القديم (NAD27) للمرجع الجديد (NAD83)، النقط بتترحل وتتحرك من مكانها، وده بنسميه (Horizontal Shift), الحركه دي بتتقاس بالمتر, وقيمة الترحيل بتختلف من مكان للتاني
عشان المهندسين مايتلخبطوش، بيعملوا خرايط مرسوم عليها خطوط اسمها (Isolines)، الخطوط دي بتوضحلك المنطقة اللي إنت فيها دي بالظبط حصلها شيفت كام متر. definition
A map projection is a mathematical formula for representing the curved surface of the earth on a flat map. الـ Map Projection هو ناتج تحويل سطح الأرض الكروي أو المنحني لسطح مستوي.
definition
Distortions are inherent in maps because the Earth is round and a map is flat. مفيش projection يحافظ على كل الخصائص مرة واحدة.
عشان كده بنختار projection حسب الهدف.
definition الـ Equal Area (Homolographic): بيحافظ على نسب المساحات — مساحة النرويج على الخريطة = مساحتها الحقيقية نسبيًا.
الـ Orthomorphic (True-Shape): بيحافظ على الأشكال — حدود الدول بتبان زيها زي على الأرض.
الـ Azimuthal (True-Bearing): بيحافظ على الاتجاهات من نقطة معينة.
الـ Equidistant (True Scale): بيحافظ على المسافات — لكن مفيش projection بيحافظ على المقياس في كل مكان، فقط على خطوط معينة. فكرة الإسقاط ببساطة: كوكب الأرض كورة، والورقة مسطحة. إزاي ننقل الرسمة من الكورة للورقة؟ بنختار "شكل مجسم" نلف بيه الأرض: The principal scale: A common measure of projection distortion
<br> <img src="https://grade8science.com/wp-content/uploads/2021/08/6.3.2-3-v2.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> لما نيجي نعمل projection للكوره علي الورقة فيه عندنا حالتين: الحالة البسيطة (Tangent - مماس): الورقة بتلمس الأرض من بره في "خط واحد" (One Standard Line). الخط ده التشوه عنده بيكون صفر، بس كل ما تبعد عنه التشوه بيزيد .
الوضع القاطع (Secant - قاطع): الورقة بتخترق وتقطع كوكب الأرض، فبتعمل "خطين تماس" (Two Standard Lines). ده بيوزع التشوه على مساحة أكبر، فبيقلل التشوه العام وبيخلينا نقدر نرسم مساحات أكبر بدقة أحسن. <br> <img src="https://o.quizlet.com/YSoEn7HhaHGqP1dBV8Xykw.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الـ cone بيلمس الأرض على خط عرض.
خطوط الطول بتتقاطع عند apex (رأس المخروط), ودوائر العرض بتبقى عبارة عن أقواس فوق بعض (concentric arcs).
<br> <img src="https://gisgeography.com/wp-content/uploads/2017/04/Secant-Tangent-Cone.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> ا Equidistant Conic: المسافات بين دوائر العرض متساوية. مش بيحافظ على المساحة (Area) ولا الشكل (Shape)، بس مناسب للمناطق الصغيرة. بيحافظ على المسافات (distance/scale).
ا Lambert Conformal Conic: دوائر العرض بتقرب من بعض في النص. بيحافظ على الأشكال (Shapes) وممتاز للخرائط التفصيلية.
ا Albers Equal Area Conic: دوائر العرض بتقرب من بعض عند الأطراف. بيحافظ على المساحات (Areas). لما بنفرد الأسطوانة، خطوط الطول والعرض بتتقاطع بزوايا قايمة (90 درجة). المسافات بين خطوط الطول بتبقى متساوية، بس دوائر العرض بتبعد عن بعض كل ما تقرب للقطبين.
<br> <img src="https://gisgeography.com/wp-content/uploads/2016/12/Secant-Tangent-Cylinder-768x372.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
<br> <img src="https://www.researchgate.net/profile/Nagi-Zomrawi/publication/338393188/figure/fig3/AS:843930698522624@1578220166024/Types-of-cylindrical-Projection.ppm" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الـ Mercator: أشهر أنواع الـ cylindrical projections. بيتميز إنه conformal وبيحافظ على الـ directions المسافات بتكون دقيقة 100% عند الـ equator، لكن بتتمدد وتتشوه جداً كل ما نقرب للـ poles (مثال: Greenland بتبان على الخريطة أكبر من Africa، مع إن أفريقيا في الحقيقة أكبر منها 14 مرة). الـ plane بتلمس الأرض عند point of contact.
الـ focus بيتحدد بـ central longitude و central latitude.
<br> <img src="https://randallboone.org/nr505/projects/project8/images/planar_projection.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
<br> <img src="https://mkudamatsu.github.io/gis_lecture1/planar.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
بصمجيات الـ Universal Transverse Mercator (UTM) نوعه cylindrical و Conformal
الـ Lambert نوعه Conic و Conformal
الـ Albert نوعه Conic و Equal Area UTM System الـ UTM مبني على إسقاط Transverse Mercator، وبيقسم الأرض لـ 60 منطقة (Zones)، عرض كل واحدة 6° من خطوط الطول، وكل منطقة بيتعملها إسقاط لوحدها عشان يقلل التشوه. النظام شغال من 80°S لحد 84°N، أما المناطق القطبية فبتستخدم نظام UPS.
لكل منطقة Central Meridian في النص، ومعامل المقياس عنده 0.9996، عشان كده التشوه داخل المنطقة بيكون صغير جدًا (أقل من 0.1%). الإسقاط بيحافظ على الأشكال والزوايا كويس، لكنه مش بيحافظ على المساحات.
كل منطقة ليها رقم من 1 لـ 60، وكمان شريط عرضي بحرف من C لـ X، وبيتكتبوا مع بعض لتحديد المنطقة زي 11U. مصر مثلًا موجودة في Zone 35R و Zone 36R، ولازم تعرف الـ Zone الصحيحة لبياناتك لأن دمج بيانات من مناطق مختلفة من غير تحويل ممكن يسبب أخطاء في الموقع والمسافات.
حته زياده من الكتاب ا Mercator ممتاز للملاحة لأنه بيخلي الاتجاهات ثابتة، لكنه بيشوّه المساحات جدًا كل ما نبعد عن خط الاستواء. ا Hammer إسقاط بيحافظ على نسب المساحات والنقطه الوحيده الي مفهاش تشوه هيا المركز
ا Goode بيحافظ على المساحات الحقيقية، إسقاط متقطع.
ا Robinson اتعمل عشان يدي شكل متوازن وأقرب للواقع للعالم كله، فمش بيحافظ لا على المساحات ولا الأشكال بشكل كامل، لكنه بيقلل التشوه العام وبيخلي الخريطة شكلها طبيعي أكتر من Mercator. حته زياده من الكتاب في ArcGIS لازم تحدد Coordinate System عشان البيانات تتعرض وتتقاس بشكل صحيح. ملف .prj هو اللي بيخزن كل معلومات نظام الإحداثيات والإسقاط.
ملف .prj بيتكون من 3 أجزاء: نظام الإحداثيات الجغرافي (Datum, Spheroid, Prime Meridian, Units)، ومعاملات الإسقاط (زي Central Meridian و Scale Factor)، والوحدة الخطية المستخدمة في القياس وغالبًا بتكون المتر.
Define Projection vs Project: اDefine Projection — بييعرّف النظام بس من غير ما يغيّر البيانات. بس تستخدمه لو البيانات مفيهاش معلومات عن نظام الإحداثيات.
اProject — بييحوّل البيانات فعليًا من نظام لإحداثيات لنظام تاني. بس تستخدمه لو عايز تحوّل بيانات من WGS84 مثلا لـ UTM Zone 36N. حته زياده من الكتاب الـ On-the-fly Projection بتخلي برنامج الـ GIS يعرض طبقات بيانات من أنظمة إحداثيات مختلفة مع بعض وكأنها على نفس النظام، من غير ما يغير البيانات الأصلية. البرنامج بيعمل التحويل تلقائيًا لنظام إحداثيات مشترك، وغالبًا بيكون نظام أول طبقة اتضافت للخريطة.
لو طبقة البيانات مفيهاش معلومات عن نظام الإحداثيات، البرنامج ممكن يفترض نظام افتراضي، وده ممكن يسبب أخطاء في عرض البيانات لو الافتراض كان غلط. حدود الاستخدام: لو عايز تستخدم البيانات في تحليل مكاني (Spatial Analysis)، لازم تعملها Reproject فعلي — الإسقاط اللحظي مش بيحوّل البيانات فعلًا.
لو هتستخدم البيانات كتير في نظام إحداثيات مختلف عن الأصلي، لازم تحولها عشان النتائج تطلع أدق. ملخص ا Coordinate Systems هدفها تخلي الـ layers تركب فوق بعض صح. لو الـ reference مختلف، الطريق أو الحدود ممكن يظهروا في مكان غلط والتحليل كله يطلع غلط.
ا GCS بيحدد المكان على سطح الأرض بـ Latitude و Longitude. القيم دي angles، مش X,Y، عشان كده نفس الدرجة مش دايمًا بتساوي نفس المسافة.
ا PCS بيحول الأرض لخريطة مسطحة بـ X,Y، وده أنسب للحسابات الدقيقة والـ large-scale mapping.
ا Datum هو المرجع اللي الإحداثيات مبنية عليه. اختلافه ممكن يعمل shift بين layers حتى لو البيانات نفسها صح.
شكل الأرض بيتقرب بثلاث مستويات: Sphere أبسط حاجة، Ellipsoid أدق هندسيًا، و Geoid أقرب للواقع عشان مرتبط بالـ gravity و mean sea level.
ا Projection = تحويل من GCS لـ PCS. ا Reprojection = تحويل من PCS لنوع PCS تاني.
أي projection لازم يعمل distortion في Area, Shape, Distance/Scale, أو Direction. الاختيار بيكون حسب الخاصية الأهم في الخريطة.
الأنواع الأساسية للـ projections: Planar, Conical, و Cylindrical. ومن أهم الأنظمة UTM، ومصر في zones 35, 36 و band R.
في ArcGIS: ا Define Projection بيعرف النظام بس، أما Project بيحول البيانات فعليًا. وملف .prj بيخزن معلومات الـ projection. ]]></description><link>gis/lectures/lecture-3-coordinate-systems.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 3 - Coordinate Systems.md</guid><pubDate>Sat, 06 Jun 2026 13:31:26 GMT</pubDate><enclosure url="https://gisrsstudy.com/wp-content/uploads/2022/08/GCS-vs-PCS.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src="https://gisrsstudy.com/wp-content/uploads/2022/08/GCS-vs-PCS.jpg"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Lecture 7 - Spatial Data Structure]]></title><description><![CDATA[مقدمة الجزء ده بيتكلم عن هياكل البيانات المكانية (Spatial Data Structures) — إزاي البيانات المكانية (نقاط، خطوط، مناطق) بتتخزن في الـ GIS.
أهم المحاور: Point Data (K-D Tree, PR Quadtree, Grid Files), Line Data (Arc-Node, Chain Codes), Area Data (Boundary Model, Region Quadtree), و R-Trees كـ Index ديناميكي. هياكل البيانات المكانية اتقسمت حسب نوع البيانات نفسها الي: ا Point Data: بيتم تخزينها بطرق زيCell Method, Point Quadtrees, K-D Trees, PR Quadtrees, Grid Filess.
ا Line Data: بيتم تخزينها باستخدام Arc-Node Structure, Chain Codes.
ا Area Data: بيتم تخزينها باستخدام Boundary Model, Region Quadtree. الـ R-Tree هي Dynamic Index Structure مخصص للبيانات المكانية. الـ B+ Tree كويس للبيانات الخطية (1D)، لكن مش مناسب للبيانات المكانية (2D/3D).
الـ R-Tree بيحل المشكلة دي عن طريق تقسيم المساحة لمستطيلات حد أدنى (MBR). ا Height Balanced — كل المسارات من الروت للورقة طولها متساوي.
ا 2 types of nodes: فيها نوعين, Internal Nodes و Leaf Nodes.
ا Leaves point to disk pages — الـ Leaves بتبقى شايلة "عناوين" (Pointers) بتوديك لمكان تخزينها الفعلي على الهارد ديسك.
ا Records in the leaves point to actual data objects — كل Record جواه مؤشر مباشر بيسحب العنصر أو الشكل الفعلي من قاعدة البيانات..
ا Max Capacity = اM — لو النود بتشيل عدد (M) من البيانات كحد أقصى، فلازم على الأقل تكون مليانة للنص (M/2).
ا Completely Dynamic — لو ضفت بيانات جديدة أو مسحت بيانات قديمة، الشجرة بتعدل نفسها وتتوازن تلقائياً من غير ما تحتاج توقف النظام وتبني الشجرة كلها من الصفر.
ا Guaranteed Fan-out of M/2 — كل نود (ما عدا الروت) يكون طالع منها على الأقل فروع عددها M/2، وده اللي بيحافظ على توازن الشجرة.
كل Leaf Record هو MBR (Minimum Bounding Rectangle) — كل سجل في الأوراق بيمثل (MBR - Minimum Bounding Rectangle)، يعني بيحوط العنصر اللي جواه في "أصغر مستطيل ممكن" من غير ما يسيب مساحات فاضية كتير ملهاش لازمة.
ا Root has at least two children) — الروت لازم يتقسم لفرعين علي الاقل. ا M هنا بيمثل السعة القصوى (Maximum Capacity) لأي Node جوه الشجرة. عشان تتخيلها ببساطة، اعتبر الـ R-Tree دي عاملة زي "فولدرات الكمبيوتر"؛ فولدر كبير جواه فولدرات أصغر، لحد ما تفتح آخر فولدر تلاقي جواه الملفات الحقيقية. ا Internal Nodes: دي بتمثل "الفولدرات الكبيرة والمتوسطة" اللي في الشجرة، ومفيهاش بيانات حقيقية، وظيفتها بس توجهك. وكل عقدة فيها بتتكون من حاجتين: المستطيل (N dimensional rectangle): ده مستطيل وهمي كبير بيترسم عشان يحوط مجموعة من المستطيلات الأصغر منه (ممكن يكون 2D على خريطة عادية، أو 3D لو الخريطة مجسمة).
المؤشر (Child pointer): ده السهم أو "العنوان" اللي بيشاور على المستطيلات الأصغر (الأبناء) اللي موجودين جوه المستطيل الكبير ده. ا Leaf Nodes: دي "نهاية فروع الشجرة"، ودي اللي بتوصلك للبيانات الحقيقية. وبرضه بتتكون من حاجتين: أصغر مستطيل محيط (MBR - Minimum Bounding Rectangle): ده المستطيل اللي بيترسم حوالين الشكل الحقيقي بالظبط على الخريطة (زي مبنى أو بحيرة) عشان يحجمه بأقل مساحة ممكنة من غير أي فراغات ملهاش لازمة.
مؤشر البيانات (Tuple-identifier): ده السهم الأخير اللي بياخدك من إيدك ويوديك للـ "Hard Disk" (أو قاعدة البيانات) عشان تقرا البيانات الفعلية بتاعت الشكل ده (زي اسمه، نوعه، مساحته، إلخ). <img border="0" alt="image" src="https://i.ibb.co/dw4tjnM2/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الأشكال الي متلونه ازرق (المستطيلات الصغيرة والنقط) اللي تحت دي البيانات الحقيقية بتاعتنا (مثلاً: بيوت، بحيرات، شوارع).
كل مجموعة أشكال زرقا قريبة من بعض حوطناهم بـ مستطيل رفيع على قدهم بالظبط (زي المستطيلات a, b, c, d), المستطيلات الرفيعة دي هي الـ (MBR) اللي جوه العقد الورقية (Leaf Nodes).
في الشجرة اللي فوق، هتلاقي الحروف دي (a, b, c...) هي اللي في المستوى قبل الأخير، وكل حرف طالع منه خطوط لتحت (دي المؤشرات أو الـ Tuple-identifiers اللي بتوديك للشكل الأزرق الحقيقي).
بعدها جمعنا كل كام مستطيل رفيع قريبين من بعض، وحوطناهم بـ مستطيل تخين كبير (دي العقد الداخلية).
من الاخر البيانات الحقيقية (الأشكال الزرقاء): دي العناصر الفعلية اللي على الخريطة (بيوت، شوارع، إلخ) وموجودة جوه أصغر مستطيلات. العقد الورقية / Leaf Nodes (المستطيلات الرفيعة a,b,c...): دي أصغر مستطيلات (MBR) بتترسم عشان تحوط الأشكال الزرقاء بالظبط، وبتكون في المستوى قبل الأخير في الشجرة اللي فوق. العقد الداخلية / Internal Nodes (المستطيلات الكبيرة m,n,o,p): دي مستطيلات "تجميعية" أكبر، كل مستطيل فيهم بيلم جواه مجموعة من المستطيلات الرفيعة القريبة من بعض. الجذر / Root Node (البلوك [m|n|o|p]): ده قمة الشجرة (نقطة البداية)، وجواه المؤشرات اللي بتوزعك على المستطيلات الكبيرة عشان تبدأ رحلة البحث. الإضافة (Inserts): إنك تحط عنصر أو شكل جديد في الشجرة.
الحذف (Deletes): إنك تمسح عنصر من الشجرة.
التحديث (Updates): خلي بالك، التحديث هنا مش بيحصل في نفس المكان، لكن النظام بيمسح العنصر القديم ويضيفه من جديد بتعديلاته. (السبب: إن تغيير حجم العنصر ممكن يغير حجم المستطيلات اللي محوطاه، فالأضمن يمسحه ويضيفه عشان الشجرة تتوزن صح). دي الميزة الأقوى للـ R-Tree، إنها بتعمل "بحث مكاني" (Spatial Search).
امثله: البحث جوه مساحة معينة: "هاتلي أسماء كل الطرق اللي جوه مساحة 1 كيلومتر مربع؟".
البحث في مسار معين: "إيه المباني اللي هتقابلني وأنا ماشي بين مبنى كذا ومبنى كذا؟"
الاحتواء الكامل (Contained): "هاتلي كل المستطيلات (العناصر) اللي واقعة بالكامل جوه المستطيل اللي ببحث بيه".
التقاطع (Intersecting): "هاتلي كل المستطيلات اللي بتتقاطع أو بتلمس المستطيل اللي ببحث بيه" (حتى لو جزء منها بس هو اللي جوه). الـ K-D Tree (K-Dimensional Tree) هو Binary Search Tree كل عقدة فيه نقطة في K بُعد.
بيستخدم لتخزين النقاط في K أبعاد (مثلًا: 2D أو 3D).
الـ Range queries: دي اهم ميزه, بتمكنك تبحث بأكتر من شرط (Key) في نفس الوقت. مثال: لو بتبحث في داتا بيز، تقدر تقول: "هاتلي الناس اللي سنهم بين 34 و 49 وكمان مرتبهم بين 100 ألف و 150 ألف". أشهر مجالاتها: بتستخدم بكثرة في الـ GIS (عشان الإحداثيات) والجرافيكس.
هي تطوير للـ binary search tree اللي خدناها زمان (BST)، بس بدل ما كانت بتبحث في بُعد واحد (1D)، بقت بتبحث في عدد من الأبعاد (-dimensional).
النود في الـ K-D Tree مش بتشيل قيمة واحدة، دي بتشيل (مجموعة قيم مع بعضها = Vector)، بالإضافة لـ (الأسهم = Pointers) اللي بتوديك للخطوة اللي بعدها في الشجرة.
<br><img border="0" alt="image" src="https://i.ibb.co/spDWTK5W/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> 1. عملية الإدخال (Insert): إنت بتدخل عنصر ليه بُعدين (Vector حجمه 2، زي [X, Y]).
دايماً العنصر الجديد بينزل في آخر الشجرة كـ ورقة (Leaf).
الفكره هنا: المقارنة بتتغير حسب المستوى. يعني وإنت نازل في الشجرة، بتسأل نفسك: "أنا في مستوى كام؟ لو 0 هقارن الـ X، لو 1 هقارن الـ Y"، وهكذا بالتبادل. 2. عملية البحث في نطاق مستطيل (Orthogonal Range Query): عشان تبحث عن بيانات جوه منطقة محددة، إنت بتدي للكمبيوتر حدود "صندوق" يبحث جواه: البُعد الأول key[0] (زي محور X): بتديله حد أدنى low[0] وحد أقصى high[0].
البُعد التاني key[1] (زي محور Y): بتديله حد أدنى low[1] وحد أقصى high[1]. الكمبيوتر بيمشي في الشجرة ويجيبلك بس النقط اللي واقعة جوه الصندوق ده. الحالات الخاصة للبحث الصندوق ده مش دايماً لازم يكون مستطيل، ده ممكن يتغير حسب إنت بتبحث عن إيه بالظبط، وعندنا حالتين: الحالة الأولى: التطابق التام (Exact match) القاعدة: low[level] = high[level] (يعني الحد الأدنى بيساوي الأقصى في كل الأبعاد).
الشرح: لو إنت قولت للكمبيوتر دورلي في الـ X من النقطة 5 للنقطة 5، وفي الـ Y من 10 لـ 10.. كده المستطيل انكمش وبقى عبارة عن نقطة واحدة بس.
الخلاصة: إنت هنا مش بتبحث في مساحة، إنت بتبحث عن إحداثيات "نقطة محددة بالظبط" عشان تتأكد هي موجودة في الداتا بيز ولا لأ. الحالة التانية: التطابق الجزئي (Partial match) القاعدة: بتحدد النطاق لبعض المحاور، والمحاور التانية بتعتبرها واخدة من (من سالب ما لا نهاية لموجب ما لا نهاية).
الشرح: افرض إنك بتبحث بشرط واحد بس، زي "هاتلي كل الموظفين اللي سنهم من 20 لـ 30 سنة" ومش مهتم بالمرتب (محور Y). <br><img border="0" alt="image" src="https://i.ibb.co/tPHsY50x/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> القاعده الي بنمشي عليها: المستوى 0 (الروت): بنقارن بمحور X. (لو أصغر تروح شمال، لو أكبر تروح يمين).
المستوى 1: بنقارن بمحور Y. (لو أصغر تنزل شمال، لو أكبر تنزل يمين).
المستوى 2: نرجع نقارن بـ X.
المستوى 3: نرجع نقارن بـ Y.. وهكذا. تعالى نمشي مع الأرقام واحدة واحدة ونشوف اترصت في الشجرة إزاي: 1. النقطة (A = 65, 50): أول نقطة دخلت، فبقت هي الـ Root.
2. النقطة (B = 60, 70): نقف عند A (مستوى 0 يعني نقارن X): الـ X بتاعت B بـ (60) أصغر من الـ X بتاعت A الي بـ (65).
النتيجة: B تروح شمال A. 3. النقطة (C = 70, 60): نقف عند A (مستوى 0 نقارن X): الـ X بتاعت Cبـ (70) أكبر من 65.
النتيجة: C تروح يمين A. 4. النقطة (D = 75, 25): نقف عند A (نقارن X): 75 أكبر من 65 ⬅️ نروح يمين عند C.
نقف عند C (مستوى 1 يعني نقارن Y): الـ Y بتاعت D بـ (25) أصغر من الـ Y بتاعت C بـ (60).
النتيجة: D تنزل شمال C. 5. النقطة (E = 50, 90): نقف عند A (نقارن X): 50 أصغر من 65 ⬅️ نروح شمال عند B.
نقف عند B (مستوى 1 نقارن Y): الـ Y بتاعت E بـ (90) أكبر من الـ Y بتاعت B بـ (70).
النتيجة: E تنزل يمين B. Tip لو التري 3d (فيها تلات قيم X,Y,Z ) يبقي هنعمل نفس الحاجة بس نزود Z: المستوى 0 (الروت): بنقارن بمحور X. (لو أصغر شمال، لو أكبر يمين).
المستوى 1: بنقارن بمحور Y.
المستوى 2: بنقارن بمحور Z.
المستوى 3: نرجع نعيد الدورة ونقارن بـ X.
المستوى 4: نرجع نقارن بـ Y.. وهكذا. Java Code (مش عارف مهم ولا لا بس موجود في المحاضره)
public void insert(Vector&lt;T&gt; x) { root = insert(x, root, 0);
} private KdNode&lt;T&gt; insert(Vector&lt;T&gt; x, KdNode&lt;T&gt; t, int level) { if (t == null) t = new KdNode(x); int compareResult = x.get(level).compareTo(t.data.get(level)); if (compareResult &lt; 0) t.left = insert(x, t.left, 1 - level); else if (compareResult &gt; 0) t.right = insert(x, t.right, 1 - level); else ; // do nothing if equal return t;
} ملاحظة: 1 - level بيعيد البُعد — لو level=0 (X) يبقى 1-0=1 (Y).
ملخص هياكل البيانات المكانية بتتقسم حسب نوع البيانات: Point Data (K-D Tree, PR Quadtree, Grid Files), Line Data (Arc-Node, Chain Codes), Area Data (Boundary Model, Region Quadtree).
ا R-Tree = Dynamic Index Structure للبيانات المكانية (2D/3D). حلّ محل الـ B+ Tree اللي مش مناسب للأبعاد المتعددة. ا Properties: Height Balanced, Internal Nodes + Leaf Nodes, Leaves بتشاور على Disk Pages، كل Leaf Record = MBR، Max Capacity = M (min M/2)، Completely Dynamic، Root لازم يبقى ليه ابنين على الأقل.
-ا Structure: Internal Nodes = (Rectangle + Child pointer). Leaf Nodes = (MBR + Tuple-identifier للـ Data).
ا Operations: ا Insert, Delete, Update ]]></description><link>gis/lectures/lecture-7-spatial-data-structure.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 7 - Spatial Data Structure.md</guid><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><enclosure url="https://i.ibb.co/dw4tjnM2/image.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/dw4tjnM2/image.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Lecture 2 - GIS Data Models]]></title><description><![CDATA[مقدمة الجزء ده بيغطي مفاهيم GIS الأساسية ونماذج البيانات.
أهم المحاور: المفاهيم الأساسية للـ GIS, طبقات Vector, نماذج البيانات Vector و Raster, العلاقة بين Geometry و Topology و Attributes, وفرق Database عن Spatial Database.
في آخر الملخص فيه مراجعة بتجمع تعريفات مهمة زي GISy, GIScience, GPS, SDE, IMS. definition
Features have attributes associated with them. دي أول فكرة أساسية في الـ GIS.
الـ Feature هو عنصر على الخريطة.
والـ Attributes هي البيانات المرتبطة بالعنصر ده. لو بنرسم أماكن الأشجار: مكان كل شجرة بيتسجل على الخريطة ( يعني الشجره نفسها Feature).
وكل شجرة ليها attributes زي النوع، العمر، الحالة، الارتفاع. <img border="0" alt="image" src="https://i.ibb.co/TBfFPD1D/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> في مثال الأشجار، بنرسم موقع كل شجرة ونحدد أي attributes تخص أي شجرة.
وده هو أساس الـ GIS.
بصمجيات
الـ Feature = الحاجة نفسها على الخريطة.
الـ Spatial Data = مكان الحاجة دي علي الخريطه
الـ Attribute = بيانات الحاجة دي.
definition
Information is separated into layers. الفكرة التانية إن المعلومات بتتقسم لطبقات.
كل طبقة تمثل نوع معين من البيانات.
مثال: ا طبقة انهار ا طبقة طرق ا طبقة مباني <br> <img src="https://d9-wret.s3.us-west-2.amazonaws.com/assets/palladium/production/s3fs-public/styles/full_width/public/thumbnails/image/Figure3_STEMModeling.jpg?itok=g52rEgUB" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;"> كل طبقة ممكن تتحط فوق التانية عشان نطلع صورة وتحليل كامل.
الطبقة الأساسية غالبا بتبقى تحت، وباقي الطبقات فوقها. معلومه من العملي كل Layer بيبقي ليها Geometry واحد بس
مينفعش تحط Points و Lines و Polygons في نفس الـ Layer.
يعني:
Trees → Points
Roads → Lines
Buildings → Polygons العلاقة بين الـ map والـ database علاقة تفاعلية.
لو اخترت feature من الـ map، الـ record المقابل ليه يتحدد في جدول البيانات.
ولو اخترت record من الجدول، الـ feature المقابل ليه يتحدد على الخريطة.
كمان التعديل على الـ Features الي في الماب او تقسيمها ممكن يغير الـ database. ا Vector layers بتمثل الـ features بطرق مختلفة ا Points
ا Lines
ا Polygons definition
A point is good for representing information in which it is necessary to show where a feature is. الـ Point يمثل حاجة مكانها مهم، لكن حجمها أو مساحتها مش هي المهمة في الخريطة.
أمثلة: شجرة.
عمود نور.
موقع حادثه. definition
A line is suitable to represent many real world features, such as rivers in a river layer. الـ Line يمثل حاجة ممتدة في مسار.
أمثلة: نهر.
طريق.
سكة حديد. definition
Polygon is a solid multi-sided shape. الـ Polygon يمثل مساحة مقفولة.
يعني شكل ليه حدود ومساحة.
أمثلة: دولة.
بحيرة.
قطعة أرض.
منطقة إدارية. <br> <img src="https://saylordotorg.github.io/text_essentials-of-geographic-information-systems/section_08/5e0adb92da29fb258470bfeb5265cc55.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;">
ملخص definition
GIS Data Models are methods of representing geographic space. الـ Data Model هو الطريقة اللي بتمثل بيها البيانات الجغرافية جوه الـ GIS.
فيه نوعين أساسيين من GIS Data Models لتمثيل الـ geographic space: ا Vector
ا Raster Note
A database structure need seldom be made to suit a data model. But a well prepared data model is vital for a successful GIS analysis. مش لازم نعيد تصميم قاعدة البيانات كلها عشان تناسب Data Model معين، لكن لازم نفكر كويس في الـ Data Model نفسه لأن نجاح تحليل الـ GIS بيعتمد عليه بشكل كبير.
definition
Vector Data Model uses points and their x-, y-coordinates to represent spatial features: points, lines, and areas. الـ Vector بيمثل الواقع باستخدام إحداثيات.
يعني كل feature بيتوصف بنقط وإحداثيات x, y. الـ Point عبارة عن node واحدة.
ملوش area.
بيتحدد بإحداثيات:
(x, y) الـ Line أو Arc عبارة عن اتصال بين nodes أو vertices.
بيبدأ من نقطة وينتهي عند نقطة.
بيتحدد بسلسلة إحداثيات:
(x1, y1), (x2, y2), ..., (xN, yN) الـ Polygon عبارة عن سلسلة arcs بتقفل حوالين label point.
لازم يكون فيه closure point عشان الشكل يبقى مقفول. الـ Vector Representation مناسب لما عندك features منفصلة وواضحة الحدود.
مثال: طريق، حدود دولة، قطعة أرض.
definition
Raster Data Model uses a grid with cells to represent spatial features. الـ Raster بيمثل المكان كـ شبكة (Grid).
<br> <img src="https://www.researchgate.net/publication/360058688/figure/fig6/AS:1147297345880065@1650548411660/Comparison-of-Raster-and-Vector-data.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;"> كل cell في الشبكة ليها value.
الـ raster يقدر يمثل: ا Point: قيمة في cell واحدة.
ا Line: سلسلة cells متصلة تمثل طول.
ا Area: مجموعة cells متصلة تمثل شكل ومساحة. note
Because the raster data model is a regular grid, spatial relationships are implicit. Therefore, explicitly storing spatial relationships is not required as it is for the vector data model. عشان الـ Raster عبارة عن شبكة منتظمة من الـ Cells، فموقع كل Cell بالنسبة للخلايا المجاورة معروف تلقائيًا من مكانها داخل الشبكة.
عشان كده الـ GIS يقدر يفهم علاقات الجوار بسهولة من ترتيب الـ Cells نفسه، من غير ما يخزن العلاقات دي بشكل صريح زي الـ Vector. صور الـ satellite من الأشكال الشائعة للـ Raster.
كل صورة satellite ليها Bands كتير (ممكن 5 أو 7 أو أكتر).
كل band بيمثل Layer .
مثال: Red Band, Green Band, Near Infrared Band.
definition
DEM is a raster dataset where each cell represents elevation above sea level. الـ DEM ده Raster كل cell فيه بيمثل الارتفاع عن سطح البحر.
بيستخدم في: تحليل المنحدرات.
تحديد مسارات الصرف.
دراسة التضاريس. definition
Data is stored in four basic methods: points, lines, areas, and a grid (or raster). بيتخزن على هيئة إحداثيات (X,Y) مع بيانات وصفية (Attributes).
مثال: نقطة في bird data بتمثل كل الطيور المسجلة في مكان معين و تاريخ معين. بيتكون من مجموعة نقاط متوصلة ببعض.
كل Line بيبقى ليه Attributes مرتبطة بيه.
بتتخزن كـ نقطتين و arc بيربطهم مع attributes في table.
مثال: زي نهر, طريق. بيستخدم لتمثيل الحاجات اللي ليها مساحة وحدود.
بيتكون من نقط (Points) , وخطوط (Arcs or lines) بتوصل النقط دي ببعض في شكل مغلق.
زي Lines و Areas، الـ table بتخزن الـ points و lines مع الـ attributes.
مثال:بحيره, قطعة ارض, حي سكني. الـGrid عبارة عن سلسلة square cells ليها value مرتبطة بكل cell.
الـ grids بتستخدم لتمثيل مناطق واسعة وبتستخدم قيم مختلفة لتمثيل حاجات مختلفة.
مثال: درجة الحرارة, الارتفاعات, الأمطار, صور الأقمار الصناعية.
Temperature in Raster في الـ Raster كل Cell بتخزن رقم بيمثل قيمة الظاهرة في المكان ده.
مثال: درجة حرارة منطقة في البحر = 18.0°C
تتخزن داخل الـ Cell كقيمة 180 يعني الرقم المخزن مش شرط يكون درجة الحرارة نفسها، لكنه ترميز (Encoded Value) بيمثلها عشان يسهل تخزين البيانات ومعالجتها داخل الكمبيوتر. الـ Vector-based line: بتتخزن كـ flat file فيه coordinate pairs.
الـ Raster-based line: بتتخزن كـ binary grid (0s و 1s) — كل cell فيها line بتبقي 1.
<br> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXqF1_Lf_mZHL0CPmSUNv-sQanZEPdRRfFGEicvoZ2QAe_baDlpVLVQKcR7yjSv8eeZ_Q3MnfwwiEegqflzFmUYI2kwZrNANYAvl_Fu3fhjvf0QXosX3EH7QGWeVpbgCoeQqZLNUSaazCCFTtYtWyJZzBA5b2Y-ciVq-f4kt42SOJYrgZXQpg9jqu_iw/s1108/RasterVector.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;"> الـ Vector أحسن للحاجات المنفصلة والواضحة زي الطرق والحدود وقطع الأراضي.
الـ Raster أحسن للحاجات المستمرة زي الارتفاعات والحرارة والكثافة والصور. Geometry: coordinates and form of the objects
Topology: expresses explicitly the spatial relationships between features
Attributes: properties and values. الـGeometry بتقول الشكل والإحداثيات.
الـTopology بيوضح العلاقات المكانية بين الـ features، مين جنب مين، ومين بيحد مين.
الـAttributes بتقول معلومات وخصائص العنصر وقيمه.
يعني إيه Topology (حته زياده )
الـ Topology باختصار هي شوية قواعد وأدوات بتظبط العلاقات الهندسية والمكانية بين البيانات بتاعتك عشان تكون دقيقة ومظبوطة. بتشتغل إزاي؟ بتتحفظ جوه الـ Geodatabase كعلاقات (Relationships) بتحدد إزاي الـ Features بتشارك المكان مع بعضها، وكل ده من غير ما تغير أصل الـ Feature class نفسه (بيفضل Simple زي ما هو).
ميزتها: ممتازة عشان تصطاد وتصلح أخطاء الرسم (Digitizing errors) زي الفراغات والتقاطعات، وضرورية جداً لو هتعمل تحليلات مكانية متقدمة. عيبها: البيانات اللي متطبق عليها Topology بتكون أبطأ شوية وبتاخد وقت أطول في العرض (Rendering) لو قارنتها بالبيانات العادية (Non-topological data) اللي بتفتح وتعرض أسرع. definition
Attribute data is the "I" in GIS. حرف I في GIS هو Information، وده غالبا بيظهر في صورة Attribute Data.
الـ GIS غالبا بيتقسم لمكونين: ا Coordinate information: بتوصف حاجات مكانية geometry أو spatial information.
ا Attribute information: بتوصف properties غير مكانية مرتبطة بالعنصر. الـ attribute data غالبا بتتعرض في شكل جداول، عشان كده بنسميها Tabular Data. في ArcGIS، الـ attribute table بيبقى فيه: ا Records: الصفوف، كل صف يمثل feature.
ا Fields / Attributes: الأعمدة، كل عمود يمثل خاصية. definition
Spatial data describes the absolute and relative location (geometrical data) of geographic features. الـ Spatial Data يعني بيانات بتوصف مكان features.
ممكن تكون: ا Discrete: حاجات منفصلة زي buildings أو roads أو trees.
ا Continuous: حاجات ممتدة ومستمرة زي elevation أو temperature. ملخص القاعدة الأساسية للـ GIS: أي عنصر على الخريطة (Feature) ليه مكان (Spatial Data) وليه معلومات وصفية (Attributes) متخزنة في جدول. العلاقة بينهم تفاعلية (اللي بتختاره هنا، بينور هناك).
قاعدة الطبقات (Layers): كل طبقة لازم يكون فيها نوع هندسي (Geometry) واحد بس. (مينفعش تحط نقط وخطوط في نفس الطبقة).
نماذج البيانات (Data Models): الـ Vector: بيعتمد على الإحداثيات (X,Y) وممتاز للحاجات "المنفصلة" والواضحة زي: النقط (أشجار)، الخطوط (طرق)، والمضلعات (مباني/دول). حجم بياناته أصغر وشكله أحسن.
الـ Raster: بيعتمد على شبكة مربعات (Grid Cells)، كل مربع جواه "قيمة". ممتاز للحاجات "المتصلة" والممتدة زي: الحرارة، التلوث، أو الارتفاعات (DEM). بيحتاج مساحة تخزين أكبر. الفرق بين الـ Geometry و Topology و Attributes: ا Geometry: ده "الشكل" و"الإحداثيات" بتاعت العنصر.
ا Attributes: دي "البيانات" والمعلومات الوصفية للعنصر.
ا Topology: دي "العلاقات المكانية" (مين جنب مين؟ مين بيقطع مين؟). ودي اللي بتصلح أخطاء الرسم، بس بتخلي البيانات أبطأ شوية في العرض. بيانات خاصة: ا DEM (Digital Elevation Model): ده ملف Raster، كل Cell فيه بتمثل "الارتفاع عن سطح البحر"، وبيستخدم لدراسة التضاريس والمنحدرات.
صور الأقمار الصناعية: بتعتبر Raster، وبتتكون من عدة طبقات (Bands) كل طبقة بتلقط طول موجي معين (زي الأحمر، والأخضر، والأشعة تحت الحمراء).&gt; ]]></description><link>gis/lectures/lecture-2-gis-data-models.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Lectures/Lecture 2 - GIS Data Models.md</guid><pubDate>Sat, 06 Jun 2026 00:53:09 GMT</pubDate><enclosure url="https://i.ibb.co/TBfFPD1D/image.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/TBfFPD1D/image.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Index]]></title><description><![CDATA[ 5\6\2026 قبل ما تبدأ طبعا لان الدكتور ممكن يجيب اسالة علي اي حاجة حرفيا حتي العملي ف انا اعتمدت في الشرح علي السلايدات والكتاب ومحتوي المحاضره فاعذروني علي الرغي الي هتلاقوه بس حاولت اغطي كل حاجة علي قد ما اقدر
هتلاقي في الشرح callouts مقفوله دي الي فيها الشرح الزياده الي موجود في الكتاب ومش موجود في المحاضرات وده انا حطيته زياده عشان لو جه منه نبقي عدينا عليه علي الاقل وبما اننا منعرفش فيه مقالي في الامتحان ولا لا ف راجع علي المنهج كذا مره بحيث تعرف النظري وذاكر المسائل كويس لو فيه اي اخطاء في الشرح قولي عشان اعدلها <a rel="noopener nofollow" class="external-link is-unresolved" href="https://t.me/DevNourEldeen" target="_self">https://t.me/DevNourEldeen</a> ومتنساش تدعيلي]]></description><link>gis/index.html</link><guid isPermaLink="false">2 - Areas/College/GIS/Index.md</guid><pubDate>Fri, 05 Jun 2026 17:15:07 GMT</pubDate></item><item><title><![CDATA[Color Representation in Computer Graphics - Lecture 5]]></title><description><![CDATA[مقدمة الشابتر ده بيتكلم عن تمثيل الألوان في Computer Graphics.
هنفهم يعني إيه color، إزاي العين بتشوف الألوان، الفرق بين RGB و CMY/CMYK، وبعدها هندخل على Frame Buffers وإزاي pixels بتتخزن في الذاكرة. اللون بيلعب دور أساسي في الـ Computer Graphics.
بيزود الواقعية، بينقل المعلومات، وبياثر على مشاعرنا.
استخدامات الـ Color في مجالات مختلفة: Graphical User Interfaces (GUIs)
Digital Art
Scientific Visualization
Virtual Reality definition
Color is not an intrinsic physical property of objects. It is a perceptual phenomenon caused by the interaction between light, objects, and the human visual system. الـ Color ده مش حاجة فيزيائية في الجسم نفسه زي وزنه أو حجمه مثلا. دي ظاهرة إدراكية بتحصل جوة دماغنا نتيجة تفاعل تلات حاجات مع بعض: الضوء، الجسم اللي بيعكس الضوء ده، وعينك (أو نظام الرؤية بتاعك). يعني من غير ضوء، مفيش حاجة اسمها لون أصلا.
اللون بيظهر عشان فيه: Light
Object
Human visual system من غير ضوء، مفيش color perception. عشان تفهم اللون، لازم تفهم الضوء الأول. الضوء ده عبارة عن طاقة كهرومغناطيسية بتمشي في موجات ليها أطوال مختلفة بنسميها Wavelengths. الضوء الأبيض بتاع الشمس الي انته بتشوفه، هو خليط من Wavelengths كتير مع بعض.
عين الإنسان مش بتشوف كل الطيف الكهرومغناطيسي، إحنا بنشوف حتة صغيرة بس اسمها الـ Visible Light Spectrum.
ودي بتبدأ من 400 نانومتر (اللون البنفسجي) لحد 700 نانومتر (اللون الأحمر). طبعا الأطوال الموجية دي نفسها "مش متلونة"، لكن لما بتدخل عينك، نظام الرؤية بتاعك بينتج إحساس اللون.
400 nm (Violet) → 700 nm (Red)
Summary
اللون هو إحساس بينتج لما العين تستقبل جزء من الضوء المرئي (مش بنشوف كله) (400–700 nm)، والضوء الأبيض عبارة عن خليط من أطوال موجية مختلفة. The human eye perceives light by focusing it through an elastic lens onto the retina العين بتشتغل ازاي ؟ الضوء بيدخل العين وبيتجمع عن طريق عدسة مرنة بينزل على الـ Retina (الشبكية) اللي في آخر العين. الشبكية دي بقى فيها خلايا حساسة للضوء بنسميها Photoreceptor Cells، ودول نوعين أساسيين: <img src="https://pic2.zhimg.com/v2-7d7bdb13bae0106215d511a9e2199e05_1440w.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> عندنا 3 أنواع من الـ Cones، كل نوع حساس لمدى معين من الـ Wavelengths بيمثل الألوان دي: الأحمر، الأخضر، والأزرق. استجابة الخلايا دي بتتداخل مع بعضها في حاجة اسمها Response Curves (منحنيات الاستجابة). في الأغلب، حساسية الخلية بتقل كل ما الطول الموجي يبعد عن القمة (Peak) بتاعتها، بس خد بالك ان: الـ Red cone عنده استجابة تانية خفيفة عند الأطوال الموجية القصيرة (ناحية الأزرق).
<br> <img src="https://www.pngitem.com/pimgs/m/672-6724374_human-eye-color-sensitivity-hd-png-download.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;"> بما إن العين بتتعامل مع استجابات قريبة من Red و Green و Blue، نقدر نعيد إنتاج ألوان كتير عن طريق خلط RGB light بكثافات مختلفة.
المبدأ ده هو أساس معظم تقنيات العرض الحديثة، زي: CRTs
LCDs
TFTs
Plasma displays
Digital projectors في أنظمة الـ graphics، لون كل pixel بيتمثل رقميا باستخدام RGB Triplet.
(R, G, B) كل بيكسل (Pixel) على الشاشة بيتمثل بأرقام بنسميها RGB Triplet. الهاردوير بياخد الأرقام دي ويحولها لقوة إضاءة للألوان التلاتة، وعينك هي اللي بتدمجهم عشان تشوف اللون النهائي. ا RGB معناها: ا Red
ا Green
ا Blue دول اسمهم Additive Primary Colors.
اتسموا additive عشان اللون بيتكون بإضافة light بكثافات مختلفة.
لو مفيش ضوء، النتيجة Black.
كل ما نزود الضوء، brightness تزيد.
لو جمعنا Red و Green و Blue بأقصى intensity، النتيجة هتبقي الـ White Light.
Key Idea
الـ RGB ده موديل لخلط "الضوء"، مش خلط ألوان دهانات أو حبر (Not paint or ink). الموديل ده بيستخدم في أي نظام بيطلع ضوء من نفسه (Emissive Display Systems) زي: Computer monitors
Televisions
Projectors لما نخلط لونين من RGB، بنطلع secondary additive colors. لو غيرنا relative intensities بين R و G و B، نقدر نطلع ألوان كتير جدا. ا Red أكتر من Green ممكن يطلع Orange.
ا Green أكتر من Red ممكن يطلع Lime.
خلطات غير متساوية من التلاتة ممكن تطلع Brown أو complex colors.
التحكم المستمر في intensity هو اللي بيخلي الأنظمة الرقمية تمثل ملايين الألوان.
<br> <img src="https://cdn.prod.website-files.com/61f9082050036c6c4b4899f8/69a0485fb777604233e1f35c_a-1693558643138-2x.jpeg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;">
بصمجيات
ا Additive Mixing زي الـ RGB ,بيضيف light , كل ما بنضيف الوان الاضاءه بتزيد لحد ما تبقي ابيض , لو مضفناش حاجة بتبقي اسود, بيشتغل مع الشاشات والحاجات الديجيتال لما نتعامل مع الاصباغ (Pigments)، خلط الألوان بيشتغل بطريقة تانية.
الموديل ده اسمه Subtractive (طرحي) عشان إحنا بنطرح أو بنمتص (absorb) الضوء مش بنطلعه, هنا إحنا مش بنضيف light، إحنا بنمتص أو نشيل wavelengths معينة ونسيب غيرها ينعكس.
ده اسمه Subtractive Color Mixing. Cyan
Magenta
Yellow الجسم الأصفر بيبان أصفر عشان بيعكس wavelengths الخاصة بالأصفر ويمتص غيرها.
ا Cyan بيعكس green-blue wavelengths.
ا Magenta بيعكس red-blue wavelengths.
لو عايز تفهم اكتر
احنا عرفنا ان اللون الابيض هو لون فيه كل الاطوال الموجية متضافة علي بعضها , الفكره هنا اننا لما بنيجي نطبع علي ورق بنطبع علي ورق ابيض , فهنا مينفعش نضيف الوان احنا المفروض نشيل الوان ,، وده هو مبدأ Subtractive Color Models.
Yellow + Cyan → Green نظريا، خلط Cyan + Magenta + Yellow يمتص كل الضوء المرئي ويطلع black.
<br> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/SubtractiveColor.svg/500px-SubtractiveColor.svg.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 300px; max-width: 100%;">
بصمجيات
ا Subtractive Mixing زي الـ CMY (أو CMYK)، بيمتص الـ light، كل ما بنضيف حبر الإضاءة بتقل لحد ما تبقى أسود، لو مضفناش حاجة بتبقى أبيض (اللي هو لون الورقة الفاضية)، بيشتغل مع الطباعة والحبر والورق. نظريا، خلط Cyan, Magenta, و Yellow المفروض يطلع black.
عمليا، النتيجة غالبا بتبقى dark brown بسبب عدم نقاء في الحبر.
كمان اللون الأسود بيتستخدم كتير جدا في المستندات المطبوعة.
عشان كده الطابعات بتضيف ink أسود منفصل اسمه K.
C = Cyan
M = Magenta
Y = Yellow
K = Black / Key بيحسن print quality.
بيقلل استهلاك الحبر.
بيخلي النصوص والظلال sharp أكتر.
definition
Color space defines how colors are represented numerically. الـ Color Space (مساحة اللون) دي طريقة رياضية عشان نمثل بيها الألوان بأرقام. خلينا نبص على مساحة الـ RGB بالتفصيل.
دي بتتمثل كأنها نقطة في مساحة ثلاثية الأبعاد (3D space)، وبنتخيلها في شكل مكعب اسمه RGB Color Cube. المحاور بتاعت المكعب ده هي الـ Red والـ Green والـ Blue.
قيم grayscale موجوده على diagonal جوه RGB Color Cube.
<br> <img src="https://lh4.googleusercontent.com/proxy/cUNIQDMN8MpzyR8iB21SnekYDN3FZwAMJMRbYtCw4lJWU3elGORvo1RlZL2s9pbPW3eGbMBOMHp82zDNBG0nVAYXUhf5u-nXdirk74msNbauEzje3255AyuzyrTgDzSCy6MyHvo" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> ### Important RGB Valuesdefinition
Frame buffer is a dedicated memory region used to store pixel data for the image currently displayed on the screen. أي صورة بتتعرض على الشاشة عبارة عن مجموعة من البيكسلات.
عشان الكمبيوتر يدير الكلام ده بكفاءة بيحجز حتت ميموري ورا بعضها (Contiguous block) مخصصة بس إنها تخزن بيانات الألوان بتاعت البيكسلات دي. الحتة دي من الميموري هي اللي بنسميها الـ Frame Buffer.
الـ graphics system يقدر يتحكم في لون كل pixel عن طريق read/write لمكانه في frame buffer. تاريخيا، Frame Buffer كان معناه memory اللي بتمثل frame المعروض حاليا على الشاشة مباشرة.
في الأنظمة الحديثة، المصطلح بقى أوسع.
دلوقتي، الكلمة دي بقت بتستخدم عشان توصف أي هيكل ميموري بيخزن بيانات صورة، حتى لو الصورة دي مش بتتعرض بشكل مباشر على الشاشة (زي الـ off-screen buffers والـ textures).
<br> <img src="https://www.cs.uic.edu/~jbell/CourseNotes/ComputerGraphics/diagrams/framedef2.gif" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Tip
مش فاهم الصوره معناها ايه بس الدكتور حاططها في الكتاب الـ hardware systems بتدعم أكتر من نوع frame buffer.
كل نوع بيحدد إزاي قيم الـ pixels بتتخزن في memory.
الأنظمة المختلفة بتدعم فورماتس كتير للـ Frame Buffer عشان التوافق مع القديم (backward compatibility) وعشان توازن بين استهلاك الميموري، الأداء، ودقة الألوان. Grayscale
Pseudo-color / Indexed color
True-color ده أبسط نوع عندنا، والناس بتغلط وتسميه "أبيض وأسود"، بس هو في الحقيقة تدرجات الرمادي.
في grayscale، كل pixel بيخزن intensity value يمثل درجة رمادي. أشهر طريقة لتطبيقه هي إن كل بيكسل ياخد 8 bits، وده بيدينا مستوى مختلف من الإضاءة. القيمة 0 بتمثل اللون الأسود (Black).
القيمة 255 بتمثل اللون الأبيض (White).
الأرقام اللي في النص دي درجات الرمادي (مثلاً 128 ده رمادي متوسط). البيكسلات بتتخزن في الميموري بنظام Row-major order، يعني بنمشي من الشمال لليمين في الصف، ولما يخلص ننزل للصف اللي تحته وهكذا.
الصف الواحد الكامل من البيكسلات بنسميه Scan-line.
<br> <img src="https://gtms03.alicdn.com/tfs/TB1k.AdQFXXXXasXVXXXXXXXXXX-2022-680.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الدكتور مش مركز عليها ولا حاطط امثله فمش لازم تفهم الفكره اوي احفظ القانون وخلاص بما إن الـ 8 بت بيساووا 1 بايت (1 Byte)، يبقى كل بيكسل في الصورة بياخد مساحة 1 بايت بالظبط في الميموري, عشان كده الحسبة سهله: لو عندك صورة عرضها بيكسل، وطولها بيكسل، يبقى إجمالي عدد البيكسلات هو حاصل ضربهم : Memory Size = W * H (in bytes) دلوقتي لو أنا عايز ألون بيكسل معين في الإحداثيات ، الكمبيوتر هيعرف مكانه إزاي؟
هنا بنحسب حاجة اسمها الـ Offset (اللي هو رمزه )، وده معناه البيكسل ده ترتيبه رقم كام من أول بايت في الميموري.
Memory Offset (A) of pixel (x, y) = x + W * y الإحداثي بيعبر عن رقم الصف (بنبدا من 0). عشان تنزل للصف رقم ، لازم تتخطى عدد من الصفوف الكاملة اللي فوقيك, بما إن كل صف حجمه بيكسل، يبقى إنت هتتخطى مسافة .
بعد ما نزلت للصف بتاعك، هتمشي جواه من الشمال لليمين مسافة عشان توصل للبيكسل بتاعك.
تجمع الاتنين على بعض يديك المكان بالظبط!
مثال لزياده الفهم (مش من الكتاب)
لو عندنا شاشة شغالة بنظام الـ Grayscale Frame Buffer، أبعادها: Width بيكسل
Height بيكسل وعايزين نحسب مساحة الصورة كلها، ومكان Pixel معين عند الإحداثيات :
1. الحجم الكلي (Memory Size):
بما إن كل بيكسل بياخد 1 Byte، يبقى هنضرب العرض في الطول: 2. مكان البيكسل في الميموري (Memory Offset):
عشان نعرف البيكسل ده قاعد في البايت رقم كام من بداية الميموري، بنطبق المعادلة دي: يعني البيكسل بتاعنا متخزن في البايت رقم 40,100.
interleaved scan-line storage زمان في الأنظمة القديمة، سرعة الميموري كانت بطيئة جدا مقارنة بسرعة تحديث الشاشة (Screen refresh rate)، وده كان بيعمل مشاكل مستفزة للعين زي الرعشة (Visible flickering) وإن الفريم يترسم نصه بس (Partially drawn frames).
الحل: بدل ما نرسم الصورة صف ورا صف بالترتيب، استخدموا نظام الـ Interleaved؛ يعني الشاشة ترسم الصفوف الفردية الأول (1، 3، 5) وبعدين ترجع ترسم الصفوف الزوجية (2، 4، 6).
التكنيك ده نجح إنه يداري عيوب الهاردوير الضعيف (Limited hardware)، بس في المقابل عقد الـ Graphics programming جدا على المبرمجين (كلهم بييجوا علي الغلبان). definition
Pseudo-color frame buffer stores an index per pixel instead of storing the full RGB color directly. اسمه كمان Indexed Color Frame Buffer.
الفكرة هنا إن البيكسل مش بيخزن اللون نفسه، لا ده بيخزن "رقم الإندكس" (من 0 لـ 255).
أكبر عيب هنا إنك مقدرش تعرض غير 256 لون بس في نفس الوقت على الشاشة، بالرغم من إن الـ RGB مساحته بتشيل أكتر من 16.7 مليون لون ( ).
الـ index ده بيشاور على لون في Color Lookup Table (CLUT) أو Palette.
Index → (R, G, B) بيستخدم لحد دلوقتي في: ا اLegacy systems (الأنظمة القديمة)
ا Backward compatibility modes (أوضاع التوافق)
ا Resource-constrained devices (الأجهزة اللي الميموري بتاعتها ضعيفة جداً) definition
True-color frame buffer stores the full RGB color value directly for each pixel. هنا إحنا مش محتاجين جدول ولا وجع دماغ، إحنا بنخزن اللون RGB على طول جوه البيكسل نفسه. التوزيعة الأشهر هي إننا ندي لكل لون 8 بت: Red: 8 bits
Green: 8 bits
Blue: 8 bits المجموع هيبقى 24 bits (يعني 3 بايت) لكل بيكسل، وعشان كده بنسميه 24-bit color. الميزة هنا إنك تقدر تعرض الـ 16.7 مليون لون في نفس الوقت، بس العيب إنه بيسحب ميموري قد الـ Pseudo-color تلات مرات، وبيحتاج Bandwidth أعلى. بسبب ان كل بيكسل بياخد 3 Bytes البيكسلات بتتخزن ورا بعضها في الميموري (Sequentially) بالشكل ده: البيكسل الأولاني (0, 0) هياخد اول تلاته بايتس من 0 لـ 2.
البيكسل التاني اللي جنبه (1, 0) هياخد البايتس من 3 لـ 5.
البيكسل التالت (2, 0) هياخد البايتس من 6 لـ 8.. وهكذا. بما إن البيكسل مبقاش بايت واحد زي زمان، القوانين بتاعتنا لازم تتعدل شوية عشان تضرب في 3. فظهر عندنا مصطلح جديد اسمه الـ Stride.
الـ Stride (S): ده بيمثل حجم الصف الواحد الكامل (Scan-line) بالبايت. يعني لو الصورة عرضها بيكسل، يبقى الصف ده هياخد مساحة قد إيه في الميموري؟ هنضرب العرض في 3 (لان البيسل بياخد 3 بايتس).
Stride (S) = 3 * W دلوقتي، لو عايزين نحسب مكان بيكسل معين في الميموري (Offset أو رمزه ) عند الإحداثيات ، هنستخدم المعادلة دي:
Memory Offset (A) of pixel (x, y) = 3x + S * y زي المره الي فاتت عشان تنزل للصف رقم ، لازم تتخطى كل الصفوف اللي فوقيك. بما إن الصف الواحد حجمه بايت، يبقى هتتخطى مسافة .
بعد ما وصلت للصف بتاعك، إنت عايز تمشي بيكسل ناحية اليمين. وبما إن كل بيكسل بياخد 3 بايت، يبقى هتمشي مسافة .
تجمع الاتنين على بعض، يديك رقم البايت بالظبط اللي بيبدأ عنده البيكسل ده. لو مش فاهم احفظ القانونين وخلاص الموضوع مش مستاهل مش كل الأنظمة بتشتغل بـ 24-bit RGB (ساعات بيتقال عليه RGB888) بس. في فورماتس تانية ظهرت لأسباب تقنية أو معمارية في الهاردوير. ا BGR Order (BGR888): بعض صيغ الصور زي الويندوز بيت ماب (BMP) بتخزن الألوان بالعكس (أزرق، أخضر، أحمر). ده حصل عشان معالجات الـ PC زمان كانت بتستخدم معمارية الـ Little-endian. الأنظمة الحديثة بتستخدم فورماتس تانية زي: ا RGB565 (16-bit): بيوفر ميموري، بيدي للأحمر 5 بت، والأخضر 6، والأزرق 5.
ا RGBA8888 (32-bit): ده بيضيف قناة رابعة اسمها Alpha channel (المسؤولة عن الشفافية)، وكل قناة بتاخد 8 بت (4 بايت للبيكسل). بصمجيات RGB565 = جودة أقل + ميموري أقل. RGB888 = لون كامل. BGR888 = RGB بالعكس. RGBA8888 = RGB + شفافية. بصمجيات مسائل المساحه : كده خلصنا المحاضره
اتكلمنا في المحاضره دي عن Color Representation في الـ Computer Graphics.
بدأنا بمفهوم اللون نفسه وإنه مش خاصية فيزيائية، ده ظاهرة إدراكية ناتجة عن تفاعل الضوء، الجسم، ونظرك.
بعد كده عرفنا Color Models: ا RGB (Additive): خلط ضوء — بيستخدم في الشاشات والبروجيكتور. مفيش ضوء = Black, كل الألوان كاملة = White.
ا CMY/CMYK (Subtractive): خلط حبر — بيستخدم في الطباعة. بيمتص wavelengths ويسيب غيرها ينعكس. وفي الآخر عرفنا Frame Buffer Formats: ا Grayscale: pixel واحد بايت (256 درجة رمادي)
ا Pseudo-color: pixel بيخزن index يشاور على لون في CLUT (أقصى 256 لون)
ا True-color (RGB888): pixel بيخزن RGB مباشرة — 3 بايت — 16.7 مليون لون
ا RGB565 / RGBA8888: فورماتس بديلة للتوفير أو إضافةAlpha channel ]]></description><link>computer-graphics/lectures/chapter-5-color-representation-in-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 5 - Color Representation in Computer Graphics.md</guid><pubDate>Mon, 01 Jun 2026 05:16:11 GMT</pubDate><enclosure url="https://pic2.zhimg.com/v2-7d7bdb13bae0106215d511a9e2199e05_1440w.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://pic2.zhimg.com/v2-7d7bdb13bae0106215d511a9e2199e05_1440w.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Mathematical Foundations of Computer Graphics - Lecture 2]]></title><description><![CDATA[مقدمة المحاضرة دي بتتكلم عن الأساس الرياضي في Computer Graphics، خصوصا الـ Vectors.
هنفرق بين Vector, Scalar, و Point، وهنشوف vector notation، components، magnitude، unit vectors، normalization، وازاي نجيب الزاوية بين two vectors باستخدام Dot Product. الـ Vectors من أهم الأدوات الرياضية في Computer Graphics.
بتستخدم عشان تمثل حاجات كتير في 2D و 3D زي: ا Positions
ا Directions
ا Distances
ا Transformations definition
Vector is a quantity that has both magnitude and direction. الـ Vector ليه حاجتين: Magnitude: الطول أو المقدار.
Direction: الاتجاه. بعكس الـ Scalar اللي ليه magnitude بس من غير direction.
هندسيا، الـ vector بيتعرض كـ سهم directed line segment: طول السهم بيمثل الـ magnitude (المقدار).
اتجاه السهم بيمثل الـ direction (الاتجاه). Note
Two vectors are equal if they have the same magnitude and direction, regardless of their position. يعني اتنين vectors ممكن يبقوا في مكانين مختلفين، بس يعتبروا equal لو ليهم نفس الطول ونفس الاتجاه.
definition
Scalar is a quantity fully described by a single value, meaning it has magnitude only and no direction. ده مجرد رقم بيوصف كمية ملهاش اتجاه. زي وزنك (70 كيلو)، أو درجة الحرارة (30 درجة). رقم بس من غير اتجاه. زي ما قولنا الـ Vectorده بقى عبارة عن رقم (مقدار) + اتجاه غالبا بنمثلها بسهم: طول السهم = magnitude
اتجاه السهم = direction بنحتاج notation يوضح إن الكمية دي vector مش scalar ولا point,ومن أشهر طرق كتابة vector:
definition
Point represents a fixed position in space and has no direction. دي مجرد مكان ثابت على الشاشة أو في الفراغ (زي إحداثيات و ). ملهاش لا طول ولا اتجاه. الـ points ممكن تتكتب بأكتر من طريقه منهم:
P = (x, y)
P = (x, y, z)
P = [ x ] [ y ] P = [ x ] [ y ] [ z ] الفرق بين نقطتين P1 و P2 بيطلع vector:
v = P2 - P1
v = (x2 - x1, y2 - y1) النقطة ممكن تعتبر نهاية لـ vector خارج من الـ نقطة الاصل, يعني لو عندك مثلا نقطة P(3,2)نقدر نتخيل إن فيه vector بدأ من الـ origin الي هو (0,0) ووصل للنقطة (3,2), ساعتها هيبقي اسمه Position Vector لأنه بيحدد مكان النقطة بالنسبة للأصل.
بصمجيات Point = مكان.
Vector = حركة أو اتجاه من مكان لمكان. في الـ 2D (ثنائي الأبعاد): المتجه بيتكون من نقطتين و ، وبيتكتب كده أو بشكل عمودي (مصفوفة).
في الـ 3D (ثلاثي الأبعاد): بيزيد عليه المحور التالت اللي هو العمق ، وبيتكتب كده .
لو عندك vector: ا v = (4, 3)
ده معناه: بيتحرك 4 units على x-axis.
و 3 units على y-axis. الـ والـ دول عبارة عن "ضل" المتجه على المحاور. بص على الرسمة اللي تحت .. هتلاقي السهم الأزرق مايل، فبنعمله إسقاط (ننزل منه خطوط متقطعة): ظله على الأرض (المحور الأفقي x) بنسميه .
ظله على الحيطة (المحور الرأسي y) بنسميه . <img style="background: white; padding: 10px; width: 600px; max-width: 100%;" src="https://d138zd1ktt9iqe.cloudfront.net/media/seo_landing_files/components-of-a-vector-in-the-coordinate-axes-1626994132.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> لو إنت معاك طول المتجه نفسه (اللي هو ) والزاوية بتاعته ()، تقدر تجيب مركباته بقوانين حساب المثلثات (الجا والجتا): عشان تجيب الـ : بتضرب الطول في جتا الزاوية. عشان تجيب الـ : بتضرب الطول في جا الزاوية. definition
Vector magnitude is the length of a vector, or how much of the quantity it represents. الـ Magnitude هو طول الـ vector.
مثال: vector بيعبر عن السرعه ممكن المقدار بتاعه يبقى 60 km/h.
الـ magnitude هو المسافة من الـ origin للنقطة اللي الـ vector بيحددها.
القوانين كلها مبني على فكرة قانون فيثاغورث، وعشان تحسب طول أي متجه (وبنرمز لطوله بالرمز أو ) بتجمع مربعات المركبات بتاعته وتحطهم تحت الجذر: في الـ 2D (بُعدين): لو المتجه ليه حركتين بالعرض والارتفاع : في الـ 3D (تلات أبعاد): لو زاد عليه العمق : القانون العام لأي أبعاد (n-Dimensions): مجموع مربعات كل المركبات اللي عندك تحت الجذر: الـ Normalization لما تحب تثبت اتجاه السهم بس تخلي طوله بيساوي 1 بالظبط (هنعرف يعني ايه كمان شوية). الـ Distance computation عشان تعرف البُعد بين أي نقطتين في اللعبة أو البرنامج. الـLighting &amp; Shading calculations عشان دقة النور بتعتمد على المسافة بين مصدر الضوء والمجسم. Note الـ Magnitude ممكن تتكتب بالشكل |v| أو ||v||. في المحاضرة هنستخدم |v|. <br> <img src="https://wumbo.net/formulas/magnitude-of-vector/magnitude-of-vector-main-dark@2x_hu_a88aab7fa2f14de6.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;"> لو عندك متجه جواه البيانات دي جاهزة: و .
عشان تجيب طوله، هتربعهم وتجمعهم تحت الجذر: ده معناه إن طول السهم ده في الفراغ بيساوي 5 وحدات.
<br> <img src="https://blogmedia.testbook.com/blog/wp-content/uploads/2021/07/magnitude-bd06716c.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;"> لو عندك نقطة البداية A(1,2) ونقطة النهاية B(4,6) وعايز تحسب طول المتجه AB الواصل بينهم:
الخطوة 1 (هات المركبات): اطرح إحداثيات النهاية ناقص البداية عشان تعرف السهم مشي قد إيه في الـ X والـ Y: فكده المتجه بتاعنا بقى عبارة عن (3, 4).
الخطوة 2 (احسب الطول): طبق القانون العادي على المركبات الجديدة: ده معناه: ان المسافة الحقيقية بين النقطةA والنقطة B هي 5 وحدات. في الـ 2D كنا بنحتاج زاوية واحدة عشان نفك المتجه لـ و عن طريق الـ والـ . أما في الـ 3D، الموضوع بيكبر معانا ومبقاش ينفع زاوية واحدة لأن السهم بيبقى طاير في الفراغ! فبنقيس الزاوية اللي بيعملها المتجه مع كل محور من المحاور التلاتة (). بنسمي الزوايا دي () (الفا , بيتا , جاما ) وبنستخدم حاجة اسمها Directional Cosines (جيوب تمام الاتجاه): مركبة محور العرض (): مركبة محور الارتفاع (): مركبة محور العمق (): مجموع مربعات جيب تمام الزوايا دي لازم يساوي 1 بالظبط: العلاقة دي بتأكد إن اتجاه الـ vector متعرف صح في 3D space.
لو عايز تفهم ليه فهيا ليها اثبات رياضي ممكن تبحث عنه.
definition
Unit Vector is a vector with magnitude equal to 1, and it represents direction only. الـ Unit Vector (متجه الوحدة): ده سهم طوله بيساوي 1 بالظبط، ووظيفته الوحيدة إنه يشاور على الاتجاه ومبيعبرش عن مسافة أو مقدار. بنرمز له بـ (v-hat).
definition
Normalization is the process of converting a vector into a unit vector. الـ Normalization (التوحيد): دي العملية اللي بنحول بيها أي متجه عادي لمتجه وحدة (Unit Vector) ,بنعملها إزاي؟ بنقسم المتجه على طوله الحقيقي: بنحتاج الحركة دي في إيه في الجرافيكس؟ الإضاءة (Directional Lighting): لما نحسب اتجاه شعاع النور، إحنا مش محتاجين نعرف طول شعاع النور قد إيه، إحنا محتاجين اتجاهه بس عشان نحسب الظل.
اتجاه الكاميرا (Camera Orientation): عشان نحدد الكاميرا بتبص في أنهي اتجاه بالظبط في اللعبة.
الـ (Scaling): لما تحب تحرك أو تكبر مجسم في اتجاه معين من غير ما تبوظ أبعاده. مثال لزياده الفهم (اختياري)
تخيل إنك واقف في مكانك وعايز تشاور لواحد صاحبك على مستشفى بعيده عنكم بـ 10 كيلومتر في اتجاه معين. المتجه الحقيقي اللي بيوصل للمستشفى طوله كبير جدا (10 كم مثلا).
هل وأنت بتشاور لصاحبك محتاج تمد إيدك لمسافة 10 كيلومتر عشان يفهم؟ أكيد لأ
إنت كل اللي بتعمله إنك بتفرد دراعك بطول 1 متر بالظبط (اكيد دراعك مش 1 متر بس بقرب المثال شوية) وتشاور في اتجاه المستشفى. صاحبك هيبص على اتجاه دراعك (اللي افترضنا طوله 1 متر) ويفهم الاتجاه. الـ Normalization هو بالظبط اللي دراعك عمله؛ أخدنا المتجه الكبير اللي رايح للمستشفى وقسمناه على مسافته (10 كم)، فصغرناه وخليناه سهم صغير طوله 1 متر بس بيشاور في نفس الاتجاه بالظبط، عشان الكمبيوتر يعرف المكان من غير ما يتلخبط برقم الـ 10 كم او يحسب حسابات زياده ومش ضرورية. الـ Dot Product بنستخدمه علشان نعرف الزاوية بين متجهين.
الكمبيوتر في الأصل أعمى، مبيشوفش الأسهم مايلة إزاي، لكن بيحسب الزاوية (عن طريق الـ Cosine بتاعها).
لو بتعمل لعبه وعندك مشكله، عندنا الحارس واللاعب, وعايزين نعرف هل اللاعب ده في نطاق رؤية الحارس ولا الحارس مش شايفه, هنعرف منين الزاوية الي الحارس بيبص ليها ؟
<br> <img src="https://cdn.wolfire.com/blog/linear/sneak2.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;"> عشان نحل المشكله دي هنستخدم الـ dot product. القانون ده بنستخدمه عشان نطلع رقم عشري بيعرفنا لو السهمين في نفس الاتجاه ولا عموديين على بعض ولا عكس بعض. هنا إنت أخدت الناتج بتاع الخطوة الأولى عشان نجيب الزاوية نفسها (). ا |v|: ده الـ magnitude بتاع vector v.
ا |w|: ده الـmagnitude بتاع vector w.
ا θ: الزاوية بين v و w.
الزاوية بتتقاس غالبا بين 0° و 180°.
الدكتور مشرحش امثله علي النقطه دي فهكتفي بالي في الكتاب
نماذج التظليل (Shading Models): بنستخدم الـ Dot Product علشان نعرف الضوء واقع على السطح بزاوية ايه، وبالتالي نحدد السطح منور ولا غامق.
اختبارات الرؤية (Visibility tests): كارت الشاشة بيعرف هل الـ object ده في مجال للكاميرا ولا لا؟ لو لا الكارت مبيرسموش أصلا عشان يوفر في الرامات ويزود الـ FPS
الـSurface Orientation and Normal Evaluation: بنحدد اتجاه السطح والـ Normal Vector بتاعه، وده مهم في الإضاءة والانعكاسات والظلال.
كده خلصنا المحاضره
اتكلمنا في المحاضره دي عن الأساس الرياضي للـ Computer Graphics وعرفنا الفرق بين Scalar (رقم بس من غير اتجاه)، Point (مكان ثابت في الفراغ)، و Vector (ليه Magnitude و Direction).
وعرفنا إزاي نحسب Vector Components في 2D و 3D باستخدام الـ directional cosines، وإن الـ Magnitude بنحسبها بالقانون |v| = sqrt(x² + y² + z²).
واتكلمنا عن Unit Vectors - اللي طولها 1 وبتستخدم عشان تعبر عن الاتجاه بس، وإن الـ Normalization هي عملية تحويل أي Vector لـ Unit Vector عن طريق قسمته على Magnitude بتاعه.
وفي الآخر عرفنا الـ Dot Product وازاي بنستخدمه عشان نحسب الزاوية بين Vectors، وده بيستخدم في مجالات زي الإضاءة Shading Models واختبارات الرؤية Visibility Tests.
]]></description><link>computer-graphics/lectures/chapter-2-mathematical-foundations-of-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 2 - Mathematical Foundations of Computer Graphics.md</guid><pubDate>Mon, 01 Jun 2026 05:06:41 GMT</pubDate><enclosure url="https://d138zd1ktt9iqe.cloudfront.net/media/seo_landing_files/components-of-a-vector-in-the-coordinate-axes-1626994132.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://d138zd1ktt9iqe.cloudfront.net/media/seo_landing_files/components-of-a-vector-in-the-coordinate-axes-1626994132.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Graphics Primitives - Lecture 3]]></title><description><![CDATA[مقدمة الشابتر ده بيتكلم عن الـ Graphics Primitives (الأشكال الأساسية).
هنعرف المفاهيم الهندسية الأساسية زي النقطة والخط والسطح، وبعدين هندخل في تفاصيل رسم الأشكال الأساسية زي الخطوط، الدواير، المضلعات، والمنحنيات في Computer Graphics. قبل ما ندرس ازاي الأشكال بتترسم في الـ Computer Graphics، لازم نفهم المفاهيم الهندسية الأساسية اللي بتوصف الأشكال دي في الـ 2D والـ 3D.
definition
A vertex (plural: vertices), also called a corner, is a point where two or more line segments meet. الـ Vertex (أو الرأس/الزاوية) هي النقطة اللي بيتقابل فيها خطين أو أكتر.
هي اللي بتحدد شكل و هيكل الاشكال الهندسيه.
في الـ 2D graphics: الـ vertices بتحدد زوايا المضلع (polygon corners): <img src="https://www.mathsisfun.com/geometry/images/pentagon-vertices.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 300px; max-width: 100%;"> في الـ 3D graphics: الـ vertices بتحدد زوايا المجسمات (polyhedra corners):
<br> <img src="https://www.mathsisfun.com/geometry/images/vertex.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 300px; max-width: 100%;"> definition
An edge is a line segment connecting two vertices. الـ Edge (أو الضلع) هو الخط اللي بيوصل بين اتنين vertices. <br>
في الـ 2D polygon: الـ edges بتمثل الحدود (boundary) بتاعة الشكل. <img src="https://www.mathsisfun.com/geometry/images/pentagon-edges.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 200px; max-width: 100%;"> <br>
في الـ 3D polyhedron: الـ edge هو خط التقاطع بين وجهين (intersection of two faces). <img src="https://www.mathsisfun.com/geometry/images/edges.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 200px; max-width: 100%;"> definition
A face is one of the flat surfaces of a solid object. الـ Face (أو الوجه) هو السطح المسطح بتاع المجسم.
كل face بيبقى متحوط بـ edges و vertices.
في الـ Computer Graphics، كلمة face مرتبطة أكتر بالـ 3D objects.
عدد الـ faces بيساعدنا نصنف المجسمات.
مثال: الـ tetrahedron (الهرم الرباعي) ليه 4 أوجه مثلثة.
<br> <img src="https://www.mathsisfun.com/geometry/images/faces.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 200px; max-width: 100%;"> كلمة Side شائعة في الـ 2D geometry ( side للمثلث أو للمستطيل).
لكن في الـ 3D graphics، استخدام كلمة "side" مش دقيق وممكن يعمل لغبطة ambiguous.
ممكن حد يقصد بيها edge، وممكن حد تاني يقصد بيها face.
عشان الدقة، في الـ 3D بنستخدم Edge أو Face بدل side.
<br> <img src="https://www.mathsisfun.com/geometry/images/side.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> <br> <img src="https://www.mathsisfun.com/geometry/images/box-real-fve.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> definition
Graphics Primitives (or output primitives) are the fundamental geometric elements in computer graphics. الـ Graphics Primitives هي حجر الاساس اللي بنستخدمه عشان نركب صور وأشكال معقدة.
أهم الـ primitives دي: Points, Lines, Circles, Ellipses, Polygons, Curves, Text.
definition
A point is the most basic geometric primitive. It represents a specific location in 2D or 3D space. الـ Point هي أبسط وحدة.
ملهاش لا حجم، ولا طول، ولا مساحة.
مجرد مكان location في الـ space، وهي الأساس لباقي الأشكال.
طبعا عارفين من قبل كده انها بتتمثل بالطريقة دي:
2D:(x,y)
3D:(x,y,z)
definition
A line in computer graphics is drawn as a finite line segment between two endpoints. الكمبيوتر مش بيعرف يرسم خط ملوش نهاية infinite، عشان كده دايما بيرسم قطعة مستقيمة line segment بين نقطتين ليها بداية ونهاية. Slope-intercept form: هنا الـ هو "الميل" (Slope)، والـ هي النقطة اللي الخط بيقطع فيها محور الصادات (-intercept). Parametric form: ا P0: نقطة البداية (في الـ 2D بتبقى (x0, y0) وفي الـ 3D بتبقى (x0, y0,z0)) ا P1: نقطة النهاية (في الـ 2D بتبقى (x1, y1)وفي الـ 3D بتبقى (x1, y1,z1)) ا P1 - P0: الـ direction vector (متجه الاتجاه) ا t: المتغير scalar parameter اللي بيحدد مكان النقطة على الخط. تفسير قيم t اt = 0: إنت واقف عند P0
ا 0 &lt; t &lt; ا 1: إنت في حتة بين P0 و P1
ا t = 1: إنت وصلت لـ P1
ا t &lt; 0: إنت قبل الـ P0
ا t &gt; 1: إنت عديت الـ P1 ا t(P1 - P0): الحتة دي بتعمل (Scaling) للمتجه. يعني بتطوله أو تقصره حسب قيمة . لو مثلاً ، يبقى إحنا كده جبنا نص المسافة بالظبط. ا P0 + t(P1 - P0): دي الخلاصة، بنجيب المتجه بعد ما حددنا طوله بالـ ونجمعه على نقطة البداية، فيدينا النقطة الجديدة اللي هنرسمها على الخط. ا DDA (Digital Differential Analyzer): Incrementally computes pixel position along the line. طريقة بتحسب أماكن البيكسلز على طول الخط خطوة بخطوة ورا بعض. ا خوارزمية (Bresenham's Line Algorithm): An efficient integer-based method for rasterizing lines. دي طريقة أذكى وأسرع بكتير، لأنها بتستخدم الأرقام الصحيحة بس (Integer-based) عشان ترسم الخطوط من غير كسور معقدة. تحديد حواف الأشكال (Outlining shapes).
توصيل النقط ببعض في الرسومات البيانية أو المخططات (Connecting nodes).
محاكاة المسارات في برامج الفيزيا (زي مثلاً مسار كورة بتترمي).
definition
A circle is the set of points at a fixed distance r (radius) from a center (xc, yc). الدايرة هي مجموعة نقط بتبعد مسافة ثابتة (نصف القطر r) عن المركز. Implicit equation: هنا الـ هو المركز بتاع الدائرة، والـ هو نصف القطر (Radius).
Parametric form: ودي بتجيبلك نقطة نقطة على محيط الدائرة باستخدام الزوايا: , هنا الـ (ثيتا) هي الزاوية، وكل ما بتغير الزاوية (من 0 لـ 360 درجة)، المعادلتين دول بيحسبولك مكان النقطة الجديدة على حدود الدائرة. ا Circle equation method: Directly uses the implicit equation (inefficient due to floating-point calculation) الطريقة دي بتستخدم المعادلة الرياضية بشكل مباشر، بس يعيبها إنها مش عملية وبطيئة (inefficient) عشان بتعتمد على حسابات الأرقام العشرية والكسور (floating-point calculations). ا Midpoint Circle Algorithm: Efficient inter-based method exploiting symmetry. دي طريقة Efficient لأنها بتعتمد على الأرقام الصحيحة بس (integer-based method)، وبتستغل التماثل (symmetry) بتاع الدائرة عشان ترسمها أسرع. ا Bresenham's Circle Algorithm: Optimized version of the midpoint algorithm دي تعتبر نسخة متطورة ومتحسنة من خوارزمية Midpoint اللي لسه قايلين عليها. الأيقونات، الزراير، وأي circular UI elements.
العجل، المدارات orbits، والحركة الدائرية في الـ animation.
الكلام الي جاي لحد الـ text ملغي حسب كلام زمايلنا بس هشرحه احتياطيdefinition
An ellipse is a stretched/compressed circle, defined as the locus of points whose sum of distances from two foci is constant. عبارة عن دائرة بس ممطوطة (stretched) أو مضغوطة (compressed).
بالتعريف الرياضي: هو مجموعة من النقط، لو جمعت المسافة بين أي نقطة فيهم وبين نقطتين ثابتين (بنسميهم بؤرتين أو focal points) هيطلعلك دايماً رقم ثابت. Implicit equation: هنا الـ هو مركز الشكل. والـ والـ هما أنصاف الأقطار للمحاور (واحد اسمه المحور الأكبر semi-major والتاني المحور الأصغر semi-minor). Parametric form: بتترسم بطرق شبه رسم الدايرة بالظبط، بالاعتماد على التماثل symmetry والـ incremental methods. العدسات lenses والمدارات البيضاوية.
اللوجوهات والتصميمات اللي فيها حواف مدورة.
definition
A polygon is a closed, non-self-intersecting shape formed by connecting line segments (edges) through vertices. المضلع هو شكل مقفول متكون من خطوط متوصلة ببعضها عن طريق vertices ومفيش خطوط بتقطع بعضها. Convex polygon (مضلع محدب): كل الزوايا الداخلية أقل من 180 درجة.
الـ Algorithms بتبقى أسرع وأسهل بكتير مع النوع ده. Concave polygon (مضلع مقعر): فيه على الأقل زاوية داخلية واحدة أكبر من 180 درجة. <br> <img src="https://www.mathsisfun.com/geometry/images/concave-convex.svg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> في الكمبيوتر الجرافيكس، الخوارزميات بتحب يتعاملوا مع المضلعات المحدبة (Convex) أكتر لأنها أسهل وأسرع في الحسابات من المضلعات المقعرة. بيتمثل بلستة مترتبة عباره عن نقط Ordered list of vertices:
[(x1, y1), (x2, y2), ...]
ممكن يترسم فاضي من جوه outlined أو متلون filled. ا (Scanline Fill Algorithm): Used to fill polygons with color. دي طريقة بتستخدم عشان نملى المضلعات بالألوان سطر بسطر. ا (Boundary Fill Algorithm): Starts at a seed point and fills until it reaches the boundary. it is mainly used for simple , closed shapes. دي بتبدأ من نقطة معينة جوه الشكل (اسمها seed point) وتفضل تلون لحد ما تخبط في حدود الشكل من بره. الطريقة دي بنستخدمها مع الأشكال البسيطة المقفولة. الخرايط Maps والمناطق 2D.
الأسطح Surfaces في الـ 3D modeling.
أشكال التضاريس والمباني.
definition
A curve is a smooth continuous geometric object that may not be straight. المنحنى هو شكل هندسي ناعم ومستمر بس مش خط مستقيم. Bezier curves: المنحنى بيبدأ من أول نقطة تحكم، وبينتهي عند اخر نقطة تحكم، لكن مش شرط إنه يعدي على النقط اللي في النص. النقط اللي في النص دي وظيفتها إنها تشد او تخلي المنحنى ييجي ناحيتها عشان تديله شكله، يعني أماكن النقط دي هي اللي بتأثر على شكل المنحنى النهائي. درجة المنحنى (Bezier degree) بتتحدد بعدد النقط: نقطتين (linear Bezier): هيطلع منحنى خطي (يعني خط مستقيم).
3 نقط (quadratic Bezier): هيطلعلك منحنى تربيعي.
4 نقط (cubic Bezier): هيطلعلك منحنى تكعيبي، وده أكتر نوع مستخدم. Splines: منحنيات متقطعة بس متوصلة بنعومة Piecewise curves.
بتتمثل عن طريق حاجة اسمها knot vectors و basis functions. منحنيات بيزيير (Bezier Curve): المعادلة بتاعتها شكلها يخض بس فكرتها بسيطة: الـ دي هي نقط التحكم اللي اتكلمنا عليها من شوية، والـ دي حاجة في الرياضة اسمها متعددات حدود بيرنشتاين (Bernstein polynomials)، ودي الدالة اللي بتحسب قوة تأثير كل نقطة تحكم على المنحنى عشان تطلعه ناعم. منحنيات الـ Splines: الكمبيوتر بيعرفها عن طريق حاجة اسمها "متجهات العقد" (knot vectors) ودوال أساسية (basis functions). دي ببساطة الأدوات الرياضية اللي بتخلي حتت المنحنى تلزق في بعضها من غير ما يبان أي تكسير. المسارات الناعمة Smooth paths.
الأشكال العضوية Organic shapes في الرسم والأنيميشن.
definition
Text is a graphical primitive used to display alphanumeric characters and symbols on screen. النص هو primitive زيه زي أي شكل بنستخدمه عشان نعرض الحروف والرموز على الشاشة. أشكال الخطوط (Font styles): (زي serif, sans-serif, monospace).
الرموز (Glyphs): شكل الحرف نفسه بيتخزن في الكمبيوتر بطريقتين: يا إما Outlines (فيكتور): يعني متخزن كمعادلات وحدود خارجية، وده مهما كبرته مش بيبكسل.
أو Bitmaps: متخزن كصورة مكونة من بيكسلات (مربعات صغيرة). إزاي بنرسمه على الشاشة ؟ (Rendering) عملية الـ Rasterization: خدنا العملية دي قبل كده ولو مش فاكر فدي العملية اللي بنحول فيها شكل الحرف (اللي متخزن كمعادلات) لبيكسلات حقيقية عشان الشاشة تقدر تعرضه.
تنعيم الحواف (Anti-aliasing): لما بنحول الحرف لبيكسلات ( حواف الحرف بتبقى jagged. التقنية دي بتعمل تنعيم للحواف دي عشان الحرف يبان ناعم وسلس. الـ Labels والـ captions.
النصوص الديناميكية في الألعاب والبرامج.
كده خلصنا المحاضره
اتكلمنا في المحاضره دي عن Graphics Primitives (الأشكال الأساسية في الـ Computer Graphics) وعرفنا المفاهيم الهندسية الأساسية: Vertex (النقطة اللي بتتقابل فيها الخطوط)، Edge (الخط اللي بيوصل بين Vertices)، Face (السطح المسطح للمجسم)، و Side (مصطلح 2D مش دقيق في 3D).
وبعد كده استعرضنا كل Primitive: Point - أبسط وحدة، مجرد مكان في الفراغ
Line - قطعة مستقيمة بين نقطتين، وليها طرق تمثيل (Slope-Intercept و Parametric)
Circle - مجموعة نقط على مسافة ثابتة r من المركز
Ellipse - دائرة ممطوطة
Polygon - شكل مقفول من خطوط (Convex و Concave)
Curve - منحنيات ناعمة (Bezier و Splines)
Text - حروف ورموز (Fonts و Glyphs) وعرفنا خوارزميات الرسم لكل شكل زي DDA و Bresenham للخطوط، و Midpoint و Bresenham للدواير، و Scanline و Boundary Fill للمضلعات.
]]></description><link>computer-graphics/lectures/chapter-3-graphics-primitives.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 3 - Graphics Primitives.md</guid><pubDate>Sun, 31 May 2026 22:09:13 GMT</pubDate><enclosure url="https://www.mathsisfun.com/geometry/images/pentagon-vertices.svg" length="0" type="image/svg+xml"/><content:encoded>&lt;figure&gt;&lt;img src="https://www.mathsisfun.com/geometry/images/pentagon-vertices.svg"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Foundations of Computer Graphics - Lecture 1 [Part 4]]]></title><description><![CDATA[مقدمة هنكمل الشابتر الاول, في الجزء ده هنتكلم عن الألوان في الـ Computer Graphics، وإزاي الكمبيوتر بيخزن ويعرض الألوان باستخدام أنظمة مختلفة زي RGB وCMYK. كمان هنتعرف على مفاهيم مهمة زي Color Depth وAlpha Channel وتأثيرهم على جودة الصور والشفافية وحجم البيانات. definition
Color Model is a mathematical framework used to represent colors as numerical values. الـ color models بتتقسم لنوعين أساسيين: Additive Color Models
Subtractive Color Models التصنيف ده بيعتمد على هل اللون بيتكون بإضافة الضوء ولا بامتصاص الضوء. الـ Additive Color Models بتكون الألوان عن طريق دمج مصادر ضوء, كل ما تزود الاضاءه، اللون الناتج يبقى أفتح, ولما الاضاءه تزيد للاخر، الناتج يبقى white, لما مفيش ضوء، الناتج يبقى black.
بتستخدم في الأجهزة الالكترونية اللي بتطلع ضوء زي: Computer monitors
Televisions
Mobile screens
Projectors الـ RGB هو أهم additive color model في computer displays.
اللون بيتكون من intensities مختلفة من الـ : Red والـ Green والـ Blue
لما التلاتة يبقوا maximum، اللون يبقى white. <img src="https://cdn.prod.website-files.com/61f9082050036c6c4b4899f8/69a0485fb777604233e1f35c_a-1693558643138-2x.jpeg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> الـ Subtractive Color Models بتستخدم في الطباعة.
بتدمج pigments أو inks عشان تمتص اطوال موجية معينة من الضوء.
,ئأشهر model هنا هو CMYK: Cyan
Magenta
Yellow
Black / Key Why Does CMYK Use K? الـ K معناها Key , المشكله اننا لو ضفنا الـ Cyan , Magenta , Yellow هيديلنا بني غامق فـ بنستخدم الـ key عشان نعرف ننتج اللون الاسود <br> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/SubtractiveColor.svg/500px-SubtractiveColor.svg.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 300px; max-width: 100%;">
definition
Color Depth is the number of bits used to represent the color of a single pixel. كل بيكسل على الشاشة محتاج مساحة في الميموري (بالـ Bit) عشان يخزن بيانات لونه. كل ما تزود مساحة الـ Bits للبيكسل الواحد، كل ما تقدر تطلع تدرجات ألوان أكتر بكتير.
يعني 24-bit color بيمثل تقريبا:
2^24 = 16,777,216 colors // More bits per pixel = more possible colors Bit Depth
Bits Per Pixel (bpp)
Bits Per Channel (bpc) <br> <img src="https://global.samsungdisplay.com/wp-content/uploads/2021/05/8Color-depth.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
definition
Color Palette is a predefined table containing a limited set of colors available for an image or display. بدل ما نخزن اللون كامل لكل pixel، ممكن نخزن index بس.
الـ index ده بيشاور على لون موجود في palette.
الطريقة دي بتقلل memory usage و file size.
كانت مهمة جدا في أنظمة الكمبيوتر القديمة, بس لسه بتستخدم ساعات لما memory efficiency تبقى مهمة.
definition
Indexed Color is a color representation method that uses a color palette. في Indexed Color: كل pixel بيخزن index value.
الـ index بيشاور على لون داخل الـ palette.
قيم الألوان الحقيقية بتتخزن مرة واحدة في الـ palette. بيستخدم غالبا مع color depth محدود زي: 1-bit
4-bit
<br>8-bit <img style="background: white; padding: 10px; width: 150px; max-width: 100%;" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Indexed_palette.svg/250px-Indexed_palette.svg.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> التلاتة بيستخدموا RGB Color Model، بس بيختلفوا في عدد color combinations ووجود alpha channel. ا Higher color depth محتاج memory أكتر و processing power أكتر.
بس أغلب modern graphics hardware بتدعمه.
definition
Alpha Channel is an additional component added to RGB to represent transparency. الـ Alpha Channel بيتحكم في درجة شفافية أو عتامة كل pixel.
القيم الأقل معناها transparency (شفافيه) أعلى.
القيم الأعلى معناها opacity (وضوح) أعلى.
الـ 32-bit color بيستخدم alpha channel مع RGB عشان يدعم: ا Transparency
ا Shadows
ا Smooth blending
<br>ا Advanced effects <img src="https://www.imageen.com/screenshots/iehelp/AlphaChannel2.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 300px; max-width: 100%;"> ألوان واقعية أكتر.
الـ gradients أنعم.
دعم أحسن للـ shadows والـ transparency والـ complex visual effects.
ممكن يقلل eye strain أثناء مشاهدة الصور والفيديوهات. استهلاك أكبر للـ memory.
محتاج processing power أكتر.
ممكن يقلل FPS في الألعاب حسب graphics card ومتطلبات اللعبة.
definition
True Color is any color setting using at least 24 bits per pixel, capable of representing about 16.7 million colors. الـ True Color بيقدر يمثل الصور والـ complex graphics بدقة عالية في RGB Color Space.
غالبا بيتقسم لـ 256 shade لكل channel: Red
Green
Blue بيدي display ناعم ودقيق للألوان.
عدد الألوان فيه أكبر من اللي العين البشرية تقدر تميزه بدقة في حالات كتير.
كده خلصنا الجزء الرابع
اتكلمنا في المحاضره دي عن Color Models وعرفنا إن فيه نوعين: Additive (زي RGB و HSV و HSL - بيستخدم في الشاشات بإضافة الضوء) و Subtractive (زي CMYK - بيستخدم في الطباعة بامتصاص الضوء).
وعرفنا الـ Color Depth - عدد البتات المستخدمة لكل Pixel، وكل ما زادت كل ما الألوان كانت أكتر ودقة أعلى (زي 24-bit True Color بـ 16.7 مليون لون).
واتكلمنا عن Indexed Color و Color Palette - إن كل Pixel بيخزن Index بدل اللون الكامل عشان توفير memory، وده كان مهم في الأنظمة القديمة.
وفي الآخر عرفنا الـ Alpha Channel - القناة الإضافية للشفافية في 32-bit color، و True Color (24-bit) وقارنا بين 16-bit و 24-bit و 32-bit.
]]></description><link>computer-graphics/lectures/chapter-1-[part-4]-foundations-of-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 1 - [Part 4] Foundations of Computer Graphics.md</guid><pubDate>Sun, 31 May 2026 21:54:36 GMT</pubDate><enclosure url="https://cdn.prod.website-files.com/61f9082050036c6c4b4899f8/69a0485fb777604233e1f35c_a-1693558643138-2x.jpeg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src="https://cdn.prod.website-files.com/61f9082050036c6c4b4899f8/69a0485fb777604233e1f35c_a-1693558643138-2x.jpeg"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Fundamental Drawing Algorithms in Computer Graphics - Chapter 4 - [Part 2]]]></title><description><![CDATA[مقدمة ده الجزء التاني من الشابتر، وهنركز فيه على Circle Drawing Algorithms.
هنستعرض أكتر من طريقة لرسم الدواير: من المعادلة المباشرة (Circle Equation) اللي بسيطة بس فيها مشاكل، للخوارزميات الأذكى واللي مش محتاجة كسور أو جذور زي Midpoint و Bresenham.
هنفهم كمان مفهوم Eight-Way Symmetry اللي بيخلينا نوفر 7 أضعاف الحسابات.
في الآخر هيكون عندنا مقارنة كاملة بين كل الخوارزميات عشان تعرف تختار الأنسب. بما إن الشاشات بتاعتنا Raster displays (عباره عن Grid يعني)، فإحنا محتاجين خوارزميات تقرب الشكل الدائري المتصل ده لمجموعة بيكسلات منفصلة (Discrete pixels) بكفاءة عالية.
عشان الدائرة شكل متماثل جدا، معظم الخوارزميات بتستغل حاجة اسمها الـ Eight-way symmetry (التماثل الثماني).
يعني بدل ما نحسب محيط الدائرة كله، إحنا بنحسب تمن واحد بس (1/8 من الدائرة)، وبنعكس النقط دي على باقي الأثمان عشان نقلل الحسابات.
definition
A circle is specified by its center (xc, yc) and radius r. أبسط طريقة نرسم بيها الدائرة هي إننا نستخدم معادلتها الرياضية. الدائرة في مستوى الإحداثيات بتتعرف بحاجتين: نقطة المركز: (Xc, Yc)
نصف القطر: r معادلة الدائرة القياسية: الدائرة هي كل النقط اللي بعدها عن المركز ثابت، والمسافة الثابتة دي اسمها Radius. الفكرة هنا إننا نمشي خطوة خطوة على محور السينات بداية من أقصى الشمال لحد أقصى اليمين، وفي كل خطوة نحسب قيمة الصادات اللي تقابلها. نقطة البداية على الـ هتبقى: نقطة النهاية على الـ هتبقى: بنمشي بـ Unit increments (يعني بنزود الـ بمقدار 1 في كل خطوة). إشارة الـ دي بتطلعلي قيمتين للـ لكل قيمة (قيمة موجبة ترسم الـ Upper semicircle وقيمة سالبة ترسم الـ Lower semicircle)، عشان كده الدائرة بتترسم كاملة فوق وتحت. السؤال هيديلك المركز (xc, yc) ونصف القطر r.
بنعمل Loop لكل قيمة X من أول Xc - r لحد Xc + r.
احسب: ارسم النقطتين الناتجين.
ممكن تستخدم symmetry عشان تقلل الحسابات. حالة خاصة وبسيطة جداً، لو كان مركز الدائرة هو نقطة الأصل (0, 0). ساعتها مش محتاجين نطرح Xc ولا Yc، والمعادلة بتتبسط وتبقى شكلها كده: سهلة في الفهم والتنفيذ. بتستخدم Floating-point operations (عمليات الكسور العشرية)، ودي تقيلة جداً وبطيئة على البروسيسور.
ا Not suitable for real-time rendering: مينفعش نستخدمها في ألعاب أو حاجات محتاجة فريمات سريعة لانها بطيئة. الحسابات بتاعتها مش Efficient خالص، لأنها بتعتمد على عمليات الضرب (عشان نجيب التربيع) وعملية الـ Square root (الجذر التربيعي) اللي بنحاول نتجنبها على قد ما نقدر في الجرافيكس لأنها بطيئة جداً.
ا Large gaps: بتعمل فراغات كبيرة في الرسمة لما يكون ميل الخط قريب من الرأسي (ودي هنشرحها بالتفصيل في جزء الـ Output) عايزين نرسم دائرة مركزها (0,0) ونصف قطرها r = 5 باستخدام معادلة الدائرة الأساسية (Direct Equation). أول حاجة بنعملها إننا بنجهز المعادلة بتاعتنا بناء على المركز ونصف القطر اللي معانا، عشان نستنتج قيمة الـ y.
المعادلة القياسية للدايرة: بما إن المركز بتاعنا هو نقطة الأصل (0,0) (Special Case)، المعادلة هتتبسط وتبقى: حساب الـ y: هنودي الـ y في طرف لوحدها عشان دي اللي هنحسبها لكل بيكسل: تحديد اتجاه اللوب (Condition): هنعمل Loop على الـ x بداية من أقصى الشمال () لحد أقصى اليمين (). بس عشان التبسيط في الجدول بتاعنا، خلينا نمشي على الربع الأول بس (من 0 لـ 5) ونشوف النقط الموجبة. هنا بقى هنمسك قيم الـ x من أول 0 لحد 5، وفي كل مرة نعوض في المعادلة بتاعتنا عشان نجيب قيمة الـ y. وطبعا عشان دالة الـ Square root بتطلع أرقام عشرية (Floating-point)، لازم نعمل Rounding (نقرب) في الخر عشان نجيب الـ Pixel الصح. Final Pixels (الربع اليمين اللي فوق):(0,5), (1,5), (2,5), (3,4), (4,3), (5,0)<img border="0" alt="Chat GPT Image May 29 2026 07 30 56 PM" src="https://i.ibb.co/PzjxQFGn/Chat-GPT-Image-May-29-2026-07-30-56-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">implementation Code (عشان تجرب) import math
import pygame
import sys def draw_circle(screen, center_x, center_y, radius): for x in range(center_x - radius, center_x + radius + 1): dx = x - center_x square_term = radius**2 - dx**2 if square_term &lt; 0: continue dy = math.sqrt(square_term) y1 = round(center_y - dy) y2 = round(center_y + dy) screen.set_at((x, y1), (255, 255, 255)) screen.set_at((x, y2), (255, 255, 255)) pygame.init()
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Circle Demo")
clock = pygame.time.Clock() running = True
while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill((0, 0, 0)) draw_circle(screen, 250, 250, 150) pygame.display.flip() clock.tick(60) pygame.quit()
sys.exit() <br> <img border="0" alt="image" src="https://i.ibb.co/JwxbrjkK/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> لما تعمل Run للكود ده وتشوف النتيجة (زي الصورة)، هتلاحظ حاجة غريبة : من فوق ومن تحت (Top and bottom edges): الدائرة طالعة ناعمة ومظبوطة (Smooth).
من اليمين ومن الشمال (Left and right sides): الدائرة فيها فراغات واضحة جداً تحسها متقطعة (Noticeable gaps). ليه ده بيحصل؟ الفكره في الـ Discrete nature of the pixel grid (طبيعة الشاشة المتقطعة).
لما بنقرب من أقصى اليمين أو أقصى الشمال، ميل الدائرة (Slope) بيبقى رأسي جدا. ده معناه إن مع كل خطوة صغيرة بنمشيها على الـ X، قيمة الـ Y بتتغير برقم كبير جدا.
ولأننا بنمشي بمقدار 1 بيكسل بس على الـ Xوبنعمل Rounding، الالجورزم بتفوت بيكسلات كتير بالطول ومبترسمهاش، فبيطلع الشكل متقطع ومفيش نقط كفاية تغطي المنطقة دي.
عشان كده، الحل ده مش عملي وبنلجأ لحلول تانية زي الـ Midpoint Circle Algorithm اللي هتحل المشكلة دي تماماً. لو جاهز ندخل عليها، دوس! definition
Eight-way symmetry means a circle can be divided into eight identical octants, and one computed point can generate seven other symmetric points. عشان نخلي الخوارزمية بتاعتنا Efficient (سريعة وفعالة)، أول حاجة لازم نلاحظها إن الدائرة اللي مركزها نقطة الأصل (0, 0) ليها تماثل ثماني الأبعاد. الـ Optimization ده بيوفر علينا عمليات حسابية متكررة ملهاش لازمة (Redundant calculations).
امتى نقول على شكل إنه متماثل؟ لو قدرنا نعمله تحويلات (زي الدوران أو الانعكاس) وفضل شكله زي ما هو متغيرش. الدايرة بقى بالذات ليها Infinite rotational symmetry (تماثل دوراني لا نهائي)، يعني مهما لفيتها بأي زاوية، هتفضل شكلها دائرة.
يعني إحنا نقدر نقسم الدائرة لـ 8 حتت متساوية (كانها بيتزا 🍕 ) بخطوط بتترسم كل 45 درجة (عند 0°، 45°، 90°، 135°، وهكذا).
كل حتة من التمانية دول متطابقة تماما مع الباقيين. يعني لو حسبنا ورسمنا تمن واحد بس (1/8)، نقدر نعكسه ونلفه عشان نجيب الـ 7 أتمان الباقيين ببلاش من غير حسابات معقدة.
<br> <img src="https://www.tutorialspoint.com/computer_graphics/images/bresenhams_circle_generation_algorithm.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> كل تمن من الـ 8 أتمان بنسميه Octant. لو إحنا حسبنا نقطة واحدة بس اسمها موجودة على محيط الدائرة في الـ Octant الأول، نقدر نستنتج الـ 7 نقط الباقيين بمجرد إننا نبدل الـ مكان الـ أو نغير الإشارات بتاعتهم (موجب وسالب).
<br> <img src="https://i.ytimg.com/vi/K64iHenRpso/hqdefault.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 600px; max-width: 100%;"> افرض إن الالجورزم بتاعتنا (بعد ما عملت حساباتها المعقدة) طلعت نقطة واحدة بس في التمن الأول وهي (2, 7) ، يعني الـ X = 2 والـ Y = 7. بدل ما الالجورزم تحسب باقي الدائرة، هتاخد النقطة دي وتطبق عليها الجدول اللي فوق عشان ترسم 8 بيكسلات في نفس اللحظة: النقطة في Octant 1 هتبقى: النقطة في Octant 2 هتبقى: النقطة في Octant 3 هتبقى: النقطة في Octant 4 هتبقى: النقطة في Octant 5 هتبقى: النقطة في Octant 6 هتبقى: النقطة في Octant 7 هتبقى: النقطة في Octant 8 هتبقى: لو استخدمنا الجورزم وحسبنا اول نقطة في التمن الاول لدائرة مركزها (0,0)، والنقطة دي (4, 3). عايزين نجيب الـ 7 نقط المتماثلة معاها في باقي الدائرة من غير ما نحسب معادلة الدائرة من أول وجديد.
أول حاجة بنعملها إننا بنجهز قواعد الانعكاس (Reflection rules) اللي الخوارزمية بتبرمجها. إحنا عارفين إن الدائرة متماثلة في الـ 8 أثمان.لو النقطة الأساسية هي x = 4 و y = 3:
عشان نروح للتمن اللي جنبه، بنعكس الـ x مكان الـ y.
عشان نروح للنص الشمال، بنخلي السينات بالسالب.
عشان نروح للنص اللي تحت، بنخلي الصادات بالسالب.
هنا بقى الخوارزمية بتمسك النقطة اليتيمة اللي حسبتها (4, 3)، وتطبق عليها الـ 8 قواعد في نفس اللفة عشان تنور 8 بيكسلات مرة واحدة:Final Pixels:(4,3), (3,4), (-3,4), (-4,3), (-4,-3), (-3,-4), (3,-4), (4,-3)<br><img border="0" alt="Chat GPT Image May 29 2026 07 50 37 PM" src="https://i.ibb.co/hJgd2sz7/Chat-GPT-Image-May-29-2026-07-50-37-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">Eight-way Symmetry Example Code
import pygame
import math # Constants
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255) # For octant labels # Center and radius of the circle
CENTER_X, CENTER_Y = WIDTH // 2, HEIGHT // 2
RADIUS = 250 # Initialize Pygame
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Eight-way Symmetry Example")
screen.fill(WHITE) # Font for labeling
font = pygame.font.SysFont("Arial", 20) # 1. Draw the circle using parametric form:
# x = r * cos(theta), y = r * sin(theta)
for theta in range(0, 360): rad = math.radians(theta) x = CENTER_X + round(RADIUS * math.cos(rad)) y = CENTER_Y - round(RADIUS * math.sin(rad)) pygame.draw.circle(screen, BLACK, (x, y), 1) # 2. Draw octant lines (every 45 degrees)
for i in range(8): angle_deg = i * 45 rad = math.radians(angle_deg) end_x = CENTER_X + RADIUS * math.cos(rad) end_y = CENTER_Y - RADIUS * math.sin(rad) pygame.draw.line( screen, BLACK, (CENTER_X, CENTER_Y), (end_x, end_y), 1 ) # 3. Octant labels
labels = [ "Oct1: (x, y)", "Oct2: (y, x)", "Oct3: (-y, x)", "Oct4: (-x, y)", "Oct5: (-x, -y)", "Oct6: (-y, -x)", "Oct7: (y, -x)", "Oct8: (x, -y)"
] for i in range(8): angle_deg = i * 45 + 22.5 rad = math.radians(angle_deg) # Place text inside the circle label_x = CENTER_X + (RADIUS * 0.7) * math.cos(rad) label_y = CENTER_Y - (RADIUS * 0.7) * math.sin(rad) text = font.render(labels[i], True, BLUE) text_rect = text.get_rect(center=(label_x, label_y)) screen.blit(text, text_rect) # Update the display
pygame.display.flip() # Main loop to keep window open
running = True
while running: for event in pygame.event.get(): if ( event.type == pygame.QUIT or ( event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE ) ): running = False pygame.quit() definition
Midpoint Circle Algorithm is an efficient circle drawing algorithm that uses decision parameters to choose the next pixel. الالجورزم دي بتعتبر من أكفأ الطرق عشان نرسم بيها دوائر من غير الفراغات اللي شفناها قبل كده. فكرتها إنها بتيجي بين بيكسلين محتملين (واحد أفقي وواحد قطري (بالورب))، وتحسب نقطة الـ Midpoint (نقطة المنتصف) بينهم، وتشوف خط الدائرة الحقيقي أقرب لأنهي بيكسل فيهم عشان تنوره. ا Symmetry of Circles: بنستغل الـ 8-way symmetry الي اتكلمنا عنها قبل كده عشان نحسب تمن واحد بس (1/8) ونعكسه 7 مرات.
ا Decision Parameter: بنستخدم معامل قرار عشان نحدد البيكسل الصح اللي عليه الدور.
ا Integer Arithmetic: الميزة هنا إننا بنتجنب الـ Floating-point (الكسور) والـ Roots (الجذور) خالص، وكل حساباتنا بتبقى أرقام صحيحة، فبتبقى Computationally efficient (سريعة جداً للبروسيسور). بنبدأ بنقطة المركز (X0, Y0) ونصف القطر r.
ا Initialize variables: بندي قيم ابتدائية للمتغيرات بتاعتنا للتمن الأول: x = 0
y = r بنحسب الـDecision Parameter:
decision parameter = 1 - r بنعمل Plot لأول نقطة وبنستخدم الـ Symmetry عشان نرسم الـ 8 نقط المتماثلين.
في كل خطوة، بنحدث الـ Decision parameter وبناءً عليه بنقرر: هل نزود الـ بس؟ ولا نزود الـ وننقص الـ ؟ عايزين نرسم دائرة مركزها (0,0) ونصف قطرها r = 5 باستخدام معادلة الدائرة الأساسية (Direct Equation).
عشان نقدر نعمل جدول trace صغير، خلينا ناخد مثال مصغر من النقط اللي في الكود:
مركز الدائرة: (0, 0)
نصف القطر (): 5
تجهيز الخوارزمية:
بنبدأ من أول نقطة خالص فوق خالص وهي نقطة البداية: x = 0 و y = r = 5.
بنحسب قيمة الـ decision_param من القانون: الـ Loop بتاعنا هيفضل شغال طول ما قيمة x &lt; y.
متتخضش هنا بقى الالجورزم بتشوف قيمة الـ Pkفي كل لفة عشان تاخد القرار.
<br><img border="0" alt="Chat GPT Image May 29 2026 07 53 24 PM" src="https://i.ibb.co/v42DkXb5/Chat-GPT-Image-May-29-2026-07-53-24-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">Midpoint Circle Algorithm Code
import pygame
import math # Function for midpoint circle algorithm to calculate circle points
def midpoint_circle(center_x, center_y, radius): x = 0 y = radius decision_param = 1 - radius points = [] # Function to add 8 points for each symmetrical point in octants def add_symmetric_points(cx, cy, x, y): points.extend([ (cx + x, cy + y), (cx - x, cy + y), (cx + x, cy - y), (cx - x, cy - y), (cx + y, cy + x), (cx - y, cy + x), (cx + y, cy - x), (cx - y, cy - x) ]) # Add the initial points add_symmetric_points(center_x, center_y, x, y) # Begin algorithm loop to create circle points incrementally while x &lt; y: x += 1 if decision_param &lt; 0: decision_param += 2 * x + 1 else: y -= 1 decision_param += 2 * (x - y) + 1 # Add next set of symmetrical points add_symmetric_points(center_x, center_y, x, y) return points # ==========================================
# Main Execution Block
# ==========================================
if __name__ == "__main__": # Initialize Pygame pygame.init() # Colors WHITE = (255, 255, 255) BLACK = (0, 0, 0) # Logical screen settings WIDTH, HEIGHT = 800, 600 PIXEL_SIZE = 1 # Circle parameters radius = 250 center = (WIDTH // 2, HEIGHT // 2) # Set up display screen = pygame.display.set_mode( (WIDTH * PIXEL_SIZE, HEIGHT * PIXEL_SIZE) ) pygame.display.set_caption( "Circle Drawing Using Midpoint Algorithm" ) # Fill background with white color screen.fill(WHITE) # Calculate all circle points using the algorithm points = midpoint_circle(*center, radius) # Draw each generated point for x, y in points: pygame.draw.rect( screen, BLACK, ( x * PIXEL_SIZE, y * PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE ) ) # Update display pygame.display.flip() # Main loop running = True while running: for event in pygame.event.get(): if ( event.type == pygame.QUIT or ( event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE ) ): running = False # Quit Pygame pygame.quit() definition
Bresenham's Circle Algorithm Similar to the Midpoint algorithm but uses integer arithmetic exclusively, making it faster and more efficient for hardware implementation. اBresenham عمل خوارزمية للدوائر زي ما عمل للخطوط بالظبط. شبه الـ Midpoint بس متظبطة أكتر بحيث إن كل عملياتها تكون جمع وطرح وضرب في أرقام صحيحة بس، وده بيخليها سريعه جدا. بتستخدم الـ Symmetry برده عشان تقلل الحسابات.
بتحسب حاجة اسمها Error term (نفس فكرة الـ Decision parameter) عشان تقرر إحنا هنمشي أفقي (Increment x) ولا قطري (بالورب) (Decrement y). ا Initialize: x = 0
y = r اDecision parameter بنرمزله بـ d وبنحسبه كده: d = 3 - 2r ا While loop: طول ما X &lt;= Y (يعني لسه مخلصناش التمن الأول بتاع الدائرة): بنعمل Plot (رسم) للـ 8 نقط المتماثلين حوالين المركز (Cx, Cy). ا If d &lt; 0: ده معناه إننا هنمشي أفقي (Move horizontally):
x = x + 1 بنحدث معامل القرار: d = d + 4x + 6 ا Else: ده معناه إننا هنمشي قطري (Move diagonally):
x = x + 1
y = y - 1 بنحدث معامل القرار: d = d + 4(x - y) + 10 عايزين نرسم دايرة مركزها (0,0) ونصف قطرها r = 5 باستخدام Bresenham's Circle Algorithm.
أول حاجة بنجهز المتغيرات بتاعتنا قبل ما ندخل في الـ Loop: نقطة البداية: و . بنحسب قيمة الـ Decision Parameter من قانون Bresenham d = 3 - 2r: الكود بيرسم أول 8 نقط متماثلة بناءً على النقطة (0, 5). شرط الدوران (Condition): الـ Loop بيفضل شغال طول ما x≤y. جوه الـ Loop، الخوارزمية بتزود الـ x بمقدار 1 الأول، وبعدين تبص على إشارة الـ d عشان تقرر هتقلل الـ y ولا لأ، وتحسب الـ d الجديدة بناءً على النقط الجديدة. النقط اللي طلعت من الكود ده للربع الأول هي: (0,5), (1,5), (2,4), (3,3), (4,2).
<br><img border="0" alt="Chat GPT Image May 29 2026 08 10 00 PM" src="https://i.ibb.co/HL88Jxc2/Chat-GPT-Image-May-29-2026-08-10-00-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">Bresenham Circle Algorithm Code
import pygame # Function for Bresenham's circle algorithm to calculate circle points
def bresenham_circle(center_x, center_y, radius): x = 0 y = radius d = 3 - 2 * radius points = [] # Function to add 8 points for each symmetrical point in octants def add_symmetric_points(cx, cy, x, y): points.extend([ (cx + x, cy + y), (cx - x, cy + y), (cx + x, cy - y), (cx - x, cy - y), (cx + y, cy + x), (cx - y, cy + x), (cx + y, cy - x), (cx - y, cy - x) ]) # Add the initial symmetric points for (0, radius) add_symmetric_points(center_x, center_y, x, y) # Begin algorithm loop while x &lt;= y: x += 1 if d &lt; 0: d = d + 4 * x + 6 else: y -= 1 d = d + 4 * (x - y) + 10 # Add next set of symmetrical points add_symmetric_points(center_x, center_y, x, y) return points # ==========================================
# Main Execution Block
# ==========================================
if __name__ == "__main__": # Colors WHITE = (255, 255, 255) BLACK = (0, 0, 0) # Logical screen settings WIDTH, HEIGHT = 80, 60 PIXEL_SIZE = 10 # Circle parameters radius = 25 center = (WIDTH // 2, HEIGHT // 2) # Initialize Pygame pygame.init() screen = pygame.display.set_mode( (WIDTH * PIXEL_SIZE, HEIGHT * PIXEL_SIZE) ) pygame.display.set_caption( "Bresenham's Circle Algorithm" ) # Fill background screen.fill(WHITE) # Draw the circle points points = bresenham_circle(*center, radius) # Render the calculated points on screen for x, y in points: pygame.draw.rect( screen, BLACK, ( x * PIXEL_SIZE, y * PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE ) ) # Update display pygame.display.flip() # Main loop running = True while running: for event in pygame.event.get(): if ( event.type == pygame.QUIT or ( event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE ) ): running = False pygame.quit() definition
Parametric Circle Drawing Algorithm uses trigonometric functions ( and ) to calculate the coordinates of the circle. While simple, it is computationally expensive due to the use of floating-point operations. دي طريقة مختلفه بتعتمد على الدوال المثلثية اللي أخدناها في الرياضة.
سهلة في الفهم، بس مكلفة حسابيا عشان بتستخدم floating-point operations. بنستخدم الـ Parametric equation بتاعت الدائرة، اللي بتجيب الإحداثيات عن طريق زاوية اسمها x = x0 + r cos(θ)
y = y0 + r sin(θ) بنعمل Loop ونزود الزاوية من لحد (يعني لفة كاملة 360 درجة) عشان نولد كل النقط بتاعت الدائرة. خزن center (x0, y0) و radius r.
خلي θ تتحرك من 0 لـ 2π.
لكل قيمة θ، احسب x و y.
ارسم النقطة الناتجة. استخدام sin, cos, و floating-point operations بيخليها أبطأ من integer-based algorithms. عايزين نرسم دايرة مركزها (0,0) ونصف قطرها r = 5 باستخدام معادلة الدائرة الأساسية (Direct Equation). المعادلة البارامترية (Parametric equation) للدائرة بتعتمد على زاوية الدوران (ثيتا). القوانين اللي هنعوض فيها هي:
بما إن المركز (0,0)، القوانين هتبقى:الـ Loop بتاعنا بيلف على الزوايا من لحد .عشان منطولش الجدول بـ 360 خطوة، خلينا نمسك شوية زوايا مميزة في الربع الأول (من 0 لـ 90 درجة) ونشوف النقط بتتحسب إزاي:
زي ما إنت شايف، الطريقة دي بتجيب النقط بشكل مباشر من غير ما تعتمد على النقطة اللي قبلها، وده اللي بيخليها مختلفة عن الـ Incremental Algorithms زي (DDA أو Bresenham).
<br><img border="0" alt="Chat GPT Image May 29 2026 08 24 58 PM" src="https://i.ibb.co/99krP9Qs/Chat-GPT-Image-May-29-2026-08-24-58-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">Parametric Circle Drawing Algorithm Code
import pygame
import math # ==========================================
# Parametric Circle Drawing Algorithm
# ========================================== # Initialize Pygame
pygame.init() screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption( "Parametric Circle Drawing Algorithm"
) # Colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0) # Fill background
screen.fill(WHITE) # Circle parameters
center_x, center_y = 300, 250
radius = 200 # Draw circle using parametric equation
for theta in range(0, 360): # Convert degrees to radians rad = math.radians(theta) # Calculate x and y coordinates x = center_x + radius * math.cos(rad) # Invert y because screen y increases downward y = center_y - radius * math.sin(rad) # Plot the pixel pygame.draw.circle( screen, BLACK, (round(x), round(y)), 1 ) # Update the display
pygame.display.flip() # Main loop
running = True
while running: for event in pygame.event.get(): if ( event.type == pygame.QUIT or ( event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE ) ): running = False # Quit Pygame
pygame.quit() كده خلصنا الجزء التاني
اتكلمنا في الجزء ده عن Circle Drawing Algorithms - إزاي الكمبيوتر بيسوي Rasterization ويحول الدوائر الرياضية لـ Pixels على الشاشة.
عرفنا 5 طرق لرسم الدواير: Circle Equation Method - سهل ومباشر بس فيه Square Root و Gaps كبيرة
Eight-Way Symmetry - إن الدائرة ليها 8 Octants متماثلة، فبنحسب نقطة واحدة ونطلع 7 نقط تانية
Midpoint Circle Algorithm - بيعتمد على Decision Parameter و Symmetry، بيحل مشكلة الـ Gaps
Bresenham's Circle Algorithm - Integer-Based ومناسب للـ Hardware
Parametric Circle - بيستخدم sin و cos، سهل فهمه بس أبطأ ]]></description><link>computer-graphics/lectures/chapter-4-[part-2]-fundamental-drawing-algorithms-in-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 4 - [Part 2] Fundamental Drawing Algorithms in Computer Graphics.md</guid><pubDate>Sun, 31 May 2026 13:49:13 GMT</pubDate><enclosure url="https://i.ibb.co/PzjxQFGn/Chat-GPT-Image-May-29-2026-07-30-56-PM.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/PzjxQFGn/Chat-GPT-Image-May-29-2026-07-30-56-PM.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Fundamental Drawing Algorithms in Computer Graphics - Chapter 4 - [Part 1]]]></title><description><![CDATA[مهم قبل ما تبدا الشابتر ده طويل ف اضطريت اقسمه لجزئين , وكمان الدكتور حاطط قوانين من غير امثلة (هو نزل مثالين بس علي المنصه) انا معرفش بصراحه هيجيب مسائل علي الحاجات دي ولا لا بس انا جبت امثلة كراسة العملي وشرحتها احتياطي.
هتلاقي جداول وكلام كتير وطويل متتخضش الموضوع سهل اوي هو كل مشكلته انه طويل بس لو بصيت علي الامثله هتفهمها لوحدك اصلا.
هتلاقي اكواد العملي تحت كل الجورزم للي عايز يجرب بس حسب كلام الدكتور هيا مش علينا حفظ.
طول بالك وقول بسم الله مقدمه
الشابتر ده هنقسمه لجزئين: الجزء الأول (اللي إحنا فيه) عن Line Drawing Algorithms، والتاني عن Circle Drawing Algorithms. الـ Drawing Algorithms هي الخوارزميات اللي بتخلي الكمبيوتر يرسم أشكال أساسية على شاشة مبنية من pixels.
هنفهم ليه بنحتاج نحول الوصف الرياضي للشكل لمجموعة pixels، وبعدين هنتعمق في line drawing algorithms زي Direct Line Equation, DDA, و Bresenham — مع أمثلة تطبيقية لكل واحد. في Computer Graphics، رسم الأشكال الأساسية زي الخطوط والدواير حاجة اساسية عشان نعرف نرسم اي object.
غالبا الشكل بيتوصف رياضيا بأرقام: الخط بيتحدد بنقطة بداية ونقطة نهاية.
الدائرة بتتحدد بمركز ونصف قطر. المشكلة إن الشاشة مش continuous زي الرياضيات، هيا عبارة عن grid من pixels, عشان كده محتاجين نحول الوصف الرياضي ده لـ pixels تتلون على الشاشة.
الفكرة الأساسية
الـ Drawing Algorithm بيقرر أنهي pixels تتلون عشان الشكل الرياضي يبان أقرب حاجة للشكل الحقيقي على شاشة raster. خدنا الشابتر الي فات الـ Geometric Primitives وعرفنا انها الأشكال الأساسية اللي بنبني منها الرسومات, زي: Line
Circle
Polygon
Curve كل primitive ليه وصف رياضي: الـ Line: بيتحدد بـ start point و end point.
الـ Circle: بيتحدد بـ center و radius. الوصف الرياضي ده بيبقى في abstract coordinate space، يعني وصف دقيق على مستوى الرياضيات مش على مستوى الـ pixels.
definition
Rasterization is the process of converting continuous mathematical shapes into a set of discrete pixels. الشاشات الحديثة بتبقي Raster-Based، يعني الصورة فيها عبارة عن pixels مترتبة في grid مستطيل (عشان كده الشكل الرياضي مينفعش يتعرض مباشرة على الشاشة).
لازم الاشكال الرياضية دي تتحول لبكسلات. عشان نفهم الموضوع، تخيل ان عندنا grid وعايزين نرسم vertical line (خط رأسي) من (2, 9) لـ (2, 16): ا x = 2 ثابت.
ا y بيتحرك من 9 لـ 16. في الرياضة الفرق صغير ,بس في الشاشات الحقيقية الموضوع كبير، الـ resolutions ممكن يعدي 1000 × 1000 pixels.
عشان كده الالجورزمز لازم تبقى accurate و efficient، خصوصا في real-time rendering.
definition
Drawing algorithms are fundamental techniques used in computer graphics to render shapes, lines, curves, and other geometric primitives on a screen or image. الـ Drawing Algorithms بتحدد إزاي lines و circles و curves وباقي primitives تتحول لـ pixels.
الهدف إن الشكل النهائي يبقى قريب قدر الإمكان من الشكل الرياضي المقصود.
بتستخدم في: Video games
Simulations
Scientific visualization
Graphic design tools Note
الشابتر بيركز على implementation توضيحي واحد لكل algorithm عشان يشرح الفكرة الأساسية، والتطبيقات والكود موجودين في كراسة العملي.
definition
Line drawing algorithms approximate straight line segments on discrete, pixel-based displays. زي ما قلنا قبل كده، الشاشة دي عبارة عن Grid من البيكسلات، فعشان ترسم خط مستقيم مايل، مستحيل يجي بالظبط على البيكسلات، عشان كده بنعمل تقريب (Approximation).
الـ algorithm الأساسية زي الـ Digital Differential Analyzer (DDA) والـ Bresenham's algorithm بترسم الخط بلون واحد، وده بيعمل المشكله الي شوفناها قبل كده الـ aliasing . وبنستخدم الـ Anti-aliasing اللي بتدمج ألوان البيكسلات اللي حوالين الخط عشان تنعم الحواف دي. دي أبسط طريقة ممكن تفكر فيها، وهي إننا نستخدم معادلة الخط المستقيم العادية جداً اللي درسناها في الرياضة في ثانوي.
عشان نرسم خط باستخدام الـ Slope-intercept form، بنمشي على الخطوات دي: بنحسب الميل (Slope) اللي هو والجزء المقطوع من محور الصادات (Intercept) اللي هو .
بنعمل لوب او بنلف على قيم الـ اللي بين نقطة البداية والنهاية.
لكل قيمة ، بنحسب قيمة الـ اللي بتقابلها من المعادلة: y = mx + c في الآخر بنعمل Plot (رسم) للبيكسل بعد ما نعمل التقريب (Rounding) لقيم سهلة ومباشرة.
ممكن تتعامل مع : positive, negative, zero , or undefined slopes . معادلة الخط المستقيم بنستخدمها كأساس في خوارزميات تانية زي: ا DDA (Digital Differential Analyzer).
ا Bresenham's Line Algorithm (using an implicit form). بتعتمد على Floating-Point Arithmetic (عمليات الكسور العشرية دي بطيئة شوية للكمبيوتر وممكن تدخلنا في rounding errors).
أقل كفاءة من algorithms مبنية على integers زي Bresenham. الخط ممكن يتمثل بأكتر من شكل رياضي.
في الـ Raster graphics، بنختار البيكسلات الأقرب لمسار الخط المثالي.
لازم نحافظ على الـ Aspect ratio عشان الشكل ميبقاش مشوه. عايزين نرسم خط بين النقطتين (2,2) و (10,6) باستخدام معادلة الخط المستقيم المباشرة . أول حاجة بنعملها إننا بنحسب الـ Slope (الميل) اللي بنرمزله بـ m، والـ Y-intercept (الجزء المقطوع من محور الصادات) اللي بنرمزله بـ c. حساب الميل (): هنعوض في القانون ده عشان نجيب الميل: حساب الـ Y-intercept (): هنعوض بنقطة البدايه 2,2 في المعادلة c = y - mx (تقدر تعوض بأي نقطة عادي ) عشان نجيب c: المعادلة النهائية للخط: كده معانا c, m هنعوض بقي في القانون y = mx + c
يبقى المعادلة اللي هنعوض فيها لكل بيكسل هي: تحديد اتجاه اللوب (Condition): بما إن التغير في السينات أكبر من التغير في الصادات ، يبقى ده Shallow line (خط مائل للأفقي). عشان كده إحنا هنعمل Loop على الـ (هنزود الـ بمقدار 1 في كل خطوة)، ونحسب الـ من المعادلة. لو Δy هي الأكبر، يبقى هنمشي وراها. يعني هنعمل Loop على محور الصادات (هنزود الـ بمقدار 1 في كل خطوة), ونحسب x بالقانون ده هنا بقى بنمسك قيم X من أول 2 لحد 10، وفي كل مرة نعوض في المعادلة بتاعتناy = 0.5x + 1عشان نجيب قيمة الـ y.
وطبعا عشان دي أرقام عشرية (Floating-point)، لازم نعمل Rounding (نقرب) في الخر عشان نجيب الـ Pixel الصح.
Final Pixels:(2,2), (3,3), (4,3), (5,4), (6,4), (7,5), (8,5), (9,6), (10,6)<img border="0" alt="Chat GPT Image May 29 2026 07 06 07 PM" src="https://i.ibb.co/84DdNVv4/Chat-GPT-Image-May-29-2026-07-06-07-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">Line Equation Code (للتجربه)
import pygame # Function to draw a line using the line equation (y = mx + c)
def draw_line_equation(x0, y0, x1, y1): # 1. Handle Vertical Line (Infinite slope) if x0 == x1: for y in range(min(y0, y1), max(y0, y1) + 1): screen.set_at((x0, y), Red) return # بنعمل return عشان الكود ميحسبش الميل ويضرب Division by zero # 2. Calculate Slope (m) and Y-intercept (c) m = (y1 - y0) / (x1 - x0) # Slope c = y0 - m * x0 # Y-intercept # 3. Draw the line based on the slope type if abs(x1 - x0) &gt; abs(y1 - y0): # Shallow line (more horizontal) -&gt; Loop over x for x in range(min(x0, x1), max(x0, x1) + 1): y = m * x + c screen.set_at((x, round(y)), Black) else: # Steep line (more vertical) -&gt; Loop over y for y in range(min(y0, y1), max(y0, y1) + 1): x = (y - c) / m screen.set_at((round(x), y), Blue) # ==========================================
# Main Execution Block
# ==========================================
if __name__ == "__main__": # Initialize pygame pygame.init() # Define colors Black = (0, 0, 0) Red = (255, 0, 0) Blue = (0, 0, 255) White = (255, 255, 255) # Get user input from the console print("Enter coordinates (x0, y0, x1, y1) separated by commas:") input_str = input("Example -&gt; 50,50,700,500: ") x0, y0, x1, y1 = map(int, input_str.split(',')) # Set up display screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Line Drawing Using Line Equation") screen.fill(White) # Draw the line draw_line_equation(x0, y0, x1, y1) # Add text labels for start and end points font = pygame.font.Font("freesansbold.ttf", 13) text_surface1 = font.render(f"({x0},{y0})", True, Black) screen.blit(text_surface1, (x0 + 5, y0 - 17)) text_surface2 = font.render(f"({x1},{y1})", True, Black) screen.blit(text_surface2, (x1 + 5, y1 + 3)) # Update the display to show everything pygame.display.flip() # Main loop to keep the window open running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False pygame.time.wait(10) # Reduce CPU usage pygame.quit() definition
DDA is a line-drawing algorithm that incrementally computes pixel positions using floating-point arithmetic. ده بقى Algorithm أذكى شوية. الغرض بتاعه إنه يقرب الخط المستقيم من خلال حساب إحداثيات البيكسلات اللي في النص خطوة بخطوة (Step-by-step). الفكرة الأساسية إننا بنزود الـ X أو الـ Y بخطوات صغيرة جداً بناءً على ميل الخط، وبنختار الاتجاه الغالب (Dominant direction) عشان نقلل الحسابات.
يعني بنمشي خطوة خطوة بدل ما نحسب المعادلة كلها من الصفر كل مرة. خد نقطتين: (x0, y0) و (x1, y1).
احسب الفرق: حدد عدد الخطوات (ناخد القيمة الأكبر بين الـ والـ .): احسب مقدار الزيادة في كل خطوة: ابدأ من (x0, y0).
في كل خطوة زود x بـ xinc و y بـ yinc.
ارسم pixel عند الإحداثيات بعد rounding. سهل ومفهوم.
أسهل في التنفيذ من algorithms كتير.
أسرع من direct line equation عشان بيستخدم incremental generation.
بيقلل التكرار في الحسابات. لسه بيستخدم Floating-Point Arithmetic.
ممكن يراكم rounding errors.
ممكن يبقى أقل دقة عند endpoints. عايزين نرسم خط بين النقطتين (2,2) و (10,6) باستخدام DDA. أول حاجة بنعملها إننا بنجيب الفرق بين نقطة النهاية ونقطة البداية، عشان نعرف إحنا هنتحرك مسافة قد إيه على محور السينات والصادات,الفرق ده بنسميه Delta X و Delta Y.
Δx = 10 - 2 = 8
Δy = 6 - 2 = 4 بعد كده بنحسب الـ Steps. بناخد القيمة الأكبر بين الـ والـ . ليه؟ عشان نضمن إننا بنمشي خطوة خطوة على المحور الأطول، ويبقى الخط بتاعنا متصل ومفيش فيه فراغات.
steps = max(8, 4) = 8 أخيراً، بنحسب الـ Increment (مقدار الزيادة). دي القيمة اللي هنزودها على الـ والـ في كل خطوة. بنقسم المسافة الكلية على عدد الخطوات.
x_inc = Δx / steps = 8 / 8 = 1
y_inc = Δy / steps = 4 / 8 = 0.5 يبقى كده إحنا فهمنا إن في كل خطوة، الـ هتزيد بمقدار 1 صحيح، بس الـ هتزيد بمقدار 0.5 (يعني نص خطوة). هنا بنبدأ التنفيذ. بنبدأ من أول نقطة (2.0, 2.0) وكل دورة بنزود الـ x_inc والـ y_inc.
المشكلة اللي بتظهر هنا زي ما إنت شايف، إن الـ بتطلع بكسور زي 2.5 و 3.5. طبعا الشاشة مفهاش بكسل ونص, البيكسل ده مربع مش بيتقسم.
عشان كده إحنا لازم نعمل خطوة الـ Rounding (التقريب)، عشان نحول الكسور دي لأرقام صحيحة الجهاز يقدر يفهمها (مثلا 2.5 هتتقرب وتبقى 3).
(2,2), (3,3), (4,3), (5,4), (6,4), (7,5), (8,5), (9,6), (10,6)
<br><img border="0" alt="Chat GPT Image May 29 2026 03 05 21 PM" src="https://i.ibb.co/R4ysxzcZ/Chat-GPT-Image-May-29-2026-03-05-21-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">definition
Bresenham's Line Algorithm is an efficient integer-based algorithm for drawing straight lines on raster displays. ا Bresenham بيستخدم Decision Parameter عشان نختار البيكسل اللي عليه الدور من غير أي كسور.
ميزته إنه بيتجنب floating-point calculations.
عشان كده أسرع وأنسب للهاردوير. خد نقطتين: (x0, y0) و (x1, y1).
احسب:
Δx = x1 - x0
Δy = y1 - y0 حدد نوع الخط (بنحدد ميل الخط عشان نعرف هنمشي على أي محور): لو |Δy| &lt;= |Δx| يبقى الخط Shallow، (يعني ميله خفيف وأقرب للأفقي).
لو |Δy| &gt; |Δx| يبقى الخط Steep، (يعني ميله حاد وأقرب للرأسي). استخدم الـdecision parameter الي هو p: في shallow line: p = 2Δy - Δx في steep line:
p = 2Δx - Δy بنبدأ من أول نقطة ,وفي كل خطوة بنحدث معامل القرار وبنرسم البيكسل اللي بعده. عايزين نرسم نفس الخط بين النقطتين (2,2) و (10,6) بس المرة دي باستخدام خوارزمية Bresenham. اول حاجة بنحدد نقط البداية والنهاية، وبنجيب الفرق بينهم.
x0 = 2, y0 = 2
x1 = 10, y1 = 6 نحسب الـ Delta X والـ Delta Y:
Δx = 10 - 2 = 8
Δy = 6 - 2 = 4 بما إن Δx &gt; Δy، يبقى الخط ده ميله خفيف (Shallow line)، وعشان كده إحنا هنعمل Iterate (نلف) على محور السينات x (يعني الـ x هتزيد دايما بـ 1)، والقرار كله هيبقى: هل نزود الـ y ولا نسيبها زي ما هي؟ عشان ناخد القرار ده من غير ما نستخدم أي كسور، بنحسب حاجة اسمها Decision Parameter (معامل القرار) وبنرمزله بـ p. أول قيمة ليه بنحسبها كده:
p0 = 2Δy - Δx = 2(4) - 8 = 8 - 8 = 0 بعد كده في كل خطوة، بنبص على قيمة الـ p وبناءً عليها بنقرر: لو p ≥ 0: الـ y بتزيد بـ 1، وبنحسب الـ p الجديدة بالمعادلة دي: p = p + 2Δy - 2Δx لو p &lt; 0: الـ y بتفضل ثابتة زي ما هي، وبنحسب الـ p الجديدة بالمعادلة دي:
p = p + 2Δy لاحظ إن كل الحسابات هنا جمع وطرح لأرقام صحيحة (Integers)، مفيش أي Rounding ولا كسور خالص
لاحظ برده اننا بنزود الـ X كل مره بس الـ Y ساعات اه وساعات لا.
(2,2), (3,3), (4,3), (5,4), (6,4), (7,5), (8,5), (9,6), (10,6) بما إن دي نفس النقط اللي طلعت من الـ DDA، فالرسمة هتكون هي هي بالظبط على الشبكة، بس الفكرة كلها إن الطريقة اللي وصلنا بيها للنقط دي أسرع بكتير ومفيهاش وجع دماغ الكسور.
<br><img border="0" alt="Chat GPT Image May 29 2026 07 21 56 PM" src="https://i.ibb.co/Z1YS9Qpv/Chat-GPT-Image-May-29-2026-07-21-56-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">كده خلصنا الجزء الأول
اتكلمنا في الجزء ده عن Drawing Algorithms - إزاي الكمبيوتر بيعمل Rasterization ويحول الأشكال الرياضية لـ Pixels على الشاشة.
بالنسبة لـ Line Drawing عرفنا 3 طرق: ا Direct Line Equation (y = mx + c) - سهلة وبديهية بس فيها Floating-Point و Rounding Errors
ا DDA - بيحسب Incrementally خطوة بخطوة، أسهل من Direct بس لسه فيه Floating-Point ومحتاج Rounding
ا Bresenham's Line Algorithm - الأسرع عشان Integer-Based بالكامل وبيستخدم Decision Parameter، مش محتاج Rounding ولا كسور ]]></description><link>computer-graphics/lectures/chapter-4-[part-1]-fundamental-drawing-algorithms-in-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 4 - [Part 1] Fundamental Drawing Algorithms in Computer Graphics.md</guid><pubDate>Sun, 31 May 2026 12:45:10 GMT</pubDate><enclosure url="https://i.ibb.co/84DdNVv4/Chat-GPT-Image-May-29-2026-07-06-07-PM.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/84DdNVv4/Chat-GPT-Image-May-29-2026-07-06-07-PM.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Index]]></title><description><![CDATA[ 29\5\2026 قبل ما تبدأ الشرح كالعاده مغطي المنهج كله ومش مفوت حاجة, لو ذاكرت من هنا بس باذن الله تخرج فاهم المنهج كله
المنهج كله مشروح
طبعا الدكتور هيجيب في الامتحان اسالة من كراسة العملي فمتنساش تذاكرها لو فيه اي اخطاء في الشرح قولي عشان اعدلها <a rel="noopener nofollow" class="external-link is-unresolved" href="https://t.me/DevNourEldeen" target="_self">https://t.me/DevNourEldeen</a> ومتنساش تدعيلي]]></description><link>computer-graphics/index.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/Index.md</guid><pubDate>Sun, 31 May 2026 00:40:56 GMT</pubDate></item><item><title><![CDATA[3D Computer Graphics and Animation - Lecture 6]]></title><description><![CDATA[مقدمة الشابتر ده بيتكلم عن 3D Computer Graphics و Animation.
هنفهم إزاي الـ 3D scenes بتتحول لـ 2D images، الفرق بين shading techniques زي Gouraud و Phong، وبعدها ندخل على Ray Tracing و Texture Mapping و 3D Modeling.
في الآخر هنتكلم عن Animation وأنواعها ومبادئها الأساسية. الـ 2D كان آخره طول وعرض, الـ 3D بيزود عليهم بعد التالت وهو العمق (Depth). بنعمل كده عشان نقلد العالم الحقيقي زي مابنشوفه بالظبط. أي مشهد (3D Scene)، بيتكون من شوية حاجات أساسية: <img border="0" alt="Chat GPT Image May 30 2026 03 21 46 PM" src="https://i.ibb.co/wThv9K6/Chat-GPT-Image-May-30-2026-03-21-46-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
في الـ 3D، إحنا بنخزن بيانات للأجسام دي في الكمبيوتر، وبنعمل عليها حسابات زي: ا Transformations (زي النقل والدوران)
ا Lighting (الإضاءة)
ا Shading (التظليل) النتيجة النهائية بتكون 2D Image تتعرض على الشاشة، إما real-time أو pre-rendered. بالرغم من إننا عايشين في عالم 3D، بس الشاشات بتاعتنا مسطحة (2D). فبقي هدف الـ 3D graphics هو إنتاج صور 2D بتعبر عن العالم الـ 3D ده.
Remember
A model of a 3D scene is first constructed using geometric shapes, then transformed and projected onto a 2D viewing surface through a process known as Projection. الاول بنكون الـ 3D باشكال هندسية وبعدها بنحوله لـ 2D, العملية دي بنسميها الإسقاط (Projection).
<br> <img style="background:white; padding:10px;" src="https://www.baeldung.com/wp-content/uploads/sites/4/2023/05/perspective-projection-1.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الـ 3D فكرته أقرب للـ Vector graphics، لأننا بنوصف المشهد باستخدام أشكال هندسية بدائية (Geometric primitives) زي النقط، الخطوط، المضلعات (Polygons)، والأسطح، مش مجرد بيكسلات مرصوصة زي الـ Raster. بس ده مش معناه إننا مبنستخدمش الـ Raster خالص. ساعات بنجيب صورة 2D (راستر) ونلزقها على سطح الجسم الـ 3D عشان نديله تفاصيل واقعية. الصورة اللي بنستخدمها دي بنسميها Texture (خامة).
والعملية دي نفسها بنسميها Texture mapping. المكتبات البرمجية والـ APIs زي OpenGL بتدعم الطريقتين، بس تركيزنا الأساسي بيكون على التعامل مع الـ Geometry. definition
Rendering is the process of producing a 2D image from a 3D scene description. الـ Rendering مصطلح بنسمعه كتير في الالعاب , دي العملية اللي بناخد فيها الفايل بتاع المشهد (اللي فيه الـ geometry، الـ viewpoints، الـ textures، الإضاءة، والـ shading) وندخله على برنامج عشان يطلعلنا صورة ديجيتال نهائية.
عشان العملية دي تقيلة جدا وفيها حسابات معقدة زي الـ Rendering equation، بنعتمد على كارت الشاشة (الـ GPU) عشان يساعد المعالج (الـ CPU) ويسرع العملية دي في حاجة اسمها الـ Graphics pipeline.
عشان الصورة تطلع واقعية وشكلها حقيقي تحت الإضاءة الافتراضية اللي إنت حاططها، السوفتوير بيحل معادلة رياضية اسمها الـ Rendering equation. دي اللي بتظبط شكل الإضاءة عشان تطلع مظبوطة. في الأول الأجسام بتترسم في وضعية الـ Wireframe mode (كأنها مجسمات معمولة من سلك، بنشوف الحواف Edges بس).
بعدين بنطبق حاجة اسمها Hidden line removal، ودي بتشيل الخطوط اللي المفروض تكون مستخبية ورا أسطح الجسم، عشان يبان كأنه جسم صلب.
بعد كده بنطبق التظليل عشان نحسن إدراكنا للشكل والعمق.
<br><img border="0" alt="Chat GPT Image May 30 2026 01 56 42 AM" src="https://i.ibb.co/gMBGfyK0/Chat-GPT-Image-May-30-2026-01-56-42-AM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">definition
Shading is used to depict depth in 3D models by varying levels of brightness. الـ Shading ده هو التظليل اللي بيدي للـ 3D موديل بتاعنا عمق عشان تحس إنه مجسم حقيقي مش مجرد شكل مسطح، وده بنعمله عن طريق إننا بنغير درجات الإضاءة في الموديل.
في التقنيات الحديثة، shade بيتطبق ديجيتال.
من تقنيات shading في الرسم التقليدي: Cross-Hatching. خطوط متعامده (perpendicular) بكثافة مختلفة.
الخطوط المتقاربة = أغمق.
الخطوط المتباعدة = أفتح. الـ shading بيعتمد كمان على الـ lighting.
الـ rendering غالبا بيستخدم اكتر من مصدر ضوء عشان يطلع شكل واقعي.
<br><img border="0" alt="Chat GPT Image May 30 2026 03 36 50 PM" src="https://i.ibb.co/q3BNKnBT/Chat-GPT-Image-May-30-2026-03-36-50-PM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
أي مجسم مدور بيبقي عباره عن حتت مسطحة صغيرة (Tiny flat surfaces) مرصوصة جنب بعض
الكمبيوتر بيحسب التظليل لكل حتة لوحدها حسب النور جاي منين.
وعشان الشكل ميطلعش مضلع ومكسر زي الشكل ده : <br> <img src="https://i.ibb.co/Tq0r0Fg2/image.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> بنستخدم تقنيات تنعم الأسطح دي وتخليها تبان مدورة وطبيعية: ا Gouraud shading: التقنية دي بتنعم شكل الجسم عن طريق إنها بتعمل عملية حسابية اسمها Interpolating (تدرج للتظليل)، فبتخفي شكل المربعات أو الأسطح الفردية دي، والمجسم بيبان ناعم ومفيش فيه حتت مكسرة . ا Phong shading: اللمعان (Highlights): التقنية دي بتدي للمجسم لمعة واقعية بتعتمد على درجة لمعانه (Shininess) وزاوية نظرتك ليه (Viewing angle)، فبتبين الأماكن الناعمة اللي بتعكس النور وسط الأسطح المطفية (Matte أو Diffuse).
الشفافية (Transparency): بتقدر تخلي الموديل شفاف زي الإزاز، النور يعدي منه وفي نفس الوقت السطح من بره يعكس الإضاءة. <br> <img src="https://media.springernature.com/lw685/springer-static/image/chp%3A10.1007%2F978-3-319-21822-9_6/MediaObjects/321155_1_En_6_Fig10_HTML.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
بصمجيات ا Flat Shading: لون/إضاءة واحدة لكل Polygon , الشكل يبان مكسر (Faceted). ا Gouraud Shading: بيحسب الإضاءة ويعمل Interpolation للـ surfaces , يخفي حدود المضلعات ويخلي الشكل أنعم (كأن فيه Gradient effect). ا Phong Shading: بتدي الجسم Highlights , Transparency , وبتدي شكل واقعي اكتر. التظليل بيغير ألوان الأسطح بناء على زاويتها بالنسبة لمصدر النور، خلينا نقارن التطور بتاعها:<br><img border="0" alt="Chat GPT Image May 30 2026 02 06 46 AM" src="https://i.ibb.co/qFYW7F8j/Chat-GPT-Image-May-30-2026-02-06-46-AM.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">definition
Ray tracing generates images by tracing light paths through pixels on an image plane. الـ Ray Tracing تقنية بتطلع صور واقعية كأنها متصورة بكاميرا (Photorealistic)، وجودتها عالية جدا. بس المشكلة إنها بتسحب موارد كتير جدا وحساباتها معقدة (Greater computational cost). produces highly photorealistic images, often exceeding the quality of typical scanline methods, but with greater computational cost.
<br> <img src="https://i.ytimg.com/vi/6oRlJzxN1Xw/maxresdefault.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved"> الفكرة بتاعتها ببساطة إنها: بتتتبع مسار شعاع النور من الكاميرا (Camera)، مرورا بكل بيكسل في شاشة العرض (Image Plane). ويفضل ماشي كـ شعاع رؤية (View Ray) لحد ما يخبط في أي مجسم في المشهد (Scene Object). ولما يخبط، بيطلع منه شعاع ضل (Shadow Ray) يروح لمصدر النور (Light Source) عشان يحسب الإضاءة والضل والانعكاسات بدقة عالية. <br> <img src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/pictures/2018/RayTracing/ray-tracing-image-1.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
definition
Texture mapping adds detail, surface patterns, or color to 3D models. دي العملية اللي بنضيف بيها تفاصيل، نقوش، أو ألوان للموديل الـ 3D بتاعنا. عاملة بالظبط زي ما تجيب ورقة هدايا منقوشة وتغلف بيها كوره مثلا. وممكن كمان نحط أكتر من Texture على نفس السطح ودي حركة بنسميها Multitexturing. <br>
ده شكل الاوبجكت من غير Textures: <img src="https://static.vecteezy.com/system/resources/previews/060/809/123/non_2x/smooth-white-sphere-with-subtle-texture-free-png.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 300px; max-width: 100%;"> <br>
ده بعد ما ضفناله Textures: <img src="https://cdnb.artstation.com/p/assets/images/images/000/513/637/large/jason-raba-texturespheres.jpg?1425262408" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;"> لما بنيجي نلزق صورة 2D (اللي هي الـ Texture) على مجسم 3D مدور، غصب عننا بيحصل تشوهات في شكل الصورة عشان تتطبع على السطح ده. Spherical mapping distorts the image by compressing the poles into pie-wedges and stretching the equator, whereas Cylindrical mapping shares the same pole distortion but leaves the equator perfectly unstretched. الـ Spherical mapping بيعمل distort (تشوه) في الـ Poles على شكل مثلثات و stretch للـ Equator، إنما الـ Cylindrical mapping بيعمل distort للـ Poles برضه بس بيسيب الـ Equator سليم من غير أي stretch.
زياده فهم (اختياري) الـ Spherical Mapping : بنحول إحداثيات النقطة الـ 3D لخطوط طول وعرض (Latitude و Longitude) عشان نغلف بيها كورة كاملة. ده بيعمل مشكلتين: ا Poles (الأقطاب): من فوق وتحت، الصورة بتضغط لحد ما تاخد شكل مثلثات أو حتت بيتزا (Pie-wedge shapes).
ا Equator (خط الاستواء): في نص الكورة الصورة بتتمط (Stretched) عشان تغطي العرض ده كله. الـ Cylindrical Mapping : هنا إحنا بنلف الصورة على أسطوانة (زي ما بتلف ورقة على كانز). ا Poles: بيحصل فيها تشوه (Distortion) زي اللي بيحصل في أقطاب الكورة بالظبط.
ا Equator: مختلف عن الكوره ,عشان الأسطوانة عرضها ثابت, الصورة في النص بتلف بسلاسة ومبيحصلهاش أي مط (أبعادها بتفضل مظبوطة). definition
3D modeling is the creation of a mathematical or wireframe representation of a three-dimensional object using specialized software. هو إنك تبني المجسم نفسه جوه السوفتوير، كأنك بتنحت بس ديجيتال، وبنعمله تمثيل رياضي أو شبكي (Wireframe). الموديلز دي ممكن تتعمل أوتوماتيك أو بشكل يدوي زي النحت.
Applications:
الموديلز دي ممكن تترندر كصور 2D, بتستخدم في الـ Simulations , الـ Animation, الـ 3D printing.
definition
3D projection maps three-dimensional points onto a 2D plane. ده ببساطة هو الإسقاط، يعني إزاي نعرض نقط المجسم الـ 3D بتاعنا على شاشة مسطحة 2D. بيستخدم كتير جدا في الجرافيكس، الهندسة، والتصميم.
<br> <img style="background:white; padding:10px;" src="https://www.baeldung.com/wp-content/uploads/sites/4/2023/05/perspective-projection-1.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
definition
A 3D scanner captures real-world objects or environments to create digital 3D models. ده جهاز بياخد نسخة من العالم الحقيقي ويدخله للكمبيوتر. بيصور المجسمات الحقيقية ويطلعلنا حاجة اسمها Point cloud (سحابة من النقط) بنستخدمها عشان نعيد بناء شكل المجسم، وممكن كمان يلقط ألوانه.
<br> <img src="https://www.sculpteo.com/wp-content/uploads/2019/12/3Dscaning-1200x900.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;"> <img src="https://www.sculpteo.com/wp-content/uploads/2020/01/Webp.net-resizeimage-21-2.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;"> Multiple scans from different angles are aligned (registration) and merged to produce a complete model. This overall process is the 3D scanning pipeline. الاسكانر ده شغال زي الكاميرا، ليه زاوية رؤية معينة (Cone-like field of view) ومبيقدرش يشوف غير الأسطح اللي مواجهاه بس.
عشان كده، إحنا بناخد كذا لقطة من زوايا مختلفة ونعملهم محاذاة وتجميع مع بعض في عملية اسمها Registration عشان نطلع الموديل كامل.
اللفة دي كلها على بعضها بنسميها الـ 3D scanning pipeline.
definition
Animation is a sequence of images that, when displayed rapidly one after another, creates the impression of continuous motion or change. ببساطة، animation هي عملية illusion of movement ( ا to give life).
الفكرة إننا بنعرض صور ثابتة (Still images) ورا بعض بسرعة جدا، فالعين البشرية بتنخدع وتحس إن في حركة مستمرة، مع إن مفيش حاجة بتتحرك بجد وكلها صور منفصلة.
الأنيميشن بيضيف بُعد الوقت (Dimension of time) للجرافيكس، وده بيخلينا نقدر نوصل معلومات أكتر بكتير من الصور الثابتة. التحدي الأساسي للـ (Animator) إنه يختار أدوات تديله تحكم ومرونة عشان يوصف الحركة اللي هو عايزها، وفي نفس الوقت ميمعملش كل حاجة يدوي عشان ميتسحلش في تفاصيل ملهاش لازمة. وطبعا مفيش أداة واحدة بتنفع لكل حاجة، الأدوات الفنية غير الأدوات اللي بتعمل محاكاة للواقع.
definition
Traditional Animation Animation that involves drawing each frame of a film by hand. After the drawings are completed and colored, they are photographed or scanned into a computer and combined with sound. الـ Traditional Animationدي الطريقه القديمة زي أفلام ديزني بتاعت زمان. الأرتيست بيقعد يرسم كل Frame بإيده، رسمة ورا التانية. بعد ما بيخلصوا رسم وتلوين على الورق، بياخدوا الرسومات دي يصوروها أو يعملولها سكان على الكمبيوتر، وبعدين يركبوا عليها الصوت.
الموضوع ده متعب جداً وبيسحب وقت مهول (Extremely time-consuming)، عشان الثانبة الواحدة بس من الفيلم بتحتاج حوالي 24 رسمة بالايد!
عشان المجهود الجبار ده، الشغل ده غالباً ملهاش حد يقدر يعمله غير ستوديوهات كبيرة. <br> <img src="https://images.griddo.udit.es/c/cover/q/70/w/1920/h/1080/p/center/f/jpeg/animacion-2-1920x1080" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;">
definition
Stop-Motion Animation An animation technique that requires the animator to physically manipulate objects in the scene, capture a single frame, adjust the objects, and repeat the process. الـ Stop-Motion Animation هنا بتجيب مجسمات حقيقية قدامك، تحركها حركة بسيطة ، وتاخد صورة بالكاميرا (Capture a frame)، وبعدين تحركها كمان حركة بسيطة وتاخد صورة تانية، وهكذا. ولما تعرض الصور دي ورا بعض بسرعة، تحس إن الجسم بيتحرك لوحده. الأجسام اللي بيستخدموها ممكن تكون أي حاجة: شخصيات صلصال (Clay figures)، ورق، أو حتى أدوات من البيت.
في طرق بيستخدموا فيها أشخاص حقيقيين، يوقفوهم في وضعيات معينة وياخدوا فريم، وبعدين يغيروا الوضعية وياخدوا فريم تاني.
في الآخر، كل الصور دي بتتجمع على شريط الفيلم وبيتركب معاها الصوت. <br> <img src="https://www.adobe.com/uk/creativecloud/animation/discover/media_1a446979c00087dabf92d48d4fcb28671f3ec5a30.png?width=750&amp;format=png&amp;optimize=medium" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 500px; max-width: 100%;">
definition
Computer-Generated Animation Animation that uses software to create animated images and models, making the process generally faster than traditional methods. It can be used for both 2D and 3D characters and objects. الـ Computer-Generated Animation (أو الـ CG) دي الطريقه الحديثه. بنستخدم سوفتوير عشان نعمل الصور والمجسمات، ده بيخلي العملية أسرع وأسهل من الطرق القديمة. ده بينقسم لحتتين: ا 2D Computer Animation: زي التقليدي بالظبط، الأرتيست بيعمل سلسلة صور ورا بعض فيها اختلافات بسيطة عشان تعمل حركة، بس كله بيتم ديجيتال جوه البرنامج.
ا 3D Computer Animation: هنا إحنا بنبني مجسم ديجيتال كامل (Digital model) للشخصية. التحريك هنا بيتم بطريقتين: يا إما الأرتيست بيتحكم في نقط معينة على المجسم اسمها Control points أو يغير في المتغيرات (Variables) بتاعتها عشان يحركها.
أو بيستخدموا تقنية اسمها الـ Motion Capture (أو Mo-cap)، ودي عبارة عن إنهم بيجيبوا ممثل حقيقي، يسجلوا حركته الحقيقية، وبعدين يركبوا الحركة دي على الـ 3D Character بتاعهم في الكمبيوتر عشان يطلع واقعي جداً. الأنيميشن ملوش استخدام واحد بس، ده داخل في مجالات كتير، خلينا نشوف أهمهم: الترفيه (Entertainment): زي الأفلام، البرامج التلفزيونية، وألعاب الفيديو.
التعليم (Education): الفيديوهات الشارحة والمحتوى التعليمي اللي بيبسط المعلومة.
الإعلانات (Advertising): شغل الميديا الأونلاين والتسويق.
البحث والتطوير (Research and development): بنعمل بيه محاكاة للآلات والأنظمة والعمليات (Simulations).
التصميم والهندسة (Design and engineering): عشان نحلل ونختبر الأفكار بتاعتنا من غير ما نحتاج نصرف ونبني نماذج حقيقية (Physical prototypes).
التجسيد العلمي (Scientific visualization): بيساعدنا نتخيل الظواهر المعقدة جداً، أو الحاجات الصغيرة أوي والكبيرة أوي اللي مستحيل نشوفها بعنينا المجردة.
دعم الأبحاث العلمية وتحليل البيانات. الصور المتحركة مش بتتحرك فعلا. The illusion of movement occurs due to a phenomenon known as persistence of vision, where the human eye and brain briefly retain images. الـ illusion بيحصل بسبب Persistence of Vision: العين والدماغ بيحتفظوا بالصورة لفترة قصيرة بعد ما تختفي.
الدماغ بيمهد الصور المتتالية، فيبان كأنها حركه مستمره. الـ Computer Animation هو صناعة الصور المتحركه باستخدام الكمبيوتر.
ده يعتبر فرع من الجرافيكس والأنيميشن في نفس الوقت. ورغم إن الـ 3D هو الاشهر في الأنيميشن الحديث، بس الـ 2D graphics لسه بتستخدم كتير جدا عشان الـ Rendering بتاعها أسرع بكتير ومش بتحتاج موارد ولا إنترنت عالي (Low-bandwidth applications).
في مجال السينما والأفلام، الشغل ده بنسميه CGI (Computer-Generated Imagery). عشان نحرك أي مجسم افتراضي (Virtual objects) جوه الكمبيوتر، لازم نكون عارفين إن المجسم ده متعرف بشوية خصائص أساسية زي: ا Position: مكانه فين.
ا Orientation: اتجاهه ودورانه عاملين إزاي.
ا Scale: حجمه قد إيه. الخصائص دي كلها بتتخزن رياضياً في حاجة اسمها Transformation matrices. والـ Animation بيحصل ببساطة لما الخصائص دي تتغير مع مرور الوقت. إحنا بقى بنعمل الأنيميشن ده إزاي ونتحكم في الموديل؟ السوفتوير فيه كذا تكنيك بنستخدمهم:بصمجيات الـ Keyframes: حدد البداية والنهاية والبرنامج يكمل اللي بينهم.
الـ Procedural Animation: الخوارزمية هيا الي بتتحكم في الحركه, بستخدم مع الحاجات المعقده زي المطر.
الـ Expression-Based Animation: المعادلات هيا الي بتتحكم في الحركه, بنستخدمهفي حركة الهيكل العظمي. كده خلصنا المحاضره
اتكلمنا في المحاضره دي عن 3D Computer Graphics و Animation.
بدأنا بـ Concepts of 3D وإن المشهد بيكوّن من (Geometric Models, Materials, Light Sources, Virtual Camera) وبنحوله لـ 2D عن طريق الـ Projection.
بعد كده عرفنا الـ Rendering (إنتاج صورة 2D من مشهد 3D) وخطوات رسم الأجسام.
بعدين دخلنا في Shading: ا Gouraud Shading: بيعمل Interpolation للاسطح عشان يخفي المضلعات.
ا Phong Shading: بيدي Highlights و Transparency لشكل واقعي أكتر. وفي الآخر اتكلمنا عن: ا Ray Tracing: تقنية Photorealistic بتتتبع مسار الشعاع من الكاميرا.
ا Texture Mapping: إضافة نقوش وألوان للـ 3D Models.
ا 3D Modeling: بناء المجسمات (NURBS, Polygonal Mesh, Subdivision).
ا 3D Projection: إسقاط النقط من 3D لـ 2D.
ا 3D Scanners: مسح المجسمات الحقيقية وعمل Point cloud.
ا Animation: أنواعها (Traditional, Stop-Motion, CG) وتقنياتها (Keyframes, Procedural, Expression-based). ]]></description><link>computer-graphics/lectures/chapter-6-3d-computer-graphics-and-animation.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 6 - 3D Computer Graphics and Animation.md</guid><pubDate>Sun, 31 May 2026 00:39:37 GMT</pubDate><enclosure url="https://i.ibb.co/wThv9K6/Chat-GPT-Image-May-30-2026-03-21-46-PM.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://i.ibb.co/wThv9K6/Chat-GPT-Image-May-30-2026-03-21-46-PM.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Foundations of Computer Graphics - Lecture 1 [Part 5]]]></title><description><![CDATA[مقدمة هنكمل الشابتر الاول, في الجزء ده هنتعرف على أشهر Image Formats المستخدمة في الـ Computer Graphics، والفرق بينهم من حيث الجودة، الضغط، الشفافية، وحجم الملفات.
كمان هنتكلم عن أنواع الـ Compression زي Lossy وLossless، وإزاي نختار الفورمات المناسب حسب استخدام الصورة سواء للويب، الطباعة، أو التصميم. الـ Image Format هو الطريقة اللي الصورة بتتخزن وتتفتح وتتشارك بيها بين الأجهزة والبرامج.
اختيار الفورمات الصح بيأثر على حاجات مهمة زي: جودة الصورة Image Quality
حجم الملف File Size
سرعة التحميل Loading Speed
التوافق مع البرامج والأجهزة Compatibility يعني لو الصورة للويب، أو للطباعة، أو للمشاركة الديجيتال، لازم تختار الفورمات حسب الاستخدام. كل format ليه طريقة ضغط مختلفة، ممكن تبقى Lossy أو Lossless.
بعض الصيغ بتدعم الشفافية Transparency زي PNG, SVG, WebP, GIF.
بعض الصيغ مش بتدعم الشفافية زي JPEG.
الـ Vector Formats بتفضل sharp مهما كبرت الصورة.
الـ Raster Formats ممكن تبكسل لما تكبرها أكتر من حجمها الطبيعي.
definition
BMP (Bitmap) is a raster image format developed by Microsoft and mainly associated with Windows. الـ BMP صيغة Raster قديمة مرتبطة غالبا بويندوز.
حجم ملفاتها كبير أوي.
مبنية على pixels، فمش بتعمل scaling كويس.
بتدي صورة واضحة ودقيقة,بس الجودة بتقل لما تكبر لانها raster.
غالبا بتتخزن من غير compression.
definition
JPEG / JPG is a widely used raster image format that uses lossy compression to reduce file size. الـ JPEG أو JPG من أشهر صيغ الصور.
مناسب جدا للصور الفوتوغرافية لانها بتدعم الوان كتير حوالي (16.7 million colors).
بيستخدم Lossy Compression، يعني بيقلل الحجم عن طريق فقد جزء من التفاصيل.
حجم الملفات بتاعته صغيره.
مش بيدعم Transparency. Photographs
Web images
Email and social media content
definition
GIF (Graphics Interchange Format) is a limited-color raster format used for simple graphics and animations. الـ GIF صيغة Raster محدودة الألوان.
بيدعم لحد 256 colors بس.
بيدعم Transparency.
بيدعم Animation.
بيدعم كمان Interlacing.
Interlacing
الـ Interlacing يعني الصورة تبدأ تظهر تدريجي وهي بتتحمل، الأول بجودة قليلة وبعدين التفاصيل تزيد مع الوقت لحد ما الصورة تكمل.
ده بيساعد المستخدم يشوف محتوى الصورة بسرعة، خصوصا لو الاتصال بطيء. Simple animations
Logos, icons, and banners
Cartoons and line drawings
definition
PNG (Portable Network Graphics) is a lossless raster image format designed as an open and patent-free alternative to GIF. الـ PNG صيغة Raster بتستخدم Lossless Compression.
اتعملت كبديل مفتوح ومجاني لـ GIF عشان تتجنب القيود القانونية القديمة.
بتحافظ على جودة الصورة من غير فقد.
بتدعم Transparency.
بتدعم لحد حوالي 16.7 million colors.
حجمها غالبا أكبر من JPEG. Logos and user interface elements
Images requiring transparent backgrounds
Screenshots
definition
TIFF (Tagged Image File Format) is a flexible, high-quality image format used in professional and publishing environments. الـ TIFF صيغة عالية الجودة ومرنة.
بتستخدم في الطباعة الاحترافية والـ publishing.
ممكن تبقى من غير ضغط أو بضغط Lossless.
جودة الصورة فيها عالية جدا.
حجم الملفات كبير.
بتدعم معلومات إضافية عن الصورة عن طريق tags. Professional printing
Scanning and archiving
Desktop publishing
definition
WebP is a modern image format developed by Google to optimize image quality and file size for web applications. الـ WebP صيغة حديثة من Google.
هدفها تقلل حجم الصور على الويب مع الحفاظ على جودة كويسة.
معمولة كبديل عملي لـ JPEG, PNG, و GIF على الويب.
بتدعم Lossy و Lossless Compression.
حجمها أصغر من JPEG و PNG غالبا.
بتدعم Transparency و Animation. Modern websites
Performance-optimized web applications
definition
HEIF (High Efficiency Image File Format) is a modern container format designed for efficient image storage with high quality. الـ HEIF أو HEIC صيغة حديثة لتخزين الصور بكفاءة عالية.
بتدي جودة كويسة مع حجم أقل.
بتدعم تخزين أكتر من صورة جوه نفس الملف.
بتدعم Metadata.
بتدعم Transparency و HDR. Mobile photography
High-quality image storage
definition
AVIF is a modern image format that provides excellent image quality with very small file sizes using advanced compression techniques. الـ AVIF من الصيغ الحديثة جدا.
بيقدم جودة عالية مع حجم صغير جدا.
كفاءة الضغط فيه أعلى من JPEG و WebP.
بيدعم HDR, Transparency, و Animation.
صيغة Royalty-free. Next-generation web graphics
High-quality images with minimal storage requirements
definition
EPS (Encapsulated PostScript) is a vector image format used in professional graphic design and printing. الـ EPS صيغة Vector.
بتستخدم كتير في التصميم والطباعة.
بتتعمل لها scaling لأي حجم من غير فقدان جودة.
قابلة للتعديل في برامج الـ vector graphics. Logos
Illustrations
Print-ready designs
definition
RAW image formats store unprocessed image data exactly as captured by the camera sensor or scanner. صيغ الـ RAW زي .raw, .cr2, .nef, .orf بتخزن بيانات الصورة الخام من الكاميرا أو الاسكانر.
بتحافظ على أكبر قدر ممكن من معلومات الصورة والـ Dynamic Range.
بتستخدم Higher Color Depth، وده بيساعد في تعديل الإضاءة والألوان بدقة.
محتاجة برامج مخصوصة للعرض والتعديل.
بتخزن Metadata كتير عن إعدادات الكاميرا وظروف التصوير. Professional and high-end photography
Advanced image editing
Color correction
Post-processing workflows الصور اللي بتدعم Transparency زي PNG, SVG, WebP, و GIF بتندمج كويس مع الخلفيات الملونة أو اللي فيها patterns.
الصور اللي مش بتدعم الشفافية زي JPEG هتظهر بخلفية ثابتة، وغالبا بتبقى بيضاء. اختيار صيغة الصورة بيعتمد على الاستخدام، الجودة المطلوبة، حجم الملف، والخصائص اللي محتاجها.
بصمجيات لو صورة فوتوغرافية للويب ومحتاج حجم صغير، استخدم JPEG أو WebP.
لو محتاج خلفية شفافة، استخدم PNG, WebP, أو GIF حسب الحالة.
لو التصميم logo أو illustration وهيتكبر كتير، استخدم صيغة vector زي EPS. definition
Data compression is an art used to reduce the size of a particular file. الـ Data Compression بيخلي المعلومات تتخزن بشكل مضغوط وده طبعا بيقلل حجم الملف، وبالتالي بيقلل مساحة التخزين ووقت نقل البيانات.
definition
Compression techniques try to find redundant data and remove these redundancies. يعني تقنيات الضغط بتدور على البيانات المتكررة Redundant Data وتشيل التكرار ده.
الهدف في الآخر إننا نقلل حجم الملف عن طريق تقليل الـ Redundancy.
ضغط البيانات بيتقسم لنوعين كبار: Lossless Compression
Lossy Compression definition
Lossless data compression allows the original data to be perfectly reconstructed from the compressed data. في Lossless Compression نقدر نرجع الداتا الأصلية بالظبط بعد فك الضغط.
مناسب للـ illustrations، drawings، text، وأي حاجة ممكن تبان وحشة مع ضغط Lossy.
أمثلة لصيغ lossless: ا PNG, GIF.
بعض الصيغ زي TIFF و MNG ممكن تستخدم Lossless أو Lossy حسب الإعدادات. أغلب برامج الـ Lossless Compression بتعمل خطوتين: تعمل Statistical Model للداتا.
تستخدم الموديل ده عشان تحول البيانات المتكررة أو المحتملة لـ Bit Sequences أقصر. definition
Lossy data compression involves loss of information and reconstructs only an approximation of the original data. في Lossy Compression بيحصل فقد في جزء من المعلومات.
الصورة بعد فك الضغط ممكن تبان قريبة جدا من الأصل، بس مش نسخة مطابقة.
بيستخدم كتير مع: الـ Videos
الـ Audio
الـ Photographs بيدي حجم ملفات أصغر من lossless في أغلب الحالات.
أغلب خوارزميات Lossy بتسمح بتغيير نسبة الضغط، يعني تقدر تبدل بين جودة أعلى أو حجم أصغر.
مش مناسب للـ illustrations، drawings، و text عشان الـ Compression Artifacts بتبان فيها بوضوح.
أشهر مثال عليه: JPEG. في الصور الـ Raster حجم الملف بيعتمد غالبا على 3 عوامل رئيسية. الـ Image Resolution هو عدد الـ pixels في الصورة.
بيتحسب كده:
Width × Height كل ما الـ resolution يزيد، عدد الـ pixels يزيد، وحجم الملف غالبا يزيد. الـ Color Depth هو عدد الـ bits المستخدمة لتمثيل لون كل pixel.
كل ما عدد الـ Bits Per Pixel (bpp) يزيد، نقدر نمثل ألوان أكتر.
بس في المقابل حجم البيانات المطلوبة لتخزين الصورة بيزيد. الصور غالبا بتتضغط عشان نقلل حجم الملف.
ا Lossless Compression بيحافظ على كل معلومات الصورة الأصلية زي PNG و GIF.
ا Lossy Compression بيقلل الحجم عن طريق تقريب المعلومات البصرية وحذف تفاصيل أقل ملاحظة للعين زي JPEG.
حتى لو صورتين عندهم نفس resolution ونفس color depth ونفس compression format، حجمهم ممكن يختلف بسبب Image Complexity.
Image Complexity ا Image Complexity يعني كمية التفاصيل والتغيرات البصرية جوه الصورة.
الصور اللي فيها مساحات لون موحدة، ألوان قليلة، وأشكال بسيطة زي icons و line art بتبقى Low Complexity وبتتضغط كويس.
الصور اللي فيها تفاصيل كتير، textures، gradients، وتغيرات ألوان كتير زي photographs بتبقى High Complexity وبتبقى أصعب في الضغط، خصوصا مع lossless. مثال
صورة حجمها 640 × 480 pixels وعمق اللون فيها 24-bit:
640 × 480 × 24 = 7,372,800 bits يعني تقريبا:
921,600 bytes ≈ 0.88 MB دي مساحة الصورة الخام قبل أي compression. حجم الملف النهائي بعد الضغط بيعتمد على: Compression Algorithm
Compression Settings
Image Complexity تقدير تقريبي للحجم بعد الضغط:
Compressed Size ≈ Raw Size × Compression Ratio الـ Vector Images بتتصرف بشكل مختلف عن الـ raster.
حجم ملف الـ vector بيعتمد على عدد وتعقيد العناصر، مش على الـ pixel resolution.
العناصر دي ممكن تكون: Lines
Curves
Shapes عشان كده تكبير صورة vector لأي حجم مش بيزود حجم الملف.
وده بيخلي صيغ الـ vector مناسبة جدا لـ: Logos
Diagrams
Illustrations كده خلصنا الجزء الخامس والشابتر كله
اتكلمنا في المحاضره دي عن Image Formats واستعرضنا كل الصيغ: BMP (قديم من غير ضغط)، JPEG (Lossy، مناسب للصور)، GIF (256 لون و Animation)، PNG (Lossless و Transparency)، TIFF (جودة عالية للطباعة)، WebP (حديث من Google)، HEIF/HEIC (حديث للتصوير)، AVIF (أحدث وأعلى كفاءة)، EPS (Vector)، و RAW (بيانات خام من الكاميرا).
وعرفنا الفرق بين Lossless Compression (بنرجع الداتا زي ما هي زي PNG) و Lossy Compression (بنفقد جزء من المعلومات عشان حجم أصغر زي JPEG).
وفي الآخر عرفنا إزاي نحسب حجم الملف: Raw Size = Width × Height × Color Depth، وإن Compression Ratio و Image Complexity بيأثروا على الحجم النهائي.
]]></description><link>computer-graphics/lectures/chapter-1-[part-5]-foundations-of-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 1 - [Part 5] Foundations of Computer Graphics.md</guid><pubDate>Sat, 30 May 2026 23:51:46 GMT</pubDate></item><item><title><![CDATA[Foundations of Computer Graphics - Lecture 1 [Part 3]]]></title><description><![CDATA[مقدمة هنكمل الشابتر الاول, الجزء ده من المحاضرة بيتكلم عن أنظمة الإحداثيات (Coordinate Systems) في الـ Computer Graphics.
هنعرف الفرق بين Cartesian System و Screen System و Pixel Coordinates، وإزاي بنحول بينهم، وهنتعرف على Aspect Ratio definition
Coordinate System is a method of assigning numerical values to geometric points so they can be uniquely identified in space. أي graphics system محتاج طريقة يحدد بيها مكان objects, الطريقة دي هي الـ Coordinate System.
من غير coordinates مش هنعرف نحدد نقطة أو خط أو شكل موجود فين. الـ Cartesian Coordinate System هو النظام الرياضي الي كلنا عارفينه.
النقطة في 2D بتتكتب:
P(x, y) ا x: المكان الأفقي horizontal position.
ا y: المكان الرأسي vertical position.
في الرياضيات العادية: الـ origin (0, 0) بيبقى تحت على الشمال.
قيم y بتزيد لفوق. النظام بيستخدم محورين متعامدين: ا x-axis: horizontal
ا y-axis: vertical ده يعتبر الأساس النظري والرياضي اللي أنظمة الإحداثيات في graphics بتتبني عليه.
مش بيعتمد على screen أو pixels أو hardware. <img src="https://www.geogebra.org/resource/f3zjnk3h/5IrSYoN1BF75qQTS/material-f3zjnk3h.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> في الـ 3D Graphics، النقطة بتتكتب:
(x, y, z) الـ z-axis بيضيف العمق depth.
عشان كده نقدر نمثل objects في مساحة ثلاثية الأبعاد. شاشات الكمبيوتر بتستخدم conventions مختلف عن الرياضيات.
الـ origin (0, 0) بيبقى فوق على الشمال top-left corner (في الـ Cartesian system كان تحت علي الشمال).
الـ x-axis بيزيد ناحية اليمين.
<br>الـ y-axis بيزيد لتحت (في الـ Cartesian system كان بيزيد لفوق). <img src="https://www2.cs.sfu.ca/CourseCentral/166/oshklars/_images/screenCoord.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> بصمجيات
في الرياضيات y بيطلع لفوق، لكن في الشاشات y بينزل لتحت. دي احنا عارفينها من قبل كده ,الصور بتتمثل كشبكة Raster, كل cell في الـ raster هي Pixel, وكل pixel ليه لون واحد وبالـ cells بتبقي عباره عن صفوف واعمده.
(x, y) الـ columns بتتعد من الشمال لليمين بداية من 0.
<br>الـ rows غالبا بتتعد من فوق لتحت بداية من 0. <img src="https://content.wolfram.com/sites/20/2016/07/addXtoUpperSmiley1.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> مش لازم coordinates تكون integers أو pixels.
أحيانا بنستخدم وحدات قياس حقيقية , مثلا : لو مستطيل بيمثل أوضة مساحتها 15 foot × 12 foot، يبقى منطقي نستخدم: ا x من 0 لـ 15
ا y من 0 لـ 12 أحيانا graphics system بيسمحلك تحدد custom coordinate system.
الفكرة إنك بتحول نقطة من old coordinate system لـ new coordinate system مع الحفاظ على نفس relative position. عندك old limits: ا oldLeft, oldRight
ا oldTop, oldBottom و هيديلك new limits: ا newLeft, newRight
ا newTop, newBottom النقطة القديمة (oldX, oldY) بتتحول لنقطة جديدة (newX, newY). لو عندنا نقطة في "النظام القديم" وعايزين نعرف مكانها في "النظام الجديد" ، بنستخدم المعادلة دي: أي Coordinate Transformation بيتكون من خطوتين أساسيتين: ا Normalize (تحويل لنسبة): بنحول قيمة old لنسبة بين 0 و 1: ا Scale to new system: بنضرب النسبة في مدى النظام الجديد ونجمعها على البداية الجديدة: ليه الموضوع ده مهم؟
الآلية دي بتتستخدم في كل حاجة في الـ Computer Graphics: OpenGL viewport transformation
DirectX rendering pipeline
Mouse input handling
Game engines (Unity, Unreal Engine)
Window resizing
UI layout systems عايزين ننقل نقطة من نظام إحداثيات منطقي (من 0 لـ 100) لشاشة 800×600 بكسل.
المعطيات:
Old system: oldLeft = 0, oldRight = 100, oldTop = 0, oldBottom = 100
New system: newLeft = 0, newRight = 800, newTop = 0, newBottom = 600
النقطة: (oldX, oldY) = (25, 50)
حساب newX:
حساب newY:
النتيجة: (25, 50) → (200, 300)
النظام ده أشهر حاجة في OpenGL. الإحداثيات فيها بتتراوح من -1 لـ +1.
المعطيات:
oldLeft = -1, oldRight = +1, oldTop = -1, oldBottom = +1
النقطة: (0, 0) — مركز النظام المنطقي
حساب newX:
حساب newY:
النتيجة: (0, 0) → (400, 300)
المركز المنطقي بقى مركز الشاشة بالظبط. الماوس بيشتغل بإحداثيات الشاشة (pixels)، بس إحنا محتاجين نحولها لنظامنا المنطقي. نفس القانون بس بعكس الاتجاه.
المعطيات:
Screen size: 800 × 600
Logical system: من 0 لـ 100
Mouse position: (600, 150)
حساب oldX:
حساب oldY:
النتيجة: (600, 150) → (75, 25)
بكده نقدر نحول أي mouse click لإحداثيات منطقية في تطبيقنا. لو شاشة Full HD (1920×1080) ونظام منطقي من 0 لـ 10.
المعطيات:
Old system: من 0 لـ 10
New system: 1920 × 1080
النقطة: (7, 2)
حساب newX:
حساب newY:
النتيجة: (7, 2) → (1344, 216)definition
Aspect Ratio is the ratio between width and height.
<br> <img src="https://www.safelightimaging.com/uploads/b/a77f7755c45edddca229ec7ef8ce038a6b1dfc6f223341744bcc4b53c7e71b53/video-aspect-ratios_1736533139.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> القانون العام (لو عايز تحسب النسبه بتاعة الشاشه): قانون نظام الإحداثيات (لو عايز تحسب النسبة علي الـ Coordinate system): مثلا لو الـ aspect ratio عباره عن 2:1 يعني العرض ضعف الارتفاع. نظام الإحداثيات اللي بترسم عليه ليه Aspect Ratio، والشاشة اللي بتعرض عليها ليها Aspect Ratio. لو النسبتين دول مش قد بعض، الرسمة "هتتمط" أو هتبوظ. المعادلة دي بتمثل دايره:
x^2 + y^2 = 9 لو aspect ratios مش متطابقة، الـدايره ممكن تظهر شكل بيضاوي.
عشان نحافظ على دقة الأشكال، بنعدل: الـ horizontal range
أو vertical range الهدف إن الزياده تبقى متساويه في الاتجاهين يعني لو هنزود الـ horizontal يبقي كمان نزود الـ vertical.
definition
Aliasing is the visual artifact that appears when continuous geometric shapes are approximated using a finite grid of square pixels. طبعا شرحناها قبل كده ولو ناسي هنشرحها تاني.
الشاشة بتاعتنا عبارة عن شبكة مربعات صغيرة جداً اسمها "بيكسلات". المشكلة بتظهر لما تيجي ترسم خط مايل أو كيرف (دوران) على المربعات دي.
بما إن البيكسلات مربعة ومرصوصة جنب بعض، مستحيل ترسم خط مايل ناعم عليها، فبيظهر تأثير اسمه Staircase Effect (تأثير السلالم أو الـ Jaggies)، وهو إن حواف الرسمة بتبان مشرشرة وشبه درجات السلم.
بصمجيات
الـ Aliasing بيحصل بسبب اننا : بنحاول نرسم أشكال ناعمة على بيكسلات مربعة ومتقطعة (Sampling Error)، لان البكسل بياخد غير واحد بس (Limited Resolution)، بيحصل لخبطة للكمبيوتر في تحديد مكان النقطة بالظبط (Ambiguity). definition
Antialiasing is a technique used to reduce aliasing artifacts by smoothing object boundaries. الـ Antialiasing مش بيلغي aliasing, هو بيخليها أقل وضوحا للعين.
بدل ما كل pixel ياخد لون واحد ، بنحسب قد إيه الشكل مغطي الـ pixel,يعني لو بنرسم خط اسود مايل مثلا , البكسلز الي علي الطرف نديلها لون وسط مش اسود ولا ابيض فيحصل كان الحواف بتسيح في بعضها او بتبقي انعم.
<br><img alt="anti-aliasing" src="https://camo.githubusercontent.com/f8b6f14633a9b8d7cafd0e23db7008b1fc175808ffd9769eb788d1cc2ea3bd93/68747470733a2f2f686172647a6f6e652e65732f6170702f75706c6f6164732d686172647a6f6e652e65732f323032302f30342f416e74692d416c696173696e672d312e6a7067" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
الـ Antialiasing بيزود cost, بس بيحسن جودة الصوره بشكل كبير.
كده خلصنا الجزء التالت
اتكلمنا في المحاضره دي عن أنظمة الإحداثيات (Coordinate Systems) وعرفنا الفرق بين Cartesian System (الـ origin تحت على الشمال و y بتزيد لفوق) و Screen System (الـ origin فوق على الشمال و y بتزيد لتحت) و Pixel Coordinates (الـ columns من الشمال لليمين والـ rows من فوق لتحت).
وعرفنا إزاي بنحول بين Coordinate Systems باستخدام معادلات الـ mapping، وإن Aspect Ratio = Width / Height، ولو الـ Aspect Ratio بتاع نظام الإحداثيات مش مطابق للشاشة، الشكل هيتشوه.
واتكلمنا عن Aliasing - إنه تأثير السلاسل (Jaggies) اللي بيظهر لما بنحاول نرسم خطوط مائلة على شبكة Pixels، و Antialiasing اللي بيحل المشكلة دي باستخدام ألوان متوسطة على الحواف عشان تنعيم الشكل.
]]></description><link>computer-graphics/lectures/chapter-1-[part-3]-foundations-of-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 1 - [Part 3] Foundations of Computer Graphics.md</guid><pubDate>Sat, 30 May 2026 23:39:34 GMT</pubDate><enclosure url="https://www.geogebra.org/resource/f3zjnk3h/5IrSYoN1BF75qQTS/material-f3zjnk3h.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src="https://www.geogebra.org/resource/f3zjnk3h/5IrSYoN1BF75qQTS/material-f3zjnk3h.png"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Foundations of Computer Graphics - Lecture 1 [Part 2]]]></title><description><![CDATA[مقدمة هنكمل الشابتر الاول ,الجزء ده من المحاضرة بيكمل كلامنا عن تمثيل الصور الرقمية.
هنفصل أكتر في Raster Graphics و Vector Graphics، ونفهم بالتفصيل الـ Pixels و Pixel Art، وفي الآخر هنفرق بين الـ Pixels والـ Points والـ Dots. زي ما عرفنا الصور بتتخزن وتتمثل بطريقتين أساسيين: Raster Graphics
Vector Graphics. <img src="https://penji.co/wp-content/uploads/2025/02/Chart_-Vector-vs.-Raster.png.webp" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
definition
Raster Graphic, or Bitmap Graphic, is an image made from many small colored square elements called pixels or dots. الـ Raster Image بتتكون من شبكة pixels.
كل pixel ليه: لون color
مكان position الصورة بتتحدد بحاجتين مهمين: ا Resolution: العرض × الارتفاع بالـ pixels
ا Color Depth: عدد الـ bits المستخدمة عشان تمثل لون كل pixel مناسبة للصور الواقعية photographs.
بتتعامل كويس مع الصور المعقدة اللي فيها تغيرات ألوان بسيطة وتدريجات كتير.
سهل تعدل على pixels معينة جوه الصورة.
بتستخدم في الـ Pixel art , Web images بتفقد الجودة لما تكبرها بسبب الـ Pixelation.
الصور الـ high-resolution بتاخد مساحه كبيره.
صعب تعدل شكل معين لوحده من غير ما تأثر على باقي الصورة، عشان الصورة كلها pixels مش objects مستقلة.
definition
Vector Graphics represent images using mathematical equations that define shapes, lines, curves, and colors. الـ Vector Graphics بتتمثل بمعادلات رياضية وبتبقي عباره عن: Points
Lines
Curves
Polygons مناسبه للـ logos والـ icons والرسومات اللي بتتغير أحجامها كتير.
حجم الملفات غالبا صغير، خصوصا مع الأشكال البسيطة.
سهل تعدل shapes معينة لوحدها.
دقيقة جدا، عشان كده مناسبة للـ technical drawings والـ designs. مش مناسبة للصور الواقعية أو الـ photorealistic images.
عمل تفاصيل كتير جدا بالـ vector ممكن يبقى time-consuming.
الـ rendering بتاع vector images المعقدة ممكن يحتاج processing power أكتر. لما تحتاج صور واقعية زي photographs.
لما تكون شغال على textures أو gradients معقدة.
لما الصورة هتتعرض بحجم ثابت أو resolution ثابت زي web images. لما تحتاج صورة قابلة للتكبير والتصغير زي logos و icons.
لما تعمل illustrations أو technical drawings.
لما الصورة هتتطبع بأحجام مختلفة زي business cards أو billboards.
بصمجيات لو عايز تفاصيل واقعية يبقى Raster, لو عايز shapes وخطوط وlogo ومحتاجة scaling يبقى Vector. definition
Pixel is short for Picture Element, and it is the smallest addressable element in a digital image. الـ Pixel هو أصغر وحدة ممكن تتحكم فيها في الصورة الرقمية وهو حجر الاساس للـ Raster Graphics.
الـ pixels بتترتب في شبكة 2D منتظمة وعدد الـ pixels هو اللي بيحدد الـ Resolution. الصورة بتتكون من rows و columns وكل pixel ليه مكان في الشبكة.
الـ resolution بيتكتب بالشكل ده: width × height
مثال: 1920 × 1080 يعني 1920 pixels أفقي و 1080 pixels رأسي. كل ما عدد الـ pixels يزيد، الصورة تبقى أوضح وأحد, أمثلة على resolutions: 320 × 200: low resolution
1920 × 1080: Full HD
3840 × 2160: 4K في الصور الـ grayscale أو black-and-white، كل pixel بيتخزن كقيمة intensity, ممكن تبقى من: 0.0: black
1.0: white بس عشان التخزين binary، غالبا بتتخزن كـ integer من: 0: black
255: white في الصور الملونة، كل pixel بيتكون من 3 components: Red R
Green G
Blue B كل component غالبا بيتخزن في 8-bit من 0 لـ 255.
عدد الألوان الممكنة في RGB 24-bit: 256 × 256 × 256 = 16,777,216 colors صورة resolution بتاعها 800 × 600 فيها: 800 × 600 = 480,000 pixels زيادة الـ resolution بتحسن الجودة عشان بتزود عدد الـ pixels المتاحة لتمثيل التفاصيل الصغيرة.
definition
Pixel Art is a form of digital art created using raster graphics software, where images are edited at the pixel level. الـ Pixel Art بيتم عن طريق تعديل pixels واحدة واحدة أو باستخدام algorithms.
كان منتشر جدا في الألعاب القديمة لان ساعتها كانت امكانيات الاجهزه ضعيفه, بس لسه مستخدم لحد دلوقتي عشان شكله المميز والـnostalgia.
الـ Pixel Art ممكن يتعمل بالايد أو بـ algorithms, بيستخدم عدد ألوان محدود عشان يبقي بسيط , وبيبقي فيها عيوب مقصودة بتدي character للشكل. الـ Pixel هو أصغر عنصر في electronic image (صور علي الشاشات مش صور حقيقية بتترسم علي ورق).
كل ما عدد الـ pixels يزيد، جودة الصورة تزيد.
في الشاشات الملونة، الـ pixel غالبا بيتكون من 3 subpixels,ا red, green , blue الـ Point واختصارها pt هي وحدة قياس في typography.
بتستخدم لقياس ارتفاع الخطوط font heights والـ 1 point بتساوي 1/72 inch.
علاقة الـ points بالـ pixels بتعتمد على screen resolution أو PPI. الـ Dot هي أصغر وخدة physical بيعملها بستخدمها الطابعات (printers) على الورق.
بيتقاس غالبا باستخدام DPI,معناها Dots Per Inch Pixels vs Points: الـ pixels هيا screen-based وبتعتمد على PPI.
الـ points عباره عن وحدة قياس ثابتة. Points vs Dots: الـ points للتصميم والـ typography.
الـ dots للطباعة.
علاقة الاتنين بتعتمد على DPI بتاع الطابعة. Pixels vs Dots: الـ pixels رقمية digital.
الـ dots مادية physical. بصمجيات Pixel للشاشة.
Point للخطوط والقياسات الطباعية.
Dot للطابعة. كده خلصنا الجزء التاني
اتكلمنا في المحاضره دي عن تمثيل وتخزين الصور الرقمية وعرفنا بالتفصيل الفرق بين Raster Graphics (صور من Pixels، بتعتمد على Resolution، بتتبكسل لما تكبر) و Vector Graphics (صور من معادلات رياضية، scalable، مناسبة للوجوهات).
وعرفنا الـ Pixel بالتفصيل - إنه أصغر وحدة في الصورة الرقمية، وإن الـ Resolution بتتحسب بـ Width × Height، وإن كل Pixel في الصور الملونة بيتكون من 3 مكونات R, G, B.
واتكلمنا عن Pixel Art وإنه كان منتشر في الألعاب القديمة ولسه مستخدم لغاية دلوقتي لشكله المميز.
وفي الآخر فرقنا بين Pixel (للشاشة)، Point (للطباعة والخطوط و 1 pt = 1/72 inch)، و Dot (أصغر وحدة في الطباعة وتتقاس بـ DPI).
]]></description><link>computer-graphics/lectures/chapter-1-[part-2]-foundations-of-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 1 - [Part 2] Foundations of Computer Graphics.md</guid><pubDate>Sat, 30 May 2026 23:26:18 GMT</pubDate><enclosure url="https://penji.co/wp-content/uploads/2025/02/Chart_-Vector-vs.-Raster.png.webp" length="0" type="image/webp"/><content:encoded>&lt;figure&gt;&lt;img src="https://penji.co/wp-content/uploads/2025/02/Chart_-Vector-vs.-Raster.png.webp"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Foundations of Computer Graphics - Lecture 1 [Part 1]]]></title><description><![CDATA[مقدمة المحاضرة دي اطول محاضرة في المنهج والدكتور مقسمها خمس اجزاء, فيها أهم مفاهيم الـ Computer Graphics.
هنتكلم عن 2D Graphics، الفرق بين Raster و Vector، الـ Pixels، الـ Coordinate Systems، مشكلة Aliasing، وكمان Color Models و Color Depth ودي حاجات كلها هنتطرق ليها بعدين في محاضرات منفصله بتفصيل اكتر. definition
Computer graphics refers to images created or manipulated by computers, including the hardware and software systems used. الـ Computer graphics هي مجال بيهتم بإنشاء ومعالجة الصور والنماذج باستخدام الكمبيوتر، سواء كانت ثنائية أو ثلاثية الأبعاد أو متحركة. وبيستخدم في مجالات كتيرة منهنا الأفلام والألعاب وتوليد الصور وعرضها على الشاشات. الصور الرقمية في الـ Computer Graphics ليها طريقتين أساسيين للتكوين: Raster Graphics:
الصورة بتتكون من عدد كبير جدا من الـ pixels (مربعات صغيرة ملونة).
كل ما عدد الـ pixels يزيد الصورة تبقى أوضح.
النوع ده مناسب للصور الحقيقية والفوتوشوب، لكن لو كبرت الصورة جامد الجودة بتقل وتبقى مبكسلة. Vector Graphics:
الصورة بتتعمل باستخدام خطوط وأشكال ومعادلات رياضية بدل الـ pixels.
عشان كده تقدر تكبرها أو تصغرها من غير ما الجودة تبوظ.
النوع ده مناسب للوجوهات والأيقونات والرسومات الهندسية. definition
2D Computer Graphics refers to the creation, manipulation, and rendering of images in a two-dimensional space. ا 2D Graphics بتتعامل مع صور مسطحة، بعكس 3D Graphics اللي فيها عمق z-axis.
المساحة هنا متعرفة بمحورين: x-axis: أفقي horizontal
y-axis: رأسي vertical دي أهم التقنيات اللي بتظهر في شغل 2D Graphics.
definition
Rendering is the process of generating a 2D image from models, data, or mathematical descriptions. الـ Rendering هو عملية تحويل المعادلات أو الداتا أو الاكواد لصورة 2D تتعرض على الشاشة ونقدر نشوفها. Converts vector-based shapes into a grid of pixels (bitmap) الـRasterization بيحول الاشكال الي معموله بالـVector لشبكة Pixels أو Bitmap.
بعد التحويل، النظام بيحدد لون كل Pixel حسب الشكل الأصلي, يعني بيتحول من شكل رياضي لصورة مبنية من مربعات صغيرة. Reduces visual artifacts such as jagged edges by blending pixel colors along the edges of shapes الـ Anti-aliasing (او تنعيم الحواف) وظيفته إنه يشيل الحواف المشرشرة أو اللي طالعة شبه السلالم (jagged edges) على أطراف الرسومات والمجسمات عشان تبان طبيعية وواقعية.
يعني كأنه بيعمل "صنفرة" للبيكسلات ويسيح ألوانها في بعضها عشان يخلي حواف الحاجة ناعمة ومريحة للعين بدل ما تبقى مبكسلة.
هنشرحه بتفصيل اكتر بعدين <img alt="anti-aliasing" src="https://camo.githubusercontent.com/f8b6f14633a9b8d7cafd0e23db7008b1fc175808ffd9769eb788d1cc2ea3bd93/68747470733a2f2f686172647a6f6e652e65732f6170702f75706c6f6164732d686172647a6f6e652e65732f323032302f30342f416e74692d416c696173696e672d312e6a7067" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
Uses patterns of pixels to simulate colors and gradients that may not be available in a limited color palette. الـ Dithering هو "خدعة بصرية" بيعملها الكمبيوتر عن طريق إنه بيستخدم انماط معينه من الـ Pixelsعشان يعوض نقص الألوان المتاحة في الصورة.
يعني من الاخر بيرص بيكسلات بألوان مختلفة جنب بعضها بنمط معين عشان يحاكي لون جديد.
<br><img alt="Dithering" src="https://wiki.snapmaker.com/luban/luban_ui/laser/configuration_bar/639.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">definition
Transformations modify the position, size, orientation, or shape of objects in a 2D space. الـ Transformations بيغير مكان أو حجم أو اتجاه أو شكل العنصر في الـ 2D.
بتتمثل باستخدام transformation matrices.
definition
Clipping restricts rendering to a defined region such as a viewport or window. الـ Clipping يعني بنحدد منطقة ونرسم بس الجزء اللي جوه المنطقة دي.
أي جزء خارج الـ viewport أو الـ المنطقة الي حددناها بيتقص ومبيتعرضش.
<br><img alt="clipping" src="https://www.baeldung.com/wp-content/uploads/sites/4/2023/06/ClippingStarObject-6.png" referrerpolicy="no-referrer" target="_self" class="is-unresolved">بصمجيات من الاخر الـ Point Clipping بتتعامل مع النقط (points) والـ Line Clipping بيتعامل مع الخطوط (lines) اما الـ Polygon Clipping بيتعامل مع الـ polygons الي هيا الاشكال المعقده بصمجيات ا Cohen بتتعامل مع الخطوط العادية , اما Liang-Barsky بتستخدم parametric equations, و Sutherland بقي بتتعامل مع الـ polygons الي هيا الاشكال المعقده definition
Compositing combines multiple images, layers, or graphical elements to produce a final image. الـ Compositing يعني تركيب أكتر من صورة أو طبقة فوق بعض عشان نطلع صورة نهائية.
بيستخدم في: Image editing (لو بتستخدم فوتوشوب هتبقي عارف الكلام ده )
Special effects
UI rendering بصمجيات الـ Alpha Blending بيستخدم الـ transparency , الـ Masking بيحدد حته تظهر (revealed) وحته لا (hidden), الـ Layering من اسمها بتبقي separate layers definition Shading simulates lighting effects in 2D graphics to create the illusion of depth, texture, and material properties. الـ Shading بيحاول يخلي عنصر 2D يبان فيه إحساس بالإضاءة والعمق والخامة.
يعني مش بيحول الصورة لـ 3D، بس بيخليك تحس انها 3D.
<br> <img src="https://i.pcmag.com/imagery/encyclopedia-terms/flat-shading-_shading.fit_lim.size_1050x.gif" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
بصمجيات الـ Flat بيعمل شكل وبدائي وبيبقي لون واحد (single color)، الـ Gouraud بيعمل تدرج في الالوان (gradient)، الـ Phong بيبقي واقعي جداً (realistic lighting.)، والـ Shadow من اسمه بيعمل اسقاط للظلال (shadow buffer) definition
Text rendering focuses on displaying high-quality text that is visually clear and readable. الـ Text Rendering مسؤول عن عرض النصوص بشكل واضح وحاد وقابل للقراءة.
بيتعامل مع: Fonts
Spacing
Visual clarity
Readability on screens and printed media definition
Vector fonts represent characters using mathematical curves, mainly Bezier curves. الـ Vector Fonts بتمثل الحروف بمنحنيات ومعادلات رياضية (زي الـ vector images بالظبط).
ميزتها الأساسية إنها بتتكبر وتصغر من غير ما تفقد الجودة(برده زي الـ vector images). Scalable.
Resolution-independent. محتاجة resources أكتر في الـ rendering.
definition
Bitmap fonts store characters as fixed-size pixel grids. الـ Bitmap Fonts بتخزن كل حرف كشبكة pixels جاهزة بحجم معين (زي الـ raster images). Fast rendering.
Efficient. Not scalable.
لما تكبرها بتبكسل.
<br> <img src="https://business.oregonstate.edu/sites/default/files/styles/large/public/2025-07/vector_bitmap.jpg.webp?itok=GM989ndm" referrerpolicy="no-referrer" target="_self" class="is-unresolved">
definition
Kerning adjusts spacing between specific pairs of characters to improve readability and visual balance. الـ Kerning بيتحكم في المسافة الي بين الحروف.
مثلا (AVATAR) -&gt; (A V A T A R)
definition
Ligatures replace certain character pairs with a single stylized glyph. ا Ligatures بيتحكم في طريقة ربط الحروف مع بعضها (زي الانجليزي المشبك كده).
الهدف إنها تحسن الشكل الجمالي aesthetics والقراءة readability.
<br> <img src="https://www.thoughtco.com/thmb/XJdl7ssTe3yfxjvOwsjPb2Gd3kc=/750x0/filters:no_upscale():max_bytes(150000):strip_icc():format(webp)/ligatures-typography-485e1c327ac04091abd2691104ead363.jpg" referrerpolicy="no-referrer" target="_self" class="is-unresolved" style="width: 400px; max-width: 100%;"> زي الصور, لما النص يتعرض على شاشة الحواف ممكن تبان متكسرة عشان الشاشة مبنية من pixels.
ا Anti-aliasing بينعم حواف النص عن طريق مزج pixels الحواف مع الألوان اللي حواليها.
definition
Subpixel rendering improves text clarity by using the red, green, and blue subpixels of LCD displays. الـ Subpixel Rendering بتحسن حدة النصوص عن طريق انها بتستغل إن كل pixel في شاشة LCD غالبًا متكوّن من subpixels: Red
Green
Blue كده خلصنا الجزء الأول
اتكلمنا في المحاضره دي عن مقدمة في الـ Computer Graphics وعرفنا إنها مجال بيهتم بإنشاء ومعالجة الصور باستخدام الكمبيوتر.
وعرفنا الفرق بين Raster Graphics (صورة من Pixels) و Vector Graphics (صورة من معادلات رياضية)، وإن 2D Graphics بتشتغل على محورين x و y.
بعد كده عرفنا أهم تقنيات الـ 2D Graphics: ا Rendering وتحويل الداتا لصورة (وفيه Rasterization, Anti-aliasing, Dithering)
ا Transformations اللي بتغير موقع/حجم/اتجاه العناصر (Translation, Scaling, Rotation, Shearing, Reflection)
ا Clipping وقص الأجزاء الخارجة عن المنطقة المحددة (Point, Line, Polygon ومعاهم Algorithms زي Cohen-Sutherland و Liang-Barsky و Sutherland-Hodgman)
ا Compositing وتركيب الطبقات (Alpha Blending, Masking, Layering)
ا Shading اللي بيعمل إحساس بالعمق والإضاءة (Flat, Gouraud, Phong, Shadow Mapping) واخر حاجه اتكلمنا عن Text Rendering وعرفنا فيه Vector Fonts (TTF, OTF) و Bitmap Fonts و Kerning و Ligatures و Anti-aliasing للنصوص و Subpixel Rendering.
]]></description><link>computer-graphics/lectures/chapter-1-[part-1]-foundations-of-computer-graphics.html</link><guid isPermaLink="false">2 - Areas/College/Computer Graphics/lectures/Chapter 1 - [Part 1] Foundations of Computer Graphics.md</guid><pubDate>Thu, 28 May 2026 19:36:38 GMT</pubDate><enclosure url="https://camo.githubusercontent.com/f8b6f14633a9b8d7cafd0e23db7008b1fc175808ffd9769eb788d1cc2ea3bd93/68747470733a2f2f686172647a6f6e652e65732f6170702f75706c6f6164732d686172647a6f6e652e65732f323032302f30342f416e74692d416c696173696e672d312e6a7067" length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src="https://camo.githubusercontent.com/f8b6f14633a9b8d7cafd0e23db7008b1fc175808ffd9769eb788d1cc2ea3bd93/68747470733a2f2f686172647a6f6e652e65732f6170702f75706c6f6164732d686172647a6f6e652e65732f323032302f30342f416e74692d416c696173696e672d312e6a7067"&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Input and Output (Chapter 7)]]></title><description><![CDATA[مقدمة دي اخر محاضرة معانا في المنهج واسهل واحده ,هناخد فيها إزاي نعمل read , write في الـ Prolog. الـ write هي Predicate جاهز في الـ Prolog بيطبع أي Term على الشاشة.
?- write(c), write(8), write(r).
c8r
?- write([a, b, c, d]).
[a,b,c,d] زي بقيت لغات البرمجع لو عايز تطبع نص (String)، لازم تحطه بين Single Quotes ('...').
?- write(Hello World).
ERROR: syntax error % ?- write('Hello World').
Hello World الـ Prolog فيه دوال جاهزة لتنسيق المخرجات: ا nl : تطبع سطر جديد (New line)
ا tab(N) : تطبع عدد N من المسافات (White spaces) مثال:?- write(a), tab(3), write(b), nl, tab(1), write(c). % النتيجة على الشاشة:
% a b
% c
شرح الـ Output write(a) → تطبع a
tab(3) → تطبع 3 مسافات
write(b) → تطبع b
nl → تنزل لسطر جديد
tab(1) → تطبع مسافة واحدة
write(c) → تطبع c الـ read بيقرا الـ Term من المستخدم. بيستنى المستخدم يكتب حاجة وينهيها بـ Full-stop (.)
?- write('What is your name?'), nl, read(X), write('Greetings '), write(X).
What is your name?
|: tamer.
Greetings tamer
X = tamer.
لازم بعد ما تكتب الـ input تحط نقطه ' . ' في الاخر عشان البرنامج يعرف انك خلصت
دالة بتاخد رقم وتطبع الـ Cube بتاعه:
cube :- write('enter number'), nl, read(N), C is N * N * N, write(C).
?- cube.
enter number
|: 2.
8
true.
د- الة بتقرا أرقام لغاية ما المستخدم يقول stop:cube :- write('Next item, please: '), read(X), process(X). process(stop) :- !. % لو المستخدم كتب stop بتوقف process(N) :- C is N * N * N, write('Cube of '), write(N), write(' is '), write(C), nl, cube. % ارجع تاني واقرا رقم جديد
?- cube.
Next item, please: 2.
Cube of 2 is 8
Next item, please: 3.
Cube of 3 is 27
Next item, please: stop.
true.
الفكرة
الـ Recursion هي اللي بتخلّي البرنامج يفضل شغال، والـ process(stop) :- !. هي اللي بتوقف التكرار لما المستخدم يدخل stop.
نفس الدالة بتاعة الشابتر الي فات لما كنا بنستخدم الـ Cut لكن دلوقتي بتقرا X من المستخدم بدل ما نبعتها كـ Argument.function :- read(X), process(X). process(X) :- X =&lt; 3, Y is 2 * X, write(Y).
process(X) :- X &gt; 3, Y is 4 * X + 5, write(Y).
function :- read(X), process(X). process(X) :- X =&lt; 3, !, Y is 2 * X, write(Y).
process(X) :- Y is 4 * X + 5, write(Y).
?- function.
|: 2.
4
true. ?- function.
|: 5.
25
true. هنا بنعمل Validation عشان نتاكد ان X مش سالب،لو سالب هنديله ايرور. لو موجب، هنحسب الجذر التربيعي.
sr(X, Y) :- X &lt; 0, !, write('x is negative').
sr(X, Y) :- Y is X ^ 0.5.
sqr :- write('enter number: '), read(X), process(X). process(X) :- X &lt; 0, !, write('number is negative').
process(X) :- Y is X ^ 0.5, write(Y).
?- sqr.
enter number: 9.
3
true. ?- sqr.
enter number: -4.
number is negative
true. حل امثلة المحاضرة والسكاشن من هنا : <a data-href="Chapter 7 - Practice" href="prolog/practice-examples/chapter-7-practice.html" class="internal-link" target="_self" rel="noopener nofollow">Chapter 7 - Practice</a>]]></description><link>prolog/summaries/chapter-7-input-and-output.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Summaries/Chapter 7 - Input and Output.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Controlling Backtracking (Chapter 6)]]></title><description><![CDATA[مقدمة في المحاضرة دي هنتكلم عن الـ Backtracking، اللي هي خاصية في الـ Prolog، وإزاي نتحكم فيها.
هنعرف إيه هي مشكلة الـ Backtracking الزيادة (Uncontrolled backtracking) اللي بتسبب عدم كفاءة.
هنستخدم الـ Cut (!) عشان نتحكم في الـ Backtracking ونسرّع البرنامج.
هنفرق بين الـ Green Cut والـ Red Cut.
هنشوف أمثلة كتير زي الـ max، تصنيف الأعداد (موجب/صفر/سالب)، تقسيم الـ Lists، وتصنيف لاعيبة التنس. الـ Backtracking هو خاصية في الـ Prolog. معناه إن الـ Prolog بيرجع ورا خطوه وبيحاول يحقق الـ Goal بطريقة تانية.
مثال:likes(mary, food).
likes(mary, tea).
likes(john, tea).
likes(john, mary). لما نسأل السؤال ده:
?- likes(mary, X), likes(john, X).
% عايزين حاجة ماري وجون الاتنين بيحبوها الـ Prolog بيشتغل كالتالي: الـخطوه الأول likes(mary, X) ينجح و X = food, يعني ماري بتحب food.
الـخطوه التانية, هنشوف هل جون كمان بيحب food ولا لا : likes(john, food) الاجابه لا.
هنا هنرجع خطوه لورا ونجرب حاجة تانية غير food.
رجعنا للخطوه الاولي وهنجرب الحاجه الي بعدها الي هيا X = tea , لقينا ان ماري بتحب الـ tea فعلا.
الخطوه التانية نشوف هل جون كمان بيحب tea ولا لا, likes(john, tea) هتبقي true يعني هو كمان بيحب tea فعلا.
كده وصلنا خلاص للي عايزينه.
مش لازم تفهم الحته دي عشان تعرف تحل الـ Prolog بيستخدم الـ Backtracking تلقائياً عشان يحقق الـ Goals ، لكن في بعض الأحيان الـ Backtracking ده بيسبب مشاكل ف الاداء (Inefficiency) في البرنامج.
المشكلة
أحياناً بنحاول ندور علي اجابات ونجرب حاجات ملهاش لازمة لأننا عارفين إنها مش هتنجح، لكن الـ Prolog مش عارف كده فبيضيع وقت في الـ Backtracking. الحل: نستخدم الـ Cut عشان نتحكم في الـ Backtracking ونمنعه في الأماكن المناسبة. الـ Cut هو Built-in predicate في الـ Prolog وبيتكتب كعلامة !. عندنا العلاقة بين X و Y مكونة من تلات قواعد: ا Rule 1: إذا X &lt; 3 يبقى Y = 0
ا Rule 2: إذا 3 =&lt; X &lt; 6 يبقى Y = 2
ا Rule 3: إذا X &gt;= 6 يبقى Y = 4 f(X, 0) :- X &lt; 3. % Rule 1
f(X, 2) :- 3 =&lt; X, X &lt; 6. % Rule 2
f(X, 4) :- 6 =&lt; X. % Rule 3 المشكلة: لو X = 1، اول rule هتنجح، بس الـ Prolog بيكمل ويجرب بقيت الـ rules يعني هيكمل ويجرب Rule 2 , 3 رغم اننا عرفنا النتيجه خلاص.
f(X, 0) :- X &lt; 3, !. % Rule 1
f(X, 2) :- 3 =&lt; X, X &lt; 6, !. % Rule 2
f(X, 4) :- 6 =&lt; X. % Rule 3 هنا احنا مشيلناش او عدلنا اي حاجة في الكود , حطينا بس ! في اخر الكلام , بحيث نقول للبرنامج : لو الـ rule اتحققت يبقي الباقيين اكيد غلط ومتكملش الي بعده.
والـ Green cut لو شلته الكود هيشتغل زي ماهو ومفيش أي حاجة هتبوظ، بس البرنامج هيبقى أبطأ شوية لأنه هينزل علي السطور التانية على الفاضي.
مكان الـ green cut بيبقي بعد الشروط زي مثلا X &lt; 3 وقبل الـ assignment ( الي هو is او = لو فيه ).
f(X, 0) :- X &lt; 3, !.
f(X, 2) :- X &lt; 6, !.
f(X, 4). اما هنا لو لاحظت احنا غيرنا في الكود نفسه يعني : في السطر التاني : انته مكتبتش إن 3 =&lt; X ، إنت اعتمدت إن البرنامج طالما وصل للسطر التاني ومعداش من السطر الأول، يعني أكيد الـ مش أصغر من 3.
وفي السطر التالت : انته مكتبتش أي شروط, انته قلتله لو وصلت هنا يبقى الـ على طول، لأنك واثق إن الـ ! اللي في السطور اللي فوق منعت أي رقم أصغر من 6 إنه يوصل هنا. طبعا النوع ده مش آمن , لانك لو شلت الـ cuts الكود مش هيشتغل او هيطلع نتايج غلط.
max(X, Y, Max) :- X &gt;= Y, Max = X.
max(X, Y, Max) :- X &lt; Y, Max = Y. القاعدتين Mutually Exclusive (واحدة بس هي اللي هتشتغل).
max(X, Y, Max) :- X &gt;= Y, !, Max = X.
max(X, Y, Max) :- Max = Y. هنا شيلنا الشرط X &lt; Y من القاعدة التانية، واعتمدنا على الـ Cut إنه يمنع الوصول للقاعدة التانية لو X &gt;= Y كانت صحيحة.
لاحظ هنا مكان الـ ! كان بعد الشرط X &gt;= Y وقبل الـ assignment الي هو Max = X
بدون Cut:f(X, Y) :- X =&lt; 5, Y is 3 * X.
f(X, Y) :- X &gt; 5, Y is X ** 2 + 5.
باستخدام Cut:f(X, Y) :- X =&lt; 5, !, Y is 3 * X.
f(X, Y) :- Y is X ** 2 + 5.
% لو الرقم اكبر من صفر يبقي موجب ومتكملش
class(Number, positive) :- Number &gt; 0, !. % لو الرقم صفر يبقي الناتج زيرو مفيش حاجة تعملها
class(0, zero) :- !. % لو وصلت لهنا يبقي مش موجب ومش صفر يبقي اكيد الرقم سالب
class(Number, negative).
ملاحظة
القاعدة التالتة مالهاش شرط (No condition) لأنها الـ Default. لو الرقم مش أكبر من 0 ومش 0، يبقى هو سالب أكيد.
الدالة split(Numbers, Positives, Negatives) بتقسم List الأرقام لـ List اللي فيها الموجبين (فيها الصفر) و List اللي فيها السالبين.split([], [], []).
split([X|L], [X|L1], L2) :- X &gt;= 0, !, split(L, L1, L2).
split([X|L], L1, [X|L2]) :- split(L, L1, L2).
تجربة:?- split([3, -1, 0, 5, -2], Pos, Neg).
Pos = [3, 0, 5],
Neg = [-1, -2].
عندنا Database لماتشات تنس:beat(tom, jim).
beat(ann, tom).
beat(pat, jim).
وعايزين نصنف كل لاعب لواحدة من تلات فئات:
Winner: كسب كل الماتشات اللي لعبها
Fighter: كسب وكمان خسر ماتشات
Sportsman: خسر كل الماتشات اللي لعبها
class(X, fighter) :- beat(X, _), beat(_, X), !.
class(X, winner) :- beat(X, _), !.
class(X, sportsman) :- beat(_, X).
تجارب:?- class(tom, C). % Tom beat(jim) and beat(ann,tom) ➔ C = fighter
?- class(ann, C). % Ann beat(tom) no one beat(ann) ➔ C = winner
?- class(jim, C). % Jim no one beat(jim) و beat(pat,jim) و beat(tom,jim) ➔ C = sportsman
member(X, [X|L]).
member(X, [Y|L]) :- member(X, L).
?- member(X, [a, b, c]).
X = a ;
X = b ;
X = c.
member1(X, [X|L]) :- !.
member1(X, [Y|L]) :- member(X, L).
?- member1(X, [a, b, c]).
X = a ;
no
الفرق ا member1 بتستخدم Cut عشان توقف البحث بعد أول حل. مفيدة لو عايزين بس نعرف إن العنصر موجود، مش محتاجين كل الأماكن اللي هو موجود فيها. عايزين دالة add(X, L, L1) تضيف العنصر X للـ List L. لو X موجود أصلاً، متضفش ومترجعش نفس الـ List.add(X, L, L) :- member(X, L), !.
add(X, L, [X|L]).
تجارب:?- add(a, [b, c], L). % a مش موجود ➔ L = [a, b, c]
?- add(X, [b, c], L). % X = b, L = [b, c]
?- add(a, [b, c, X], L). % X = a, L = [b, c, a]
?- add(a, [a, b, c], L). % a موجود ➔ L = [a, b, c]
?- add(a, [a, b, c], L).
L = [a, b, c] ; % الأول: ممنوعش التكرار
L = [a, a, b, c]. % التاني: أضاف العنصر عادي قبل ما تدخل علي الامتحان حل امثلة المحاضرة والسكاشن من هنا : <a data-href="Chapter 6 - Practice" href="prolog/practice-examples/chapter-6-practice.html" class="internal-link" target="_self" rel="noopener nofollow">Chapter 6 - Practice</a>]]></description><link>prolog/summaries/chapter-6-controlling-backtracking.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Summaries/Chapter 6 - Controlling Backtracking.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lists and Arithmetic (Lecture 5 Part 2)]]></title><description><![CDATA[مقدمة المحاضرة بتتكلم عن الـ List وهي محاضره دسمه جدا ومهمه جدا مينفعش تتكروت.
هنفهم المحاضرة دي إزاي الـ List بتتكون من Head و Tail، وإزاي بنعمل Unification بين الـ Lists.
هنتعلم العمليات الأساسية على الـ Lists زي الـ Membership، الـ Append، الإضافة، الحذف، التقسيم (Decomposing)، والتباديل (Permutations). الـ List هي مجموعة من البيانات المرتبة (Ordered Data). ممكن تحتوي على صفر أو أكتر من العناصر.
العناصر بتكون محطوطة بين أقواس مربعة [ ] وبتتصل ببعضها بفاصلة ,. أمثلة:
ا [12, city, ann, bb] -&gt; دي List فيها 4 عناصر.
ا [a] -&gt; دي List فيها عنصر واحد بس.
ا [] -&gt; دي Empty List (ليست فاضية).
ا [34, tom, [2,3]] -&gt; دي List فيها 3 عناصر، والعنصر التاني عبارة عن List جواها عنصرين. أي List (مش فاضية) نقدر نقسمها لجزأين أساسيين: الـ Head (الرأس): هو أول عنصر في الـ List.
الـ Tail (الديل): هو باقي عناصر الـ List، ودايمًا الـ Tail لازم يكون List. مثال
لو عندنا الـ List دي: [ann, tennis, tom, king] الـ Head هنا هو ann
الـ Tail هنا هو [tennis, tom, king] عشان نفصل الـ Head عن الـ Tail في Prolog بنستخدم الرمز | (Vertical bar):
|?- [a, b, c, d] = [Head | Tail].
Head = a, Tail = [b, c, d]. |?- [a] = [H | T].
H = a, T = []. % the Tail of one element is an Empty List |?- [] = [H | T].
false. % Empty List does not have a Head or a Tail
l سحب أكتر من عنصر
نقدر نسحب أكتر من عنصر في البداية كـ Heads (يعني نعمل اتنين هيد او اكتر) ونخلي الباقي Tail:
|?- [H1, H2 | Tail] = [mia, vincent, jules, yolanda].
H1 = mia, H2 = vincent, Tail = [jules, yolanda]. الـ Lists ممكن يحصلها Unify (تتطابق) مع متغيرات أو مع Lists تانية.
عشان يحصل Unification بين 2 Lists، لازم يكون عندهم نفس الطول، وكل عنصر في الـ List الأولى يقدر يحصله Unify مع العنصر اللي بيقابله في الـ List التانية.
أمثلة:|?- [Any, list, 'of elements'] = X.
X = [Any, list, 'of elements']. |?- [a, B, c, D] = [A, b, C, d].
A = a, B = b, C = c, D = d. |?- [[X, a]] = [b, Y].
false. % طول الأولى 1 (فيها ليست واحدة)، وطول التانية 2 |?- [(a+X), (Y+b)] = [(W+c), (d+b)].
W = a, X = c, Y = d. العمليات دي تعتبر أهم جزء في الـ Lists، وكلها بتعتمد على فكرة الـ Recursion (إن الـ Rule بتنادي نفسها) وإننا بنقسم الـ List لـ Head و Tail. دلوقتي هنفهم كل عملية بتشتغل إزاي بالتفصيل: العملية دي بتجاوب على سؤال: "هل العنصر ده موجود جوه الـ List ولا لأ؟" عشان نعرف بتشتغل ازاي هنقسم الموضوع لجزئين: الـ Base Case (حالة التوقف): يعني بصيت في أول الليست (الـ Head) ولقيت الحاجة اللي بدور عليها.
الـ Recursive Case (حالة التكرار): الحاجة الي بدور عليها مش في أول الليست، فهسيب اول الليست (الـ Head) وأروح أدور في باقي الليست (الـ Tail). الحالة الأولى: العنصر X هو الـ head بتاع الليست: member(X, [X | Tail]). الحالة التانية: العنصر X مش هو الـ head ، فهنروح ندور عليه في الـ Tail member(X, [Head | Tail]) :- member(X, Tail). فيبقي التعريف الكامل بتاعها : member(X, [X | Tail]). member(X, [Head | Tail]) :- member(X, Tail). Trace : ?- member(b, [a, b, c]). الاول بنسال : هل b هي الـ Head a؟ لأ. (بندخل في الحالة التانية وندور في الـ Tail [b, c]).
هل b هي الـ Head بتاع [b, c]؟ أيوة! (هنا الـ Base case بتتحقق ويرجع true). بتستخدم عشان ندمج 2 lists في بعض ونطلع بـ List تالتة. append(L1, L2, L3).
فكرتها إننا بناخد عناصر اول List نشيلهم على جنب، لحد ما اول List تفضى، وبعدين ندمجها مع التانية، وبعدين نرجع العناصر اللي شيلناها. الـ Base Case: لو الـ List الأولى فاضية []، يبقى لو لزقناها مع أي List تانية L هيدينا نفس الـ List التانية L.
الـ Recursive Case: لو الـ List الأولى مش فاضية، بناخد الـ Head بتاع اول List نحطه كـ Head للناتج النهائي، ونعمل append للـ Tail بتاع الـ List الاولي مع الـ List التانية. لو الأولى فاضية، الناتج هو التانية
append([], L, L). بناخد X من الأولى نحطه في الناتج، ونكمل دمج لباقي الأولى (L1) مع التانية (L2)
append([X | L1], L2, [X | L3]) :- append(L1, L2, L3). فيبقي التعريف الكامل : append([], L, L).
append([X | L1], L2, [X | L3]) :- append(L1, L2, L3).
لو مش فاهم عادي انا كمان مش فاهم مش لازم تفهم الـ definition بتاع الفانكشن عشان تحل ف لو مفهمتش اعرف هيا بتعمل ايه بس وبصمج شكلها زي ماهو استخدامات تانية للـ append (التقسيم - Decomposing)
الحاجة المبهره هنا إنك لو عكست السؤال، هيعكس الإجابة, يعني لو إديته الناتج (الليست بعد الدمج)، هيقدر يقسملك الليست بكل الاحتمالات الممكنة:
?- append(L1, L2, [a,b,c]).
L1= [], L2 = [a,b,c];
L1= [a], L2= [b,c];
L1 = [a,b], L2 = [c];
L1 = [a,b,c], L2 = []; دي اسهل شوية, لو عايز تضيف عنصر X على List اسمها L، حطه هو الـ Head، وخلي L هي الـ Tail في List جديدة.
add(X, L, [X | L]).
% ?- add(5, [1,2], L). -&gt; L = [5, 1, 2]. شبه الـ member شوية، بنمشي ندور علي العنصر المطلوب بس لما بنلاقيه بدل ما بنجاوب بـاننا لقيناه، إحنا بنشيل العنصر ونرجع الـ List من غيره: لو العنصر X هو الـ Head، يبقى الـ List الجديدة هي الـ Tail وخلاص كده.
لو العنصر X مش هو الـ Head، يبقى هنحتفظ بالـ Head زي ما هو Y، وننادي الدالة تاني تروح تمسح X من الـ Tail. مسحنا X عشان هو الـ Head، ورجعنا Tail del(X, [X | Tail], Tail). احتفظنا بـ Y، ورحنا نمسح X من الـ Tail عشان نجيب Tail1 الجديد
del(X, [Y | Tail], [Y | Tail1]) :- del(X, Tail, Tail1). فيبقي التعريف الكامل : del(X, [X | Tail], Tail).
del(X, [Y | Tail], [Y | Tail1]) :- del(X, Tail, Tail1). (ملاحظة: لو العنصر X متكرر جوه الـ List، الـ Prolog بيمسح أول واحد يقابله، ولو دوست ; هيرجعلك الاحتمالات التانية إنه يمسح النسخ التانية ويسيب الأولى).
الـ insert في أي مكان باستخدام الـ del دي حاجة شبه الي عملناها في الـ append نقدر نستخدم دالة الحذف عشان نضيف عنصر X في أي مكان في الـ List.
الفكرة انك لو عملت: "هات لي الـ BiggerList اللي لو حذفت منها X، يتبقى لي الـ L " ( بص في المثال عشان تفهم). insert(X, L, BiggerList) :- del(X, BiggerList, L). عشان نختبر هل الـ List اللي اسمها S موجودة جوه الـ List الكبيرة L (بنفس الترتيب).
بنستخدم الـ append مرتين كأننا بنقطع الـ List الكبيرة حتت: بنقسم الـ L الكبيرة لجزأين: L1 و L2.
بناخد الـ L2 نقسمها لجزأين: S (اللي بندور عليها) و L3 (الباقي). لو عرفنا نعمل التقسيمة دي، يبقى أكيد S موجودة جوه L.
sublist(S, L) :- append(L1, L2, L), append(S, L3, L2).
الـ Sublist بتدور على الـ عناصر ورا بعض بنفس الترتيب.مثال (1): هل دي Sublist ولا لأ؟?- sublist([c,d,e], [a,b,c,d,e,f]).
true. (عشان c,d,e موجودين ورا بعض).
مثال (2): العناصر موجودة بس مش ورا بعض!?- sublist([c,e], [a,b,c,d,e,f]).
false. (هيديك false لأن c و e مش ورا بعض في الليست الأساسية، مفصولين بـ d). لو عندنا List وعايزين نجيب كل الترتيبات (التباديل) الممكنة لعناصرها.
الفكرة بتاعتها: لو الـ List فاضية، تباديلها هي قايمة فاضية.
لو فيها عناصر، بناخد أول عنصر X على جنب، ونجيب التباديل بتاعة باقي الـ List L1، وبعدين نحط العنصر X في كل الأماكن الممكنة جوه الـ L1. permutation([], []).
permutation([X | L], P) :- permutation(L, L1), insert(X, L1, P).
مثال (1): تباديل لعنصرين:?- permutation([a,b], P). P = [a, b] ;
P = [b, a] ;
false.
مثال (2): تباديل لـ 3 عناصر:?- permutation([red, blue, green], P). P = [red, blue, green]; P = [red, green, blue]; P = [blue, red, green]; P = [blue, green, red]; P = [green, red, blue]; P = [green, blue, red]; false. دي شوية أمثلة وتطبيقات جاهزة في الـ Prolog للتعامل مع الـ Lists: لو عايزين نجيب طول الـ List (Length): الـ Prolog فيها الدالة الجاهزة length بس إحنا في المنهج غاويين وجع دماغ وهنكتبها بنفسنا:
len([], 0).
len([_ | L], N) :- len(L, X), N is X + 1. عكس الـ List (Reverse):
الدالة الجاهزة reverse، تعريفها:
nrev([], []).
nrev([H | T], R) :- nrev(T, RevT), append(RevT, [H], R). جمع عناصر الـ List (Sumlist):
عشان نجمع الأرقام اللي جوه الـ List:
sumlist([], 0).
sumlist([H | T], N) :- sumlist(T, N1), N is N1 + H. اختبار إن طول الـ List زوجي (Even):
بنسحب كل مرة عنصرين، لحد ما نوصل لقايمة فيها عنصرين أو قايمة فاضية.
even([_,_]).
even([_,_ | T]) :- even(T). قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : <a data-href="Chapter 5 (Part 2) - Practice" href="prolog/practice-examples/chapter-5-(part-2)-practice.html" class="internal-link" target="_self" rel="noopener nofollow">Chapter 5 (Part 2) - Practice</a>]]></description><link>prolog/summaries/chapter-5-part-2-lists-and-arithmetic.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Summaries/Chapter 5 Part 2 - Lists and Arithmetic.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lists and Arithmetic (Lecture 5 - Part 1)]]></title><description><![CDATA[مقدمة في المحاضرة دي هنتعلم إزاي نتعامل مع العمليات الحسابية (Arithmetic Operations) في الـ Prolog.
هنفهم الفرق بين علامة = (الـ Unification) وبين معامل الحساب is وعلامات المقارنة.
هنتدرب على كتابة الـ Functions الحسابية وكمان العلاقات اللي بتحتاج تفكير رياضي زي حساب الكثافة السكانية، أو الـ Factorial والـ GCD (القاسم المشترك الأكبر).
هنشوف إزاي نمثل البوابات المنطقية (Logic Gates) في الـ Prolog ونبني بيها دايرة بسيطة زي الـ Half Adder. الـ Prolog بيدعم العمليات الحسابية الأساسية وكلها مبنية جاهزة (Built-in)، وهي:
أولويات التنفيذ (Precedence): زي الرياضة العادية، الضرب والقسمة قبل الجمع والطرح. العمليات اللي من نفس المستوى بتتنفذ من الشمال لليمين. الأقواس () بتجبر الـ Prolog يخلص اللي جواها الأول.
الدوال الجاهزة: الـ Prolog كمان فيه دوال رياضية زي sin(X), cos(X), log(X), exp(X).
الفرق بين "=" و is في الـ Prolog، علامة = بتعمل Matching (Unification) مش بتحسب. يعني لو كتبت X = 1 + 2، الـ X مش هتبقى 3&lt; الـ X هتاخد القيمة كـ Structure اللي هو 1 + 2. عشان تجبر الـ Prolog إنه يحسب العملية الرياضية، لازم تستخدم المعامل is. لو كتبت X is 1 + 2، ساعتها بس الـ X هتتخزن فيها 3. أمثلة:
?- X is 5/2, Y is 5//2, Z is 5 mod 2. % النتيجة:
% X = 2.5
% Y = 2
% Z = 1 لما بنحب نقارن قيمتين رياضيتين ببعض بنستخدم المعاملات دي (كلهم بيجبروا الـ Prolog إنه يحسب Values قبل ما يقارن):
ركز هنا
الـ =:= بتقارن ناتج العملية الحسابية، لكن الـ = بتطابق الـ Data Objects (Terms). 1 + 2 =:= 2 + 1 -&gt; Yes (عشان 3 بتساوي 3).
1 + 2 = 2 + 1 -&gt; No (عشان كـ Structures مختلفين). لو عندنا الـ Population والـ Area، نقدر نحسب الكثافة (الـ pop علي الـ area):
pop(usa, 203).
pop(india, 500).
area(usa, 3).
area(india, 1). density(X, Y) :- pop(X, P), area(X, A), Y is P / A. المضروب (Factorial - N!): بنقسمه لقاعدتين (واحدة للـ Base Case وواحدة للـ Recursion): % Base case: مضروب 1 هو 1
fac(1, 1). % Recursive Step
fac(N, F) :- N &gt; 1, M is N - 1, % نجيب الرقم اللي قبله fac(M, Fm), % نجيب مضروب الرقم اللي قبله F is N * Fm. % نضرب الرقم الحالي في المضروب اللي رجع
لو مش فاهمها احفظ شكلها
ممكن نمثل الـ Logic Gates ببساطة جداً عن طريق الـ Facts:
% البوابات الأساسية not(0, 1).
not(1, 0). and(0, 0, 0).
and(0, 1, 0).
and(1, 0, 0).
and(1, 1, 1). xor(0, 0, 0).
xor(0, 1, 1).
xor(1, 0, 1).
xor(1, 1, 0). الـ Half Adder بيجمع 2 Bits، وبيطلع لنا (Sum) و (Carry). Carry = A AND B Sum = A XOR B نقدر نربط البوابات دي بـ Rule في الـ Prolog: halfadder(A, B, Carry, Sum) :- and(A, B, Carry), xor(A, B, Sum). تجربة السؤال:
?- halfadder(0, 1, C, S).
% النتيجة:
% C = 0
% S = 1 قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : <a data-href="Chapter 5 (Part 1) - Practice" href="prolog/practice-examples/chapter-5-(part-1)-practice.html" class="internal-link" target="_self" rel="noopener nofollow">Chapter 5 (Part 1) - Practice</a>]]></description><link>prolog/summaries/chapter-5-part-1-lists-and-arithmetic.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Summaries/Chapter 5 Part 1 - Lists and Arithmetic.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Prolog Syntax & Structures (Lecture 4)]]></title><description><![CDATA[مقدمة في المحاضرة دي هنفهم أكتر عن الـ Syntax في الـ Prolog.
هنتعمق في أنواع البيانات (Data Objects) والـ Structures وإزاي بنمثلها.
هنعرف إزاي الـ Prolog بيعمل Matching (مطابقة أو Unification) بين البيانات المختلفة.
وهنراجع على أدوات الربط المنطقية (Conjunction &amp; Disjunction) وأولوياتها. كل البيانات في Prolog بنسميها Terms. بتنقسم لنوعين أساسيين زي ما بدأنا نفهم قبل كده: بتشمل الـ Constants والـ Variables دي ثوابت نصية ممكن تتكتب بـ 3 طرق: حروف وأرقام و Underscore: لازم تبدأ بحرف صغير (Lower-case). أمثلة صحيحة: anna, x25, x_y. رموز خاصة (Special Characters): أمثلة صحيحة: &lt;----&gt;, ==&gt;, ::. أي نصوص بين Single Quotes (' '): دي بتسمحلك تحط مسافات أو تبدأ بحرف كابيتال. أمثلة صحيحة: ' Tom ', 'South America', 'Sarah Jones'. أمثلة على Atoms غلط (Non-Valid): ا 2340ieh (بتبدأ برقم).
ا george-smith (فيها Dash -).
ا Void (بتبدأ بحرف Capital -&gt; دي كده Variable).
ا _alpha (بتبدأ بـ Underscore -&gt; دي كده Variable). أرقام صحيحة (Integers): زي 1, 1313, -97.
أرقام عشرية (Real Numbers): زي 3.14, -0.0035. لازم تبدأ بحرف كبير (Upper-case) أو Underscore (_). أمثلة: X, Result, _x23. الـ Anonymous Variable (المتغير المجهول _): بنستخدمه لو محتاجين نسأل عن حاجة بس مش مهتمين بقيمتها (مش عايزين نطبعها). مثال: ?- parent(X, _). (مين اللي عنده أي أبناء وخلاص؟ مش مهم أسامي الأبناء). الـ Structure هو كائن واحد بيتكون من مجموعة كائنات تانية جواه (Components).
شكلها: functor(component1, component2, ...)
الـ Functor: هو اسم الـ Structure (ولازم يكون Atom يعني بيبدأ بحرف صغير).
الـ Components: هي العناصر اللي جوه، وممكن تكون ثوابت، متغيرات، أو حتى Structures تانية (Nested).
ملحوظة
نقدر نستخدم متغيرات جوة الـ Structure عادي، زي: date(Day, may, 2001). أي Structure نقدر نتخيله على شكل شجرة. الـ Functor هو الـ Root (الجذر)، والـ Components هم الفروع. المعادلات الحسابية في الـ Prolog بتتعامل كـ Structures، حيث العمليات (زي + و *) هي الـ Functors.
مثال للمعادلة: (a + b) * (c - 5) تتكتب كـ Structure كده: *( +(a, b), -(c, 5) ) حاجة شبه الـ prefix , postfix الي اخدناها في الداتا ستراكتشر قبل كده. من أهم العمليات في الـ Prolog هي الـ Matching. بنقول إن قيمتين (Terms) بيطابقوا بعض لو كانوا: متطابقين تماماً (Identical).
أو نقدر نعوض في المتغيرات اللي فيهم عشان يبقوا متطابقين. لو Constants : بيطابقوا بعض لو هما نفس الحاجة بالظبط (مثلاً may = may).
لو Variable مع أي حاجة: بيطابقها فوراً والمتغير بياخد القيمة دي (استني لما تشوف الامثله تحت عشان تفهم) .
لو Structures (أشياء مركبة): بيطابقوا بعض فقط لو: ليهم نفس الـ Functor (نفس الاسم).
ليهم نفس الـ Arity (نفس عدد الـ Components/Arguments).
وكل Component بيطابق الـ Component اللي في نفس مكانه الناحية التانية. مثال 1:
?- date(4, M, 2001) = date(D1, may, Y1). النتيجة: D = 4, M = may, Y1 = 2001 (المطابقة نجحت). مثال 2 (Nested Structures): ?- addr(flat(4), street('Home Str.'), postcode(eh8_9lw)) = addr(flat(Z), Yy, postcode(Xxx)). النتيجة: Z = 4, Yy = street('Home Str.'), Xxx = eh8_9lw (المطابقة بتشتغل بشكل تكراري Recursively على العناصر الداخلية).
مثال على الأولويات:
لو كتبنا:
P :- Q, R; S, T, U. عشان الـ , (AND) أقوى، الـ Prolog بيفهمها كأنها متقسمة بقوسين كده:
P :- (Q, R) ; (S, T, U). يعني كأننا كتبنا قاعدتين منفصلين:
P :- Q, R.
P :- S, T, U. قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : <a data-href="Chapter 4 - Practice" href="prolog/practice-examples/chapter-4-practice.html" class="internal-link" target="_self" rel="noopener nofollow">Chapter 4 - Practice</a>]]></description><link>prolog/summaries/chapter-4-prolog-syntax-&amp;-structures.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Summaries/Chapter 4 - Prolog Syntax &amp; Structures.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Prolog Rules & Recursion (Lecture 3)]]></title><description><![CDATA[مقدمة في المحاضرة دي هنكمل على اللي بدأناه في الـ Prolog وهنركز أكتر على إزاي بنبني الـ (Rules).
هنعرف إزاي الـ Prolog بيجاوب على الأسئلة بتاعتنا.
هنعرف أنواع البيانات (Data Objects) اللي موجودة في اللغة.
واهم حاجة، الـ Recursion (التكرار) في الـ Prolog وازاي بنستخدمه لبناء. زي ما عرفنا قبل كده، الـ Rule بتستخدم عشان نستنتج حاجة بناءً على شروط معينة. الـ Fact: بتقول إن في حاجة دايماً صح (Unconditionally true). مثال: male(aly).
الـ Rule: بتقول إن في حاجة صح بس بشرط (Depending on a condition). أي Rule في الـ Prolog بتتكون من جزئين: الـ Head (الاستنتاج / Conclusion): ده اللي بيبقى على الشمال (Left-hand side).
الـ Body (الشرط / Condition): ده اللي بيبقى على اليمين (Right-hand side) بعد علامة :- اللي بتمثل كلمة (If). مثال:parent(X,Y) :- mother(X,Y). المعنى: "الشخص X يعتبر Parent للشخص Y لو كان X هو الـ Mother بتاعت Y".
الـ parent(X,Y) هي الـ Head.
الـ mother(X,Y) هي الـ Body.
الـ Predicate والـ Clauses الـ Predicate: هو الاسم اللي قبل الأقواس (زي parent أو mother).
الـ Clause: هو السطر الواحد سواء كان Fact أو Rule. كل الـ Facts والـ Rules اللي ليها نفس الاسم بتشكل مع بعض تعريف الـ Predicate ده. لما بتسأل الـ Prolog سؤال (Question/Goal)، بيعمل الآتي: الـ Matching (المطابقة): بيدور في الـ Database من فوق لتحت (Top to Bottom) على أول Clause (سواء Fact أو Rule) الـ Head بتاعها بيطابق السؤال.
الـ Binding (ربط المتغيرات): لو لقى تطابق، بيدي الـ Variables اللي في السؤال القيمة اللي لقاها.
تنفيذ الـ Body (لو Rule): لو لقى تطابق مع Rule، بيستبدل السؤال الأساسي بالشروط اللي جوة الـ Body ويحاول يحققها (يثبت إنها صح) من الشمال لليمين كأنها أهداف جديدة .
الـ Backtracking (الرجوع لورا ): لو الـ Prolog فشل في تحقيق شرط معين، بيرجع للخطوة اللي قبلها (Backtrack) ويفك الارتباط (Unbind) ويحاول يشوف مسار تاني أو إجابة تانية (مثلاً يدور على Fact أو Rule تانية تنفع من مكان ما وقف). لو مفهمتش الحته دي مش مهم هنجيلها في اخر محاضرة تانيالـ Data Objects (بيسموها كمان Terms) في Prolog بتنقسم لنوعين رئيسيين: الـ Simple Objects : الـ Constants (الثوابت): الـ Atoms (رموز/كلمات): زي a, bob, x8r_2day (بتبدأ بحرف صغير Small letter).
الـ Strings (نصوص): زي 'a', 'Bob' (بتتحط بين علامات تنصيص).
الـ Integers (أرقام صحيحة): زي 987, -6. الـ Variables (المتغيرات): بتبدأ بحرف Capital زي X أو A_var، أو بتبدأ بـ Underscore زي _Var.
الـ _ لوحدها دي معناها Anonymous Variable (متغير مجهول) بنستخدمه لو مش مهتمين بالقيمة اللي هترجع ومش عايزين نحفظها في مكان. الـ Structured Objects : الـ Structures.
الـ Lists. الـ Recursion (التكرار) معناه إن الـ Rule بتستدعي نفسها جوة الـ Body بتاعها عشان تحل مشكلة معقدة أو سلسلة من العلاقات. الفكرة الأساسية إن أي Recursive Relation لازم تتكون من جزئين (Two Rules) عشان ميفضلش يكرر نفسه للمالانهاية: الـ Direct Relation (الحالة المباشرة / Base Case): ودي اللي بتوقف التكرار.
الـ Indirect Relation (الحالة الغير مباشرة / Recursive Step): ودي اللي بتستدعي نفسها وتكرر العملية عشان تكمل بحث في السلسلة (Chain). لو عندنا Blocks محطوطة فوق بعض: on(a, b). و on(b, c). عايزين نعمل علاقة above(X,Y) اللي بتقول إن X فوق Y حتى لو مش فوقها مباشرة.
% 1. Direct Relation (Base Case)
above(X, Y) :- on(X, Y). % 2. Indirect Relation (Recursive Step)
above(X, Y) :- on(X, Z), above(Z, Y). المعنى: "الـ Block ا X فوق Y لو كان X موجود فوق Y مباشرة (on)، أو لو كان X فوق بلوك تاني اسمه Z، والـ Z دي فوق Y".
الـ Z دي مجرد وسيط. يعني X فوق Z والـ Z فوق Y.
نفس الفكرة لو عندنا سلسلة من الآباء (Family Tree)، وعايزين نعرف لو شخص هو سلف (Predecessor) لشخص تاني يعني هل هو أبوه أو جده أو جد جده وهكذا:
% 1. Direct Predecessor
predecessor(X, Z) :- parent(X, Z). % 2. Indirect Predecessor
predecessor(X, Z) :- parent(X, Y), predecessor(Y, Z). نفس الفكرة بتطبق لحساب المسار بين مدينتين والمسافة بينهم باستخدام الجمع:
route(X, Y, D) :- link(X, Y, D).
route(X, Y, D) :- link(X, Z, D1), route(Z, Y, D2), D is D1 + D2. تعالى نشوف إزاي Prolog بيفكر خطوة بخطوة لو سألناه ?- predecessor(tom, pat). (عايزين نعرف هل tom هو جد pat؟) بصمجيات لو مش فاهم الـtracing بتاع الـ Recursive rule عادي مش لازم تفهمه عشان تحل هتلاقيهم كلهم بييجوا بنفس الطريقه: above(X, Y) :- on(X, Y).
above(X, Y) :- on(X, Z), above(Z, Y). لاحظ هنا اننا دايما بنكتب اسم الـ recursive rule الي اتطلبت مننها ( -:above(X, Y)) , بعدها بنكتب الfact المباشره الي اداهالنا في السؤال .on(X, Y) , تاني سطر بنكتب نفس الي كتبناه فوق above(X, Y) :- on(X, Z) بس في الاخر بننادي علي اسم الـ recursive rule بتاعتنا تاني (above(Z, Y)) .
وبالنسبه للمتغيرات ف احنا بنمشي بنفس النمط برده , بنحط X في الاول و Y في الاخير وبينهم Z ك وسيط (on(X, Z), above(Z, Y)) لو حاسس انك مش فاهم بص علي الامثله هتلاقيهم كلهم ماشيين بنفس الطريقه وهتفهم لوحدك قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : <a data-href="Chapter 3 - Practice" href="prolog/practice-examples/chapter-3-practice.html" class="internal-link" target="_self" rel="noopener nofollow">Chapter 3 - Practice</a>]]></description><link>prolog/summaries/chapter-3-prolog-rules-&amp;-recursion.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Summaries/Chapter 3 - Prolog Rules &amp; Recursion.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Introduction to Prolog (Chapters 1 & 2)]]></title><description><![CDATA[مقدمة الـ Prolog هي لغة برمجة منطقية (Logic Programming).
بتعتمد على الـ Declarative Programming (البرمجة الوصفية) بدلاً من الـ Procedural (الإجرائية).
بتستخدم بشكل أساسي في تطبيقات الذكاء الاصطناعي (AI) والأنظمة الخبيرة (Expert Systems). ا PROLOG اختصار لـ: PROgramming in LOGic.
البرنامج في Prolog عبارة عن Knowledgebase (قاعدة معرفة) بتتكون من: ا Facts (حقائق): حاجات دايمًا صح.
ا Rules (قواعد): بتعتمد على شروط تانية عشان تكون صح. بتعبر عن علاقة بين الـ Objects أو خاصية لشيء معين، وبتكون دايمًا صح (Always True).
مثال علي علاقة: .likes(aly, hany) -&gt; علي بيحب هاني (حب اخوي).
مثال علي خاصية: .green(rose) -&gt; الوردة لونها اخضر.
الـ Relation: هي likes.
الـ Objects: هي aly و hany.
قواعد كتابة الـ Facts اسم العلاقة والـ objects لازم يبدأوا بـ lower-case.
اسم العلاقة بيتكتب الأول وبعده الـ objects بين قوسين.
لازم تنتهي بـ Full stop (نقطة .).
الترتيب مهم: likes(aly, hany) معناها علي بيحب هاني، مش العكس. بتستخدم الرمز :- اللي معناه IF. مثال: parent(X, Y) :- father(X, Y).
معناها ان X هو والد Y لو كان X هو أبو Y. ملحوظه ملهاش لازمه ا parent يعني والد يعني ممكن يبقي اب او ام , اما father يعني اب الي هو parent وفي نفس الوقت male بتبدأ بالرمز ?- في الـ interpreter.
الـ Prolog بيدور في قاعدة البيانات من أول سطر لسطر، وبيقارن (Matching) كل Fact مع السؤال.
لو لقى تطابق تام (نفس الـ Predicate ونفس الـ Arguments) -&gt; yes، لو ملقهاش -&gt; no.
في Prolog، الـ Predicate هو الاسم اللي بنطلقه على الكلمة اللي بتيجي قبل القوسين في أي حقيقة (Fact) أو قاعدة (Rule).
الـ Facts والـ Rules الاتنين بيُعتبروا تعريفات للـ Predicate.
الـ Head في الـ Predicate بيتكون من: اسم الـ Predicate (الـ Name).
الـ Arguments (المعاملات/المُدخلات) اللي ممكن تكون ثوابت (Constants) أو متغيرات (Variables). ا Variables لازم تبدأ بـ Capital letter (ا Upper Case) أو _ ( underscore) هنعرف معناها قدام.
بنستخدمها لما نكون عايزين نسأل "مين اللي بيحب هاني؟" بدل "هل علي بيحب هاني؟".
مثال: ?- likes(X, hany).
ا Prolog هيرجع قيمة X. لو فيه أكتر من حل، بنضغط ; عشان نشوف الباقي، وآخر حاجة يرجع no.
ممكن نربط أكتر من حاجة باستخدام الفاصلة , (AND).
مثال: ?- likes(mary, X), likes(john, X).
السؤال ده معناه: "هل فيه حاجة Mary و John الاتنين بيحبوها؟". بنكتب الـ knowledgebase في ملف ونحفظه بامتداد .pl (مثلاً family.pl).
بنفتح الـ SWI-Prolog ونعمل Consult للملف عشان يحمله: بنكتب: [family]. أو consult(family). (متنساش النقطة في الآخر). بعد كده نقدر نسأل الأسئلة (Queries).
ممكن نستخدم المقارنات زي أصغر من &lt; في الأسئلة:
مثال: ?- age(Name, Age), Age &lt; 40.
السؤال ده معناه: "هات لي كل الأسماء اللي سنها أصغر من 40". قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : <a data-href="Chapter 1 &amp; 2 - Practice" href="prolog/practice-examples/chapter-1-&amp;-2-practice.html" class="internal-link" target="_self" rel="noopener nofollow">Chapter 1 &amp; 2 - Practice</a>]]></description><link>prolog/summaries/chapter-1-&amp;-2-introduction-to-prolog.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Summaries/Chapter 1 &amp; 2 - Introduction to Prolog.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Prolog Index]]></title><description><![CDATA[مهم جدا قبل ما تبدا الشرح مش مفوت اي جزئية في المنهج فلو اول مره تقرا المنهج ذاكره من الشرح وبعدين روح علي الحل وحل بايدك
الاساله عبارة عن امثلة المحاضرة والسكاشن فقط (مفيش اي اسالة من ai او مش بتاعة الدكتور )
الحل في المادة دي اهم من الشرح لو قدرت تحل اسالة المحاضرة يبقي انته فاهمها كويس وباذن الله مش هتغلط فيها سواء اختياري او مقالي
نزل SWI Prolog وحل بنفسك ده هيفرق جدا معاك وهتفهم المادة بسهوله لو فيه اي اخطاء سواء في الاساله او في الشرح قولي عشان اعدلها <a rel="noopener nofollow" class="external-link is-unresolved" href="https://t.me/DevNourEldeen" target="_self">https://t.me/DevNourEldeen</a>]]></description><link>prolog/prolog-index.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Prolog Index.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Chapter 7 - Practice]]></title><description><![CDATA[
ايه ناتج كل استعلام من دول (لو في خطأ Syntax Error اشرح ليه): ?- write(c), write(8), write(r).
?- write([a, b, c, d]).
?- write(Hello World).
?- write('Hello World').
?- X = 5, write('Value = '), write(X).
Solution (write)
1) c8r 2) [a,b,c,d] 3) ERROR: syntax error % الـ Prolog فسر Hello و World كـ Terms منفصلة مش كـ String واحد. % لازم Single Quotes: write('Hello World'). 4) Hello World 5) Value = 5 هات ناتج الاستعلام ده:
?- write(a), tab(3), write(b), nl, tab(1), write(c).
Solution (nl and tab)
a b c الشرح: ا write(a) -&gt; تطبع a
ا tab(3) -&gt; تلات مسافات
ا write(b) -&gt; تطبع b
ا nl -&gt; سطر جديد
ا tab(1) -&gt; مسافة واحدة
ا write(c) -&gt; تطبع c استخدم read &amp; write عشان تعمل برنامج بياخد الاسم من اليوزر ويقوله Greeting : username
Solution (read)
?- write('What is your name?'), nl, read(X), write('Greetings '), write(X).
What is your name?
|: tamer.
Greetings tamer
X = tamer. اكتب دالة cube بتطلب من المستخدم إدخال رقم، وبعدين تحسب الـ Cube بتاعه (n³) وتطبعه وجربها.
Solution (Basic Cube)
cube :- write('enter number'), nl, read(N), C is N * N * N, write(C). ?- cube.
enter number
|: 2.
8
true. عدل دالة الـ Cube عشان تفضل تقرا أرقام وتطبع Cubes لغاية ما المستخدم يكتب stop. وجربها: ?- cube.
|: 2.
|: 5.
|: 12.
|: stop.
Solution (Cube Loop)
cube :- write('Next item, please: '), read(X), process(X). process(stop) :- !. process(N) :- C is N * N * N, write('Cube of '), write(N), write(' is '), write(C), nl, cube. ?- cube.
Next item, please: 2.
Cube of 2 is 8
Next item, please: 5.
Cube of 5 is 125
Next item, please: 12.
Cube of 12 is 1728
Next item, please: stop.
true. اكتب دالة sum تقرا رقمين من المستخدم وتطبع مجموعهم. وجرب: ?- sum.
|: 10.
|: 15.
Solution (Sum)
sum :- read(X), read(Y), Z is X + Y, write(Z). ?- sum.
|: 10.
|: 15.
25
true. اكتب برنامج function يقرا قيمة X من المستخدم ويحسب: لو X ≤ 3 يبقى Y = 2X
لو X &gt; 3 يبقى Y = 4X + 5 استخدم Cut .
وجرب:?- function.
|: 2. ?- function.
|: 5.
Solution (Function with Cut)
function :- read(X), process(X). process(X) :- X =&lt; 3, !, Y is 2 * X, write(Y).
process(X) :- Y is 4 * X + 5, write(Y). ?- function.
|: 2.
4
true. ?- function.
|: 5.
25
true. اكتب دالة sqr تقرا رقم X وتطبع الجذر التربيعي بتاعه (X^0.5).
لو الرقم سالب، اطبع ايرور من غير ما تحسب حاجة.
وجرب:?- sqr.
enter number: 9. ?- sqr.
enter number: -4.
Solution (Square Root)
sqr :- write('enter number: '), read(X), process(X). process(X) :- X &lt; 0, !, write('number is negative').
process(X) :- Y is X ^ 0.5, write(Y). ?- sqr.
enter number: 9.
3
true. ?- sqr.
enter number: -4.
number is negative
true. اكتب دالة test1 تقرا درجة الطالب وتطبع succeed لو ≥ 50 و fail لو أقل من 50 (بدون Cut).
اكتبها تاني باستخدام Cut .
وجرب:?- test1.
enter score: 75. ?- test1.
enter score: 30.
Solution (Succeed / Fail)
أ) بدون Cut:
test1 :- write('enter score: '), read(X), process1(X). process1(X) :- X &gt;= 50, write('succeed').
process1(X) :- X &lt; 50, write('fail'). ب) باستخدام Cut:
test1 :- write('enter score: '), read(X), process1(X). process1(X) :- X &gt;= 50, !, write('succeed').
process1(X) :- write('fail'). ?- test1.
enter score: 75.
succeed
true. ?- test1.
enter score: 30.
fail
true. اكتب دالة test تطلب من المستخدم إدخال الاسم ثم الدرجة، وبعدين تطبع اسم الطالب مع نتيجته (succeed/fail). وجرب: ?- test.
enter your name: ahmed.
enter score: 85.
Solution (Name + Score)
test :- write('enter your name: '), read(S), nl, write('enter score: '), read(D), p(D, S). p(D, S) :- D &lt; 50, !, write('fail: '), write(S).
p(D, S) :- D &gt;= 50, write('succeed: '), write(S). ?- test.
enter your name: ahmed.
enter score: 85.
succeed: ahmed
true. اكتب دالة divide تقرا رقمين A و B وتطبع ناتج A / B. لو B = 0، اطبع رسالة خطأ. وجرب: ?- divide.
Enter A: 10.
Enter B: 2. ?- divide.
Enter A: 10.
Enter B: 0.
Solution (Division)
divide :- write('Enter A: '), read(A), write('Enter B: '), read(B), process(A, B). process(_, 0) :- !, write('Error: B is not valid (zero not allowed).').
process(A, B) :- Q is A / B, write('Quotient = '), write(Q). ?- divide.
Enter A: 10.
Enter B: 2.
Quotient = 5
true. ?- divide.
Enter A: 10.
Enter B: 0.
Error: B is not valid (zero not allowed).
true. لو وصلت لهنا فعاش اوي باذن الله تقفل الماده ومتنساش تدعيلي]]></description><link>prolog/practice-examples/chapter-7-practice.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Practice Examples/Chapter 7 - Practice.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Chapter 6 - Practice]]></title><description><![CDATA[
لو عندنا الـ Rules دي:
f(X, 0) :- X &lt; 3. % Rule 1
f(X, 2) :- 3 =&lt; X, X &lt; 6. % Rule 2
f(X, 4) :- 6 =&lt; X. % Rule 3 اكتب الـ Program تاني باستخدام Green Cut.
اكتب الـ Program تالت باستخدام Red Cut.
Solution (f(X,Y) with 3 Rules)
أ) Green Cut:
f(X, 0) :- X &lt; 3, !.
f(X, 2) :- 3 =&lt; X, X &lt; 6, !.
f(X, 4) :- 6 =&lt; X. ب) Red Cut:
f(X, 0) :- X &lt; 3, !.
f(X, 2) :- X &lt; 6, !.
f(X, 4). اكتب دالة max من غير Cut.
اكتب دالة max باستخدام Red Cut.
Solution (max with and without Cut)
أ) من غير Cut:
max(X, Y, Max) :- X &gt;= Y, Max = X.
max(X, Y, Max) :- X &lt; Y, Max = Y. ب) بـ Red Cut:
max(X, Y, Max) :- X &gt;= Y, !, Max = X.
max(X, Y, Max) :- Max = Y. اكتب دالة f(X, Y) تحقق العلاقة دي باستخدام Cut: ا Rule 1: لو X =&lt; 5 يبقى Y = 3X
ا Rule 2: لو X &gt; 5 يبقى Y = X² + 5 Solution (Conditional Function)
بدون Cut:
f(X, Y) :- X =&lt; 5, Y is 3 * X.
f(X, Y) :- X &gt; 5, Y is X ** 2 + 5. باستخدام Cut:
f(X, Y) :- X =&lt; 5, !, Y is 3 * X.
f(X, Y) :- Y is X ** 2 + 5. اكتب دالة class(Number, Category) تصنف الأعداد لـ positive, zero, أو negative باستخدام Cut.
Solution (Classify Number)
class(Number, positive) :- Number &gt; 0, !.
class(0, zero) :- !.
class(Number, negative). اكتب دالة function(X, Y) تشوف: y = 3x + 2
اكتب دالة fun(X, Y) تشوف: لو X ≤ 3 يبقى Y = 2X، ولو X &gt; 3 يبقى Y = 4X + 5
Solution (Simple Functions)
أ) y = 3x + 2:
function(X, Y) :- Y is 3 * X + 2. ?- function(2, Y).
Y = 8. ب) Two-rule function:
fun(X, Y) :- X =&lt; 3, Y is 2 * X.
fun(X, Y) :- X &gt; 3, Y is 4 * X + 5. ?- fun(2, Y).
Y = 4. ?- fun(5, Y).
Y = 25. اكتب دالة split(Numbers, Positives, Negatives) اللي بتقسم List الأرقام لـ List فيها الأرقام الموجبة (ومعاها الصفر) و List فيها الأرقام السالبة. وجربها على: ?- split([3, -1, 0, 5, -2], P, N). Solution (split/3)
split([], [], []).
split([X|L], [X|L1], L2) :- X &gt;= 0, !, split(L, L1, L2).
split([X|L], L1, [X|L2]) :- split(L, L1, L2). تجربة:
?- split([3, -1, 0, 5, -2], Pos, Neg).
Pos = [3, 0, 5],
Neg = [-1, -2]. لو عندنا Database:
beat(tom, jim).
beat(ann, tom).
beat(pat, jim). وصنفنا اللاعيبة لـ: Winner: كسب كل الماتشات Fighter: كسب وخسر ماتشات Sportsman: خسر كل الماتشات اكتب دالة class(Player, Category) باستخدام Cut. طلع ناتج الاستعلامات دي: ?- class(tom, C).
?- class(ann, C).
?- class(jim, C). Solution (Tennis Classification)
أ) الـ Rules:
class(X, fighter) :- beat(X, _), beat(_, X), !.
class(X, winner) :- beat(X, _), !.
class(X, sportsman) :- beat(_, X). ب) النواتج:
1) ?- class(tom, C). C = fighter. % Tom beat(jim) و beat(ann,tom) 2) ?- class(ann, C). C = winner. % Ann beat(tom) ومحدش beat(ann) 3) ?- class(jim, C). C = sportsman. % محدش beat(jim) و beat(tom,jim) و beat(pat,jim) اكتب ناتج الاستعلام ده باستخدام member:
?- member(X, [a, b, c]). اكتب ناتج الاستعلام ده باستخدام member1 (اللي فيها Cut):
?- member1(X, [a, b, c]). اشرح ليه النتائج مختلفة.
Solution (member vs member1)
أ) member (من غير Cut - بتطلع كل الحلول):
X = a ;
X = b ;
X = c. ب) member1 (بـ Cut - بتطلع أول حل بس):
X = a ;
no جـ) الفرق:
ا member1 فيها ! بعد أول Base Case، فلما أول حل ينجح (X = a)، الـ Cut بيمنع أي محاولة Backtracking للقاعدة التانية وخلاص. لو عندنا الدالة:
add(X, L, L) :- member(X, L), !.
add(X, L, [X|L]). طلع ناتج الاستعلامات دي: ?- add(a, [b, c], L).
?- add(X, [b, c], L).
?- add(a, [b, c, X], L).
?- add(a, [a, b, c], L). ايه اللي هيحصل لو شيلنا الـ Cut من الدالة فوق، وجربنا الاستعلام الرابع تاني؟ Solution (add with Cut)
أ) النواتج:
1) ?- add(a, [b, c], L). L = [a, b, c]. % a مش موجود، فاتضاف 2) ?- add(X, [b, c], L). L = [b, c], X = b. % X اتحطت مع member 3) ?- add(a, [b, c, X], L). L = [b, c, a], X = a. % member نجح مع X = a 4) ?- add(a, [a, b, c], L). L = [a, b, c]. % a موجود فعلاً، مترجعش نفسها من غير إضافة ب) من غير Cut:
?- add(a, [a, b, c], L).
L = [a, b, c] ; % member نجح
L = [a, a, b, c]. % Backtracking شغل القاعدة التانية وضافت duplicate ]]></description><link>prolog/practice-examples/chapter-6-practice.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Practice Examples/Chapter 6 - Practice.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Chapter 5 (Part 2) - Practice]]></title><description><![CDATA[
اكتب ناتج (Output) كل استعلام من الاستعلامات دي عشان تفصل الـ Head عن الـ Tail: ?- [H|T] = [a, b, c, d].
?- [H|T] = [a].
?- [H1, H2|T] = [a, b, c, d].
?- [H|T] = [].
?- [A, B, C|T] = [a, b, c, d, e].
?- [A|T] = [a].
?- [H, _|T] = [1, 2, 3].
?- [_, _|T] = [x, y, z].
Solution (Head and Tail Extraction)
1) H = a, T = [b, c, d].
2) H = a, T = [].
3) H1 = a, H2 = b, T = [c, d].
4) false. % (Empty list has no Head or Tail)
5) A = a, B = b, C = c, T = [d, e].
6) A = a, T = [].
7) H = 1, T = [3].
8) T = [z]. اكتب الناتج للاستعلامات دي (unification): ?- [X, 2, Y] = [1, 2, 3].
?- [X, 2|Y] = [1, 2, 3, 4].
?- [X, Y|Z] = [a].
?- [X|Y] = [1, 2, 3].
?- [X, Y, Z] = [a, b, c|T].
?- [a,B,c,D]=[A,b,C,d].
?- [[X,a]]=[b,Y].
?- [(a+X),(Y+b)]=[(W+c),(d+b)].
?- [[a],[B,c],[]]=[X,[b,c],Y].
Solution (List Unification)
1) X = 1, Y = 3.
2) X = 1, Y = [3, 4].
3) false. % (Left side expects at least 2 elements, right side has 1)
4) X = 1, Y = [2, 3].
5) X = a, Y = b, Z = c, T = [].
6) A = a, B = b, C = c, D = d.
7) false. % (Length mismatch inside the lists)
8) W = a, X = c, Y = d.
9) B = b, X = [a], Y = []. استخدم الـ Facts دي اللي بترجم الأرقام لكلمات:
tran(1,one).
tran(2,two).
tran(3,three).
... اكتب دالة listtran تاخد List فيها أرقام وترجع List فيها الكلمات المقابلة ليها.
وجربها على الاستعلام ده: ?- listtran([1, 2, 3], L).
Solution (Translate a List)
listtran([], []).
listtran([Hn|Tn], [He|Te]) :- tran(Hn, He), listtran(Tn, Te). Query Output:
?- listtran([1, 2, 3], L).
L = [one, two, three]. اكتب الـ Rules بتاعة الـ member وجرب الاستعلامات دي وطلع ناتجها: ?- member(c, [a, b, c, d]).
?- member(x, [a, b, c]).
?- member(X, [1, 2, 3]).
Solution (List Membership)
member(X, [X|_]).
member(X, [_|T]) :- member(X, T). Queries:
1) true.
2) false.
3) X = 1 ; X = 2 ; X = 3. اكتب ناتج الاستعلامات دي باستخدام دالة append: ?- append([a, b, c], [1, 2, 3], L).
?- append([a, [b, c], d], [a, [], b], L).
?- append(L1, L2, [a, b, c]).
?- append(L, _, [1, 2, 3, 4, 5, 6, 7, 8]), length(L, 5).
?- append([A], L1, [1, 2, 3, 4]).
Solution (Append)
1) L = [a, b, c, 1, 2, 3].
2) L = [a, [b, c], d, a, [], b].
3) L1 = [], L2 = [a, b, c] ; L1 = [a], L2 = [b, c] ; L1 = [a, b], L2 = [c] ; L1 = [a, b, c], L2 = [] ; false.
4) L = [1, 2, 3, 4, 5].
5) A = 1, L1 = [2, 3, 4]. اكتب الـ Rule الخاصة بإضافة عنصر (Add) والـ Rule الخاصة بمسح عنصر (Delete).
وهات ناتج الـ Queries دي: ?- add(5, [1, 2], L).
?- del(c, [a, b, c, d], L).
?- del(a, [a, b, a, c, a], L).
Solution (Adding and Deleting)
% Add relation
add(X, L, [X|L]). % Delete relation
del(X, [X|Tail], Tail).
del(X, [Y|Tail], [Y|Tail1]) :- del(X, Tail, Tail1). Queries:
1) L = [5, 1, 2].
2) L = [a, b, d].
3) L = [b, a, c, a] ; L = [a, b, c, a] ; L = [a, b, a, c]. % (Notice how it deletes one occurrence at a time!) استخدم الـ del بالعكس عشان تعمل Predicate اسمها insert(X, L, BiggerList) وظيفتها إنها تضيف العنصر X في أي مكان في الـ List.
وجرب الاستعلام: ?- insert(a, [c, d], B).
Solution (Insert)
insert(X, L, BiggerList) :- del(X, BiggerList, L). Query Output:
?- insert(a, [c, d], B).
B = [a, c, d] ;
B = [c, a, d] ;
B = [c, d, a]. هات النواتج: ?- sublist([c, e], [a, b, c, d, e, f]).
?- sublist([a, b], [c, a, b, d]).
?- sublist(S, [a, b, d]).
?- perm([a, b, c], P).
Solution (Sublist and Permutations)
1) false. % (They are not consecutive)
2) true.
3) S = [] ; S = [a] ; S = [a, b] ; S = [a, b, d] ; S = [] ; S = [b] ; S = [b, d] ; S = [] ; S = [d] ; S = [].
4) P = [a, b, c] ; P = [a, c, b] ; P = [b, a, c] ; P = [b, c, a] ; P = [c, a, b] ; P = [c, b, a]. اكتب استعلام (Query) باستخدام الـ append بيمسح آخر 3 عناصر من أي List ويسيب الباقي في متغير جديد, وجربها على [a, b, c, d, e, f].
Solution (Delete last 3 elements)
الفكرة إن الـ List الأصلية هي عبارة عن دمج (Append) للباقي اللي عايزينه، مع 3 عناصر في الآخر ملهمش لازمة [_, _, _].
?- append(NL, [_, _, _], [a, b, c, d, e, f]).
NL = [a, b, c]. اكتب Prolog Predicates تنفذ المعادلات دي: y = (x + 3)^2 + 3x
الدالة المنطقية F = AB' + C
Solution (Mathematical Functions)
1. Mathematical Equation:
calculate_y(X, Y) :- Y is (X + 3) * (X + 3) + 3 * X. 2. Boolean Function:
% Define boolean operations first
not(1, 0).
not(0, 1). and(0, 0, 0).
and(0, 1, 0).
and(1, 0, 0).
and(1, 1, 1). or(0, 0, 0).
or(0, 1, 1).
or(1, 0, 1).
or(1, 1, 1). % The function
bool_f(A, B, C, F) :- not(B, B_Not), and(A, B_Not, Term1), or(Term1, C, F). اكتب Predicate اسمها one_more(L1, L2) بتاخد List من الأرقام، وتطلع List تانية كل عنصر فيها بيزيد بواحد عن العنصر المقابل ليه في الـ List الأولى.
one_more([1, 2, 3], L). يخلي L = [2, 3, 4].
Solution (One_more Predicate)
one_more([], []).
one_more([H1|T1], [H2|T2]) :- H2 is H1 + 1, one_more(T1, T2). حدّد إذا كانت الجمل دي صح ولا غلط مع تصحيح الغلط:
?-X is 9//2. Prolog will respond to this query as: X=4.5
?-X = 9/3. Prolog will respond to this query as: X=3
?-X is 9/2. Prolog will respond to this query as: X=4.5
member( b, [a,b,c]). ?- append(L, [C], [1,3,4]). Prolog will respond to this query as: L=[1,3], C=4
?- L=[1,2], L1=[5|L]. Prolog will respond to this query as: L1 = [5, 1, 2].
?- L=[1,2], L1=[5|L]. Prolog will respond to this query as: L1 = [1, 2, 5].
Solution (True/False) False (علامة // دي للقسمة الصحيحة Integer Division، فالناتج المفروض يكون X=4).
False (علامة = بتعمل Unification مش بتحسب، فالناتج هيفضل X = 9/3).
True (علامة / للقسمة العادية، و is بتحسب الناتج).
True (لأن الـ b موجودة جوه الـ List).
True (عشان [C] هو آخر عنصر اللي هو 4، و L هتبقى باقي الـ List [1, 3]).
True (عشان الـ Head هو 5 والـ Tail هو [1,2]).
False (الـ 5 بتتحط في الأول كـ Head، مش في الآخر). 1. ?- L=[a, b, c, d, e], append([ _ ], [A1,A2| _ ], L).
a) A1 = c, A2 = d.
b) A1 = b, A2 = c.
c) A1 = d, A2 = e.
d) A1 = a, A2 = b.
2. Write a goal to delete the first two elements from a list L producing list L2.
a) ?-append( _ , _ , L2, L)
b) ?-append([ _ , _ ], L2, L)
c) ?-append(L, [ _ , _ ], L2)
d) ?-append([ _ , _ ], L, L2)
3. To find the output of the function X = A^2 + AB. In prolog, we can write:
a) f(A,B,X):- X = A^2+A*B.
b) f(A,B,X):- X = A*A+A*B.
c) f(A,B,X):- X is A^2+AB.
d) f(A,B,X):- X is A^2+A*B.
4. Write a rule to find the last 2 elements of the list.
a) last2(L,A,B):- append(_,A,B,L).
b) last2(L,A,B):- append(_,(A1,A2),L).
c) last2(L,A,B):- append(L,_,[A,B]).
d) last2(L,A,B):- append(_,[A,B],L).
5. Write a goal to find the last 2 elements of the list.
a) ?-append( L, A, B)
b) ?-append(_,[A, B],L)
c) ?-append(_, (A,B], L)
d) ?-append([A,B], _, L)
6. To find the output of the Boolean function F = B' + A. In prolog, we can write:
a) fun(A, B, F):- not(B, X ), and(X, A, F).
b) fun(A, B, F):- or(B', A ).
c) fun(A, B, F):- not(B, X ), or(X, A, F).
d) fun(A, B, F):- not(B ), or(A, B, F).
Solution (MCQs) ا (b) لأن [_] هتاخد الـ a بس، يتبقى [A1, A2 | _] بتمثل [b, c, d, e]، يبقى A1=b و A2=c.
ا (b) لأننا بنمسك أول عنصرين بـ [_, _] ونحط باقي الـ List في L2، ومجموعهم هو L الأساسية.
ا (d) عشان لازم نستخدم is للحساب، وصيغة الضرب A*B والأس A^2.
ا (d) عشان بناخد أي عدد من العناصر في الأول _ وآخر عنصرين هما [A, B] ونجمعهم لـ L.
ا (b) نفس فكرة السؤال اللي قبله بالظبط.
ا (c) عشان هنجيب نفي B الأول ونخزنه في X، وبعدين نعمل OR بين الـ X دي والـ A ونطلع الناتج في F. استنتج نواتج الدوال الجاهزة والعمليات الحسابية دي ?- length([a,b,c,d,e,[a,x],t], X).
?- sumlist([1,2,3,4], N).
?- even([a,b,c,d]).
?- reverse([1,2,3], L).
?- msort([a,c,d,b], A).
Solution (Operations)
1) X = 7. % (الـ list اللي جوه `[a,x]` بتتحسب كعنصر واحد).
2) N = 10. % (مجموع 1+2+3+4).
3) true. % (عدد العناصر 4، وده عدد زوجي).
4) L = [3, 2, 1]. % (عكس الترتيب).
5) A = [a, b, c, d]. % (ترتيب أبجدي عادي). ]]></description><link>prolog/practice-examples/chapter-5-(part-2)-practice.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Practice Examples/Chapter 5 (Part 2) - Practice.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Chapter 5 (Part 1) - Practice]]></title><description><![CDATA[
اعمل قاعدة بيانات للسكان والمساحة للدول دي: وبعدين اعمل rule: density is population divided by area. واكتب الاستعلامات: Find the population of India.
Find the area of Brazil.
Find the population density of China.
Solution (Population Density)
% Facts
pop(usa, 203).
pop(india, 548).
pop(china, 800).
pop(brazil, 108). area(usa, 3).
area(india, 1).
area(china, 4).
area(brazil, 3). % Rule
density(X, Y) :- pop(X, P), area(X, A), Y is P / A. Queries:
?- pop(india, X). % X = 548
?- area(brazil, X). % X = 3
?- density(china, X). % X = 200 اعمل rules للدوال الرياضية دي: Sum: S = X + Y
Calculate: y = (x + 3)²
Polynomial: F = X⁴ + 2X + 5 واكتب الاستعلامات:
Find the sum of 5 and 4.
Find y when x = 2 using calculate.
Find F when X = 3 using the polynomial.
Solution (Arithmetic Functions)
% Rules
sum(X, Y, S) :- S is X + Y. calculate(X, Y) :- Y is (X + 3) ** 2. poly_func(X, F) :- F is X ** 4 + 2 * X + 5. Queries:
?- sum(5, 4, S). % S = 9
?- calculate(2, Y). % Y = 25
?- poly_func(3, F). % F = 92 (81 + 6 + 5) اعمل recursive rule لحساب factorial:
Base: factorial of 1 is 1.
Inductive: factorial of N is N × factorial of N-1.
واكتب الاستعلام:
Find the factorial of 5.
Solution (Factorial)
fac(1, 1).
fac(N, F) :- N &gt; 1, M is N - 1, fac(M, Fm), F is N * Fm. Queries:
?- fac(5, F). % F = 120 اعمل recursive rule لحساب greatest common divisor (GCD): If X and Y are equal, D = X.
If X &lt; Y, D = gcd(X, Y - X).
If Y &lt; X, D = gcd(Y, X). واكتب الاستعلامات:
Find the GCD of 12 and 8.
Find the GCD of 100 and 35.
Solution (GCD)
gcd(X, X, X).
gcd(X, Y, D) :- X &lt; Y, Y1 is Y - X, gcd(X, Y1, D).
gcd(X, Y, D) :- Y &lt; X, gcd(Y, X, D). Queries:
?- gcd(12, 8, D). % D = 4
?- gcd(100, 35, D). % D = 5 اعمل Facts للبوابات المنطقية الأساسية (not, and, or, xor):
Solution (Logic Gates)
not(0, 1). not(1, 0). and(0, 0, 0). and(0, 1, 0).
and(1, 0, 0). and(1, 1, 1). or(0, 0, 0). or(0, 1, 1).
or(1, 0, 1). or(1, 1, 1). xor(0, 0, 0). xor(0, 1, 1).
xor(1, 0, 1). xor(1, 1, 0). استخدم "and" و "xor" من Q5 عشان تبني half-adder: Carry = A and B Sum = A xor B وجرب inputs (0,1) و (1,1). Solution (Half Adder)
halfadder(A, B, Carry, Sum) :- and(A, B, Carry), xor(A, B, Sum). Queries:
?- halfadder(0, 1, C, S). % C = 0, S = 1
?- halfadder(1, 1, C, S). % C = 1, S = 0
?- halfadder(0, 0, C, S). % C = 0, S = 0
?- halfadder(1, 0, C, S). % C = 0, S = 1 استخدم "not", "and", "or" من Q5 عشان تعمل rule للدالة: F = B' + AC يعني: not B, then and(A, C), then or the results. وجرب inputs: A=1, B=0, C=1 A=1, B=1, C=1 A=0, B=1, C=1 A=0, B=0, C=0 Solution (Boolean Function)
bool_func(A, B, C, F) :- not(B, B_not), and(A, C, AC), or(B_not, AC, F). Queries:
?- bool_func(1, 0, 1, F). % F = 1
?- bool_func(1, 1, 1, F). % F = 1
?- bool_func(0, 1, 1, F). % F = 0
?- bool_func(0, 0, 0, F). % F = 1 اعمل recursive rule تجمع الأرقام من 1 لأي رقم X: F = 1 + 2 + 3 + ... + X واكتب الاستعلامات: Sum from 1 to 5. Sum from 1 to 10. Sum from 1 to 100. Solution (Summation 1 to X)
sum_to(1, 1).
sum_to(X, S) :- X &gt; 1, X1 is X - 1, sum_to(X1, S1), S is S1 + X. Queries:
?- sum_to(5, S). % S = 15
?- sum_to(10, S). % S = 55
?- sum_to(100, S). % S = 5050 اعمل recursive rule تجمع الأرقام الفردية (odd) من 1 لأي رقم فردي M: لو M زوجي: تخطاه Base: sum_odd(1, 1). واكتب الاستعلامات:
Sum of odd numbers from 1 to 5.
Sum of odd numbers from 1 to 7.
Sum of odd numbers from 1 to 10.
Solution (Summation of Odd Numbers)
sum_odd(1, 1).
sum_odd(N,S):- N&gt;1, N1 is N-2, sum_odd(N1, S1), S is N + S1. Queries:
?- sum_odd(5, S). % S = 9 (1+3+5)
?- sum_odd(7, S). % S = 16 (1+3+5+7)
?- sum_odd(10, S). % S = 25 (1+3+5+7+9) ]]></description><link>prolog/practice-examples/chapter-5-(part-1)-practice.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Practice Examples/Chapter 5 (Part 1) - Practice.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Chapter 4 - Practice]]></title><description><![CDATA[
حدد إذا كان كل ,واحد من دول يعتبر Atom صحيح ولا لأ: 2340ieh
george-smith
Void
_alpha
x25
x_y
'Sarah Jones'
&lt;----&gt;
anna
alpha__beta_procedure
Solution (Atoms Validation)
% 1) 2340ieh → False (begins with a number)
% 2) george-smith → False (contains dash '-', not a valid atom char)
% 3) Void → False (begins with capital letter)
% 4) _alpha → False (begins with underscore, treated as variable)
% 5) x25 → True (lowercase + digits)
% 6) x_y → True (lowercase + underscore)
% 7) 'Sarah Jones' → True (enclosed in single quotes)
% 8) &lt;----&gt; → True (string of special characters)
% 9) anna → True (lowercase letters)
% 10) alpha__beta_procedure → True (lowercase + underscores) اعمل structures للداتا دي باستخدام functors مناسبة: Date: 1 May 2001 → use functor date Person: Bob lives in London and is 48 years old → use functor person Address: flat 4, street 'Home Str.', postcode eh8_9lw → use functor addr وبعدين جرب الـ unification: date(4, M, 2001) = date(D1, may, Y1) person(Nm, london, Age) = person(bob, london, 48) person(S, _, 45) = person(harry, dude, 45) addr(flat(4), street('Home Str.'), postcode(eh8_9lw)) = addr(flat(Z), Yy, postcode(Xxx)) Solution (Structure Basics)
% Structures
date(1, may, 2001).
person(bob, london, 48).
addr(flat(4), street('Home Str.'), postcode(eh8_9lw)). Unification:
?- date(4, M, 2001) = date(D1, may, Y1).
% D1 = 4, M = may, Y1 = 2001 ?- person(Nm, london, Age) = person(bob, london, 48).
% Nm = bob, Age = 48 ?- person(S, _, 45) = person(harry, dude, 45).
% S = harry ?- addr(flat(4), street('Home Str.'), postcode(eh8_9lw)) = addr(flat(Z), Yy, postcode(Xxx)).
% Z = 4, Yy = street('Home Str.'), Xxx = eh8_9lw اعمل قاعدة بيانات للعربيات باستخدام structure car(Make, Age, Price): Joe has a Ford car, age 3, price 5000. Joe has an Opel car, age 2, price 6000. Mona has a Toyota car, age 5, price 1000. Mona has a Ford car, age 2, price 2000. واكتب الاستعلامات: What are the age and price of Mona's Ford car? Who has a Ford car? Display cars that have price &lt; 5000. Solution (Cars Database)
% Facts
has(joe, car(ford, 3, 5000)).
has(joe, car(opel, 2, 6000)).
has(mona, car(toyota, 5, 1000)).
has(mona, car(ford, 2, 2000)). Queries:
?- has(mona, car(ford, Age, Price)).
% Age = 2, Price = 2000 ?- has(Person, car(ford, _, _)).
% Person = joe ; Person = mona ?- has(_, car(Make, _, Price)), Price &lt; 5000.
% Make = toyota, Price = 1000 ;
% Make = ford, Price = 2000 استخدم functors point, seg, triangle عشان تمثل الأشكال الهندسية دي: Point P1 with coordinates (1, 1). Point P2 with coordinates (2, 3). Line segment S from P1 to P2. Triangle T with vertices (4,2), (6,4), (7,1). وبعدين جرب الـ matching: triangle = triangle point(1,1) = X A = point(4, Y) point(2,3) = point(2, Z) Solution (Geometric Objects)
point(1, 1).
point(2, 3).
seg(point(1, 1), point(2, 3)).
triangle(point(4, 2), point(6, 4), point(7, 1)). Matching:
?- triangle = triangle. % true
?- point(1, 1) = X. % X = point(1, 1)
?- A = point(4, Y). % A = point(4, Y)
?- point(2, 3) = point(2, Z). % Z = 3 استخدم functors عشان تمثل الـ expressions دي على شكل tree: (a + b) * (c - 5) → استخدم *, +, - كـ functors Parallel circuit: par(r1, r2) Series circuit: seq(r1, r2) par(r1, seq(par(r2, r3), r4)) Solution (Tree Representation)
% Arithmetic expression tree
*(+(a, b), -(c, 5)). % Circuit trees
par(r1, r2).
seq(r1, r2).
par(r1, seq(par(r2, r3), r4)). اعمل rules للخطوط: A line segment is vertical if its two points have the same X coordinate. A line segment is horizontal if its two points have the same Y coordinate. وبعدين اكتب الاستعلامات: Is the segment from (1,1) to (1,2) vertical? Is the segment from (1,1) to (2,Y) vertical? Is the segment from (1,1) to (2,Y) horizontal? (اوجد Y) Are there any vertical segments that start at (2,3)? Solution (Vertical &amp; Horizontal Lines)
vertical(seg(point(X, Y), point(X, Y1))).
horizontal(seg(point(X, Y), point(X1, Y))). Queries:
?- vertical(seg(point(1, 1), point(1, 2))). % true
?- vertical(seg(point(1, 1), point(2, Y))). % no
?- horizontal(seg(point(1, 1), point(2, Y))). % Y = 1
?- vertical(seg(point(2, 3), P)). % P = point(2, Y) اعمل قاعدة بيانات للموظفين باستخدام structure employee(Name, Dept, Position, Years, Salary): Ahmed works in Contracts as an Engineer for 6 years with salary 8000. Mona works in Purchases as a Secretary for 3 years with salary 4000. Hany works in Stores as a Head for 8 years with salary 10000. Saly works in Sales as an Accountant for 4 years with salary 5000. وبعدين اعمل rules: Find the department a person works in → department Get a person's basic salary → basic_salary Get a person's real salary → real_salary : All employees with over 5 years service get a bonus of $5000. واكتب الاستعلامات: What department does Ahmed work in?
What is Mona's basic salary?
What is Hany's real salary?
Who has been working for more than 5 years?
List all employees in the Sales department.
Solution (Employees Database)
% Facts
employee(ahmed, contracts, engineer, 6, 8000).
employee(mona, purchases, secretary, 3, 4000).
employee(hany, stores, head, 8, 10000).
employee(saly, sales, accountant, 4, 5000). % Rules
department(Person, Dept) :- employee(Person, Dept, _, _, _).
basic_salary(Person, Salary) :- employee(Person, _, _, _, Salary).
real(Person,Real):-employee(Person,_,_,Y,Basic) ,Y&gt;5 , Real is Basic+5000. Queries:
?- department(ahmed, Dept). % Dept = contracts
?- basic_salary(mona, Salary). % Salary = 4000
?- real_salary(hany, Salary). % Salary = 15000
?- employee(Person, _, _, Years, _), Years &gt; 5.
% Person = ahmed ; Person = hany
?- employee(Name, sales, _, _, _). % Name = saly ]]></description><link>prolog/practice-examples/chapter-4-practice.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Practice Examples/Chapter 4 - Practice.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Chapter 3 - Practice]]></title><description><![CDATA[
اعمل قاعدة بيانات للعيلة دي: Aly is the father of Hany.
Samy is the father of Aly.
Saly is the mother of Hany. وبعدين اعمل الـ rules دي. X is a parent of Y if X is the father of Y or X is the mother of Y. X is a grandparent of Y if X is a parent of Z and Z is a parent of Y. واكتب الاستعلامات: Who is Hany's parent?
Who is Aly's father?
Who is hany's grandparent?
Solution (Parent &amp; Grandparent Rules)
% Facts
father(aly, hany).
father(samy, aly).
&gt; mother(saly, hany). % Rules
parent(X, Y) :- father(X, Y).
parent(X, Y) :- mother(X, Y).
grandparent(X, Y) :- parent(X, Z), parent(Z, Y). Queries:
?- parent(X, hany). % X = aly ; X = saly
?- father(Y, aly). % Y = samy
?- grandparent(X, hany). % X = samy اعمل قاعدة بيانات لشجرة العيلة دي : Hany is a parent of Samy.
Saly is a parent of Samy.
Saly is a parent of Lila.
Samy is a parent of Aly.
Samy is a parent of Dena.
Dena is a parent of Tamer.
Hany, Samy, Aly, Tamer are male.
Saly, Dena, Lila are female.
Solution (Family Tree Facts)
parent(hany, samy).
parent(saly, samy).
parent(saly, lila).
parent(samy, aly).
parent(samy, dena).
parent(dena, tamer).
male(hany).
male(samy).
male(aly).
male(tamer).
female(saly).
female(dena).
female(lila). من قاعدة البيانات بتاعة شجرة العيلة (سؤال 2)، اعمل الـ rules دي: X is the father of Y if X is a parent of Y and X is male.
X is the mother of Y if X is a parent of Y and X is female.
X is a sibling of Y if they both have the same parent Z.
Y is an offspring of X if X is a parent of Y.
X is a sister of Y if X is a sibling of Y and X is female.
Solution (Family Tree Rules)
father(X, Y) :- parent(X, Y), male(X).
mother(X, Y) :- parent(X, Y), female(X).
sibling(X, Y) :- parent(Z, X), parent(Z, Y).
offspring(Y, X) :- parent(X, Y).
sister(X, Y) :- sibling(X, Y), female(X). من قاعدة البيانات بتاعة شجرة العيلة (سؤال 2)، اكتب الاستعلامات دي: Is Samy a parent of Dena?
Is Aly a parent of Dena?
Who is Lila's parent?
Who is a parent of Aly and a parent of Dena?
List all parent relationships.
Who is Tamer's parent?
Who is Dena's child?
Who are the male offspring of Hany?
Who has a sister?
Who is Dena's grandparent?
Solution (Family Tree Queries)
?- parent(samy, dena). % true
?- parent(aly, dena). % false
?- parent(X, lila). % X = saly
?- parent(X, aly), parent(X, dena). % X = samy
?- parent(X, Y). % lists all
?- parent(X, tamer). % X = dena
?- parent(dena, X). % X = tamer
?- parent(hany, X), male(X). % X = samy
?- parent(Z, X), parent(Z, Y), female(X). % sister queries
?- parent(X, Y), parent(Y, dena). % X = hany, Y = samy ; X = saly, Y = samy ; اعمل قاعدة بيانات للطلاب دي using the predicate اstudent(Name, Sex, Age): وبعدين اعمل rule: X is older than Y if age of X is greater than age of Y. واكتب الاستعلامات: What is Hany's age?
Who is male?
List names with age &lt; 30 and they are female.
Find students older than Mona.
Find students with age less than Ahmed. (ممكن تتحل بطريقتين)
Find students younger than Ahmed and older than Mona. (ممكن تتحل بطريقتين)
Solution (Student Age Database)
% Facts
student(ahmed, male, 30).
student(hany, male, 25).
student(rwan, female, 20).
student(mona, female, 18). % Rule
older(X, Y) :- student(X, _, AgeX), student(Y, _, AgeY), AgeX &gt; AgeY. Queries:
?- student(hany, _, Age). % Age = 25
?- student(Name, male, _). % Name = ahmed ; Name = hany
?- student(Name, female, Age), Age &lt; 30. % Name = rwan ; Name = mona
?- older(X, mona). % X = ahmed ; X = hany ; X = rwan
?- student(X, _, AgeX), student(ahmed, _, AgeA), AgeX &lt; AgeA.
% X = hany ; X = rwan ; X = mona
?- student(X, _, Age), student(ahmed, _, AgeA), student(mona, _, AgeM), Age &lt; AgeA, Age &gt; AgeM.
% X = hany ; X = rwan اعمل قاعدة بيانات: Samy is male. Hany is male. Samy is a child of Hany. وبعدين اعمل rule: X is a son of Y if X is male and X is a child of Y. اكتب الاستعلامات: Who is Samy the son of? Who is male? (اعرض كل الإجابات) Is Samy the son of someone? (استخدم anonymous variable _) Solution (son/child Rule)
% Facts
male(samy).
male(hany).
child(samy, hany). % Rule
son(X, Y) :- male(X), child(X, Y). Queries:
?- son(samy, X). % X = hany
?- male(X). % X = samy ; X = hany
?- son(samy, _). % true اعمل قاعدة بيانات لـ 4 blocks فوق بعضها: Block a is on block b.
Block b is on block c.
Block c is on block d. وبعدين اعمل recursive rule: X is above Y if X is directly on Y. X is above Y if X is on Z and Z is above Y. واكتب الاستعلامات: Is block b on block c?
Is block a on block d? Is block a above block d?
What blocks are above block c?
Solution (Recursive above)
% Facts
on(a, b).
on(b, c).
on(c, d). % Recursive Rules
above(X, Y) :- on(X, Y).
above(X, Y) :- on(X, Z), above(Z, Y). Queries:
?- on(b, c). % true
?- on(a, d). % false
?- above(a, d). % true
?- above(X, c). % X = b ; X = a اعمل قاعدة بيانات: a is a parent of b. b is a parent of c. c is a parent of d. d is a parent of e. وبعدين اعمل recursive rule: X is a predecessor of Z if X is a parent of Z. X is a predecessor of Z if X is a parent of Y and Y is a predecessor of Z. واكتب الاستعلامات: Is a a parent of b?
Is a a predecessor of b?
Is a a predecessor of e?
Who are the predecessors of d?
Who are the descendants of a?
Solution (Recursive predecessor)
% Facts
parent(a, b).
parent(b, c).
parent(c, d).
parent(d, e). % Recursive Rules
predecessor(X, Z) :- parent(X, Z).
predecessor(X, Z) :- parent(X, Y), predecessor(Y, Z). Queries:
?- parent(a, b). % true
?- predecessor(a, b). % true
?- predecessor(a, e). % true
?- predecessor(X, d). % X = c ; X = b ; X = a
?- predecessor(a, X). % X = b ; X = c ; X = d ; X = e اعمل قاعدة بيانات بالحقائق دي: An elephant is bigger than a horse. A horse is bigger than a donkey. A donkey is bigger than a dog. A donkey is bigger than a monkey. وبعدين اعمل recursive rule: X is bigger than Y if X is directly bigger than Y. X is bigger than Y if X is bigger than Z and Z is bigger than Y. واكتب الاستعلامات: Is an elephant bigger than a monkey?
What is bigger than a donkey?
What is a horse bigger than?
What is bigger than a dog and that thing is also bigger than a monkey?
Solution (Recursive is_bigger)
% Facts
bigger(elephant, horse).
bigger(horse, donkey).
bigger(donkey, dog).
bigger(donkey, monkey). % Recursive Rules
is_bigger(X, Y) :- bigger(X, Y).
is_bigger(X, Y) :- bigger(X, Z), is_bigger(Z, Y). Queries:
?- is_bigger(elephant, monkey). % true
?- is_bigger(X, donkey). % X = horse ; X = elephant
?- is_bigger(horse, X). % X = donkey ; X = dog ; X = monkey
?- is_bigger(elephant, X), is_bigger(X, donkey).
% X = horse اعمل قاعدة بيانات للـ graph دي using the predicate link(Node1, Node2, Distance): Node a is connected to b with distance 2. Node a is connected to c with distance 3. Node b is connected to d with distance 4. Node b is connected to e with distance 5. Node c is connected to f with distance 6. Node c is connected to g with distance 7. وبعدين اعمل recursive rule:
X can reach Y with distance D if there is a direct link between them.
X can reach Y with distance D if X can reach Z with distance D1 and Z can reach Y with distance D2 and D = D1 + D2.
واكتب الاستعلامات:
What nodes are directly connected to node b and their distance?
Which nodes connect to node c and their distance?
Which other nodes can you reach when starting at node a and their distances?
Which nodes can be found between node a and node e, and their distances from a and to e?
Solution (Graph Route)
% Facts
link(a, b, 2).
link(a, c, 3).
link(b, d, 4).
link(b, e, 5).
link(c, f, 6).
link(c, g, 7). % Recursive Rules
route(X, Y, D) :- link(X, Y, D).
route(X, Y, D) :- link(X, Z, D1), route(Z, Y, D2), D is D1 + D2. Queries:
?- link(b, X, D). % X = d, D = 4 ; X = e, D = 5
?- link(X, c, D). % X = a, D = 3
?- route(a, X, D). % X = b, D = 2 ; X = c, D = 3 ; % X = d, D = 6 ; X = e, D = 7 ; % X = f, D = 9 ; X = g, D = 10
?- route(a, X, D1), route(X, e, D2). % X = b, D1 = 2, D2 = 5 اعمل قاعدة بيانات للرحلات الجوية دي: وبعدين اعمل rules: Flight N is faster than flight M if duration of N &lt; duration of M. You can travel from X to Y with total duration D if there is a direct flight from X to Y with duration D. You can travel from X to Y with total duration D if there is a flight from X to Z with duration D1 and you can travel from Z to Y with duration D2 and D = D1 + D2. واكتب الاستعلامات: Which cities can be reached by a single flight from Cairo? How long does flight AL2 take? From which cities can you fly to London (by a single flight)? Which flight numbers are faster than BA1? Which flight numbers are slower than AL2? Which cities can be reached by some sequence of flights from Cairo? From which cities can one travel to Paris by some sequence of flights? Solution (Flights)
% Facts
flight(ba1, cairo, rome, 3.5).
flight(al2, rome, paris, 2.5).
flight(ba6, cairo, london, 6.2).
flight(af1, paris, brussels, 0.6). % Rules
faster(N, M) :- flight(N, _, _, D1), flight(M, _, _, D2), D1 &lt; D2. travel(X, Y, D) :- flight(_, X, Y, D).
travel(X, Y, D) :- flight(_, X, Z, D1), travel(Z, Y, D2), D is D1 + D2. Queries:
?- flight(_, cairo, City, _). % City = rome ; City = london
?- flight(al2, _, _, Duration). % Duration = 2.5
?- flight(_, From, london, _). % From = cairo
?- faster(F, ba1). % F = al2 ; F = af1
?- faster(al2,S). % S = ba1 ; S = ba6
?- travel(cairo, City, _). % City = rome ; City = london ; % City = paris ; City = brussels
?- travel(City, paris, _). % City = rome ; City = cairo اعمل قاعدة بيانات لفترات حكم الأمراء دي: وبعدين اعمل rule: X was a prince during year Y if X reigned between years A and B, and Y is between A and B inclusive. واكتب الاستعلامات: Was Samy a prince in year 225? Was Aly a prince in year 1979? Which prince(s) were on the throne in year 240? Solution (Reigns Database)
% Facts
reigns(aly, 200, 220).
reigns(samy, 221, 230).
reigns(hany, 231, 245).
reigns(lotfy, 246, 260). % Rule
prince(X, Y) :- reigns(X, A, B), Y &gt;= A, Y =&lt; B. Queries:
?- prince(samy, 225). % true
?- prince(aly, 1979). % false
?- prince(X, 240). % X = hany ]]></description><link>prolog/practice-examples/chapter-3-practice.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Practice Examples/Chapter 3 - Practice.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Chapter 1 & 2 - Practice]]></title><description><![CDATA[
اعمل Facts للجمل الانجليزي دي: Gold is valuable.
Saly is a female.
Aly owns some gold.
Gamal gives the book to Mona. (3 arguments)
Solution (Properties)
valuable(gold).
female(saly).
owns(aly, gold).
gives(gamal, book, mona). اعمل Facts لجمل الانجليزي دي: A car is fun.
A rose is red.
Bill likes Cindy.
Cindy likes Bill.
Bill likes dogs.
Solution (Facts Translation)
fun(car).
red(rose).
likes(bill, cindy).
likes(cindy, bill).
likes(bill, dogs). اعمل قاعدة بيانات للداتا دي: Aly is 42 years old.
Hany is 15 years old.
Saly is 20 years old.
Aly is male.
Hany is male.
Saly is female. واكتب الاستعلامات دي: Is Aly 42 years old?
What is Hany's age?
Who is male? (اعرض كل الإجابات)
List names with age &lt; 40.
List names with age &lt; 40 and they are female.
Solution (Age Database)
age(aly, 42).
age(hany, 15).
age(saly, 20).
male(aly).
male(hany).
female(saly). Queries:
?- age(aly, 42). % true
?- age(hany, X). % X = 15
?- male(Y). % Y = hany ; Y = aly ?- age(Name, Age), Age &lt; 40.
% Name = hany, Age = 15 ;
% Name = saly, Age = 20 ?- age(Name, Age), Age &lt; 40, female(Name).
% Name = saly, Age = 20 اعمل قاعدة بيانات بالـ Facts دي: Mia is a woman.
Jana is a woman.
Yara is a woman.
Fady loves Mia.
Magdy loves Mia.
Magdy loves Badr.
Aly loves Badr.
Hany loves Aly. واكتب الاستعلامات: Who is a woman? (اعرض كل النتائج واحدة واحدة)
Does Magdy love Mia?
Does Magdy love Badr?
Solution (Loves Database)
woman(mia).
woman(jana).
woman(yara).
loves(fady, mia).
loves(magdy, mia).
loves(magdy, badr).
loves(aly, badr).
loves(hany, aly). Queries:
?- woman(X).
% X = mia ; X = jana ; X = yara ; no ?- loves(magdy, mia). % yes
?- loves(magdy, badr). % yes من قاعدة البيانات:
likes(mary, food).
likes(mary, tea).
likes(john, tea).
likes(john, mary). اكتب الاستعلامات دي باستخدام الـ conjunctions ا ( and , or ): Does John like Mary and does Mary like John?
Is there anything that John and Mary both like?
Solution (Conjunctions)
?- likes(john, mary), likes(mary, john).
% no :( ?- likes(mary, X), likes(john, X).
% X = tea اعمل قاعدة بيانات لعيلة Jim: John is the father of Jim.
Jack is father of John.
Jane is the mother of Jim. واكتب الاستعلامات: Who is Jim's father?
Is Jane the mother of Fred?
Is Jane the mother of Jim?
Does Jack have a grandchild?
Solution (Jim's Family)
father(john, jim).
mother(jane, jim).
father(jack, john). Queries:
?- father(X, jim).
?- mother(jane, fred).
?- mother(jane, jim).
?- father(jack, X), father(X, Y). اعمل قاعدة بيانات لعيلة Charles: Charles is male.
Edward is male.
Philip is male. Anne is female
Philip is a parent of Anne
Philip is a parent of Edward
Philip is a parent of Charles واكتب الاستعلامات دي: The parents of Charles.
The father of Charles.
The grandfather of Charles.
All the grandchildren of the grandparents of Charles. ( احفاد جد تشارلز )
All males.
Solution (Charles's Family) Facts:
male(charles).
male(edward).
male(philip).
female(anne).
parent(philip,anne).
parent(philip,edward).
parent(philip,chalres). ?- parent(X, charles).
?- parent(X, charles),male(X).
?- parent(X, charles), parent(Y, X).
?- parent(X, charles), parent(Y, X), parent(Y, P), parent(P, G).
?- male(X). استخدم قاعدة بيانات لشجرة عيلة Pam و Bob :
parent(pam, bob).
parent(tom, bob).
parent(tom, liz).
parent(bob, ann).
parent(bob, pat).
parent(pat, jim). واكتب الاستعلامات: Who is Liz's parent?
Who are Bob's children?
Who is a parent of whom?
Who is a grandparent of Jim?.
Do Ann and Pat have a common parent?
Solution (Extended Pam &amp; Bob)
Queries:
?- parent(X, liz).
?- parent(bob, X).
?- parent(X, Y).
?- parent(X, Y), parent(Y, jim).
?- parent(X, ann), parent(X, pat). ]]></description><link>prolog/practice-examples/chapter-1-&amp;-2-practice.html</link><guid isPermaLink="false">2 - Areas/College/prolog/Practice Examples/Chapter 1 &amp; 2 - Practice.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 9 - Cryptography]]></title><description><![CDATA[الفكرة العامة
علم التشفير (Cryptography) هو الفن والعلم اللي بنستخدم فيه معادلات رياضية عشان نحمي بياناتنا. الفكرة ببساطة إننا بنحوّل الكلام المفهوم (Plaintext) لـ "طلاسم" غير مفهومة (Ciphertext)، عشان نمنع أي حد غير مصرح ليه إنه يقرأ أو يعدل البيانات دي.
عشان نفهم التشفير، لازم نكون عارفين لغة المجال:-ا Plaintext / Cleartext: النص الأصلي المقروء (زي رسالة "مرحبا").
-ا Ciphertext: النص المُشفر أو الطلاسم (الرسالة بعد ما اتشفرت).
-ا Encryption: عملية التشفير (تحويل الـ Plaintext لـ Ciphertext).
-ا Decryption: عملية فك التشفير (تحويل الـ Ciphertext لـ Plaintext تاني).
-ا Cipher: الخوارزمية (Algorithm) أو الخطوات اللي بنمشي عليها عشان نشفر أو نفك التشفير.
-ا Key: المفتاح المستخدم في معادلة التشفير.
-ا Cryptanalysis: علم تحليل و كسر التشفير (الناس اللي بتعمل كده اسمهم Attackers أو Cryptanalysts).
-ا Cryptology: العلم الشامل اللي بيضم التشفير (Cryptography) وكسر التشفير (Cryptanalysis) مع بعض.مكونات أي نظام تشفير (Cryptosystem)
النص الأصلي (Plaintext) ⬅️ خوارزمية ومفتاح التشفير ⬅️ النص المشفر (Ciphertext) ⬅️ خوارزمية ومفتاح فك التشفير ⬅️ النص الأصلي يرجع تاني.
التشفير مش بس بيخبي البيانات، ده بيحقق 4 أهداف أساسية:
1.ا Confidentiality (السرية): محدش يقدر يقرأ البيانات غير الشخص المقصود.
2.ا Integrity (السلامة): البيانات ماتتعدلش في السكة بدون ما نكتشف.
3.ا Authentication (الموثوقية): التأكد من هوية الشخص اللي باعت الرسالة.
4.ا Non-repudiation (عدم الإنكار): المرسل ميقدرش ينكر إنه بعت الرسالة.فيه مدرستين كبار في عالم التشفير بنقسمهم حسب "المفتاح" المستخدم:دي طرق التشفير القديمة اللي كانت بتعتمد على تبديل الحروف، وهي أساس فهم التشفير الحديث:
بيعتمد على تشفيت (Shift) حروف الأبجدية بعدد معين متفق عليه.
اتسمى على اسم "يوليوس قيصر" اللي كان بيستخدم (Shift = 3) عشان يحمي رسايله العسكرية.
مثال على Caesar Cipher (Shift = 3)
النص الأصلي: TREATY IMPOSSIBLE
طريقة التشفير: هنحرك كل حرف 3 خطوات (الـ A تبقى D، الـ T تبقى W).
النص المشفر: WUHDWB LPSRVVLEOH هو ببساطة حالة خاصة من Caesar Cipher، بس الـ Shift بيكون بـ 13 خطوة ثابتة.
ميزته: بما إن الحروف الإنجليزية 26 حرف، لو شفرت بـ 13، وفكيت التشفير بـ 13 تاني.. هترجع لنفس الحرف! بيعتمد على عكس الحروف الأبجدية (بدون أي مفتاح خارجي).
الحرف الأول (A) يتبدل بالأخير (Z).
الحرف التاني (B) يتبدل باللي قبل الأخير (Y)، وهكذا.
تشفير Playfair بيعتمد على تحويل الحروف لـ أزواج (حرفين حرفين) وتشفيرهم باستخدام شبكة 5x5.بنرص حروف الأبجدية الإنجليزية في جدول 5×5. وبما إن الحروف 26، بندمج حرفي الـ (I و J) في مربع واحد عشان يبقوا 25.
(بدون استخدام مفتاح، الشبكة بتكون مترتبة أبجدياً كده):
بنقسم الكلمة لـ أزواج (Pairs).
لو لقينا حرفين متكررين ورا بعض في نفس الزوج، بنفصل بينهم بحرف X.
لو الكلمة اتبقى منها حرف لوحده في الآخر، بنزودله X.
أمثلة لتجهيز الكلمات: كلمة WORLD: هتتقسم لـ WO و RL والـ D لوحدها هنزودلها X تبقى DX. (النتيجة: WO RL DX)
كلمة HELLO: هتتقسم لـ HE، بعدين يقابلنا LL فنبدلهم بـ X تبقى LX، ويتبقى OX. (النتيجة: HE LX OX) بص علي جدول الحروف وحاول تتخيل معايا عشان مش هقعد ارسمالقاعدة الأولى: لو الحرفين في "نفس الصف" ➡️ (بناخد الحرف اللي يمين كل واحد)
مثال: عايزين نشفر الزوج GI
الـ G يمينها H، والـ I يمينها K. (النتيجة: HK)
(ملاحظة: لو الحرف في آخر الصف زي E، بنلف ونجيب أول حرف في نفس الصف A).
القاعدة التانية: لو الحرفين في "نفس العمود" ⬇️ (بناخد الحرف اللي تحت كل واحد)
مثال: عايزين نشفر الزوج CH
الـ C تحتها H، والـ H تحتها N. (النتيجة: HN)
(ملاحظة: لو الحرف في آخر العمود زي Z، بنلف ونجيب أول حرف من فوق في نفس العمود E).
القاعدة التالتة: لو الحرفين بيعملوا "مستطيل" 🔀 (بناخد الزوايا العكسية)
مثال: عايزين نشفر الزوج MT (الـ M في الصف التالت، والـ T في الصف الرابع).
بنرسم مستطيل تخيلي أطرافه M و T.
بناخد الحروف اللي في الزاويتين التانيين للمستطيل، بس بنبدا باللي في نفس صف الحرف الأول.
الـ M في نفس صفها O، والـ T في نفس صفها R. (النتيجة: OR)
دي طريقة رياضية متقدمة بتعتمد على الجبر الخطي وضرب المصفوفات (Matrix Multiplication).
الفكرة إننا مش بنشفر حرف بحرف لوحده، لأ إحنا بناخد "مجموعة حروف" مع بعض (مثلاً كل 3 حروف) ونضربهم في مصفوفة (هي دي المفتاح) عشان نطلع 3 حروف مشفرين مختلفين تماماً.
تحويل الحروف لأرقام: بنرقم الأبجدية الإنجليزية من 0 لـ 25. (A=0, B=1, C=2, ..., Z=25). تقسيم الكلمة: بنقسم الكلمة لمجموعات (حسب حجم مصفوفة المفتاح، غالباً كل 3 حروف مع بعض).
تطبيق معادلة التشفير: : مصفوفة النص الأصلي (Plaintext).
: مصفوفة المفتاح (Key Matrix).
: بنجيب "باقي القسمة" على 26 (عشان الناتج يفضل دايماً رقم من 0 لـ 25 ونقدر نحوله لحرف). تحويل الأرقام لحروف: الأرقام الناتجة بنرجعها حروف تاني فنجيب النص المشفر.
“Pasted image 20260520005839.png” could not be found.مثال تطبيقي من المحاضرة
الهدف: تشفير كلمة pay (وهي جزء من رسالة paymoremoney).
الخطوة 1: نحول pay لأرقام: p = 15
a = 0
y = 24
إذن مصفوفة الكلمة هي: [15, 0, 24] الخطوة 2 &amp; 3: نضرب في مصفوفة المفتاح (الرقم السري المتفق عليه)، ونجيب الناتج .
حسب المثال في المحاضرة، الأرقام الناتجة طلعت: [17, 17, 11]
الخطوة 4: نرجع الأرقام الجديدة لحروف: 17 = R
17 = R
11 = L النتيجة: كلمة pay اتشفرت وبقت RRL!
عشان نرجع الرسالة لأصلها، بنستخدم نفس الطريقة بس بنعكس المفتاح.
بنضرب النص المشفر في معكوس مصفوفة المفتاح ().
المعادلة: “Pasted image 20260520005915.png” could not be found.]]></description><link>networks/lecture-9-cryptography.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 9 - Cryptography.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 8 - Security Fundamentals]]></title><description><![CDATA[مقدمة ا Network Security هي حماية المعلومات والأنظمة والـ hardware اللي بيستخدم ويخزن وينقل المعلومات دي
بتشمل الخطوات اللي بنضمن بيها السرية و السلامة و التوفر للبيانات والموارد ا Vulnerability: أي ضعف محتمل ممكن يهدد CIA
ا Exploit: حاجة بتستغل الـ vulnerability
ا Threat: احتمال إن الـ vulnerability تستخدم exploit (زي ان hacker بيستغل ضعف في نظامك)
ا Mitigation: إجراءات حمائية ضد الـ threats — بنطبّقها على كل حتة: client devices, servers, switches, firewalls, إلخ
مفيش نظام أمن 100% — دايمًا في مخاطر
الهدف: يوقف السيرفر عن الشغل بيهدد الـ Availability — يخلي الموقع أو الخدمة مش متاحة
ا TCP SYN flood: تخيل حد يرن الجرس ويطلع يجري (SYN) وصاحب البيت يقوم يفتح ويشوف مين الي رن (SYN-ACK)، لكن اللي رن جري اصلا (مفيش ACK ) — تخيل ده بس آلاف المرات , ساعتها لو شخص عادي جه يرن الجرس صاحب البيت مش هيفتح, نفس الفكره هنا , الهاكر يبعت طلب للسرفر الاف المرات فالسرفر موارده تخلص فلما مستخدم حقيقي يبعت طلب السرفر ميقدرش يرد عليه
ا DDoS: نفس الكلام لكن آلاف الأجهزة بتدق الباب في نفس الوقت (باستخدام botnet)
لو مش فاكر ايه هو الـ SYN-ACK ارجع للمحاضرة 4
الهدف: يتخفي في شخصية حد تاني بيزوّر المصدر — يبعت حاجة و يكتب إنه من عنوان مزيف (IP أو MAC)
مثال: DHCP exhaustion: تخيل ان عندك عزومه وعندك 100 كرت دعوه, شخص جه وعمل الـ 100 دعوه كلهم باسماء اشخاص وهميين. ف لما حد حقيقي يطلب دعوه متلاقيش اي كروت فاضله.
نفس الفكره هنا, الـ attacker يبعت Discover messages بـ MAC addresses مزيفه, الـ DHCP يفكرهم أجهزة جديدة ويخصّص لهم IPs من الـ pool. الـ pool يخلص فالأجهزة الحقيقية متاخدش عناوين -&gt; DoS
الحل: DHCP Snooping — الـ switch يسمح بـ DHCP من الـ trusted port بس الهدف: يضرب الضحية بإيد حد تاني ا Reflection: الـ attacker يبعت رسالة لـ DNS server و يكتب إن العنوان الي الرد هيروح ليه هو العنوان بتاع الضحية — الـ server يرد على الضحية مش على الـ attacker, ولو الرد كبير كفايه ده ممكن يأدي لـ denial of services (DoS)
ا Amplification: نفس الفكرة لكن الرسالة صغيرة (مثلاً "قولي كل حاجة عن فلان") والرد كبير جداً — الضحية تستقبل 100 ضعف الحجم الأصلي
الخلاصة: attacker بيستغل سيرفرات عامة عشان يضرب الضحية الهدف: يقف بينك وبين وجهتك عشان يسمع ويعدّل اللي بتقوله مثال: واحد يركب سلك تليفونك ويسمع المكالمة — أو يغيّر الكلام قبل ما يوصلك ا PC1 يسأل "مين عنده IP 10.0.0.1؟"
السرفر الحقيقي يرد — والـ attacker يرد بردو متأخر عشان يعمل overwrite في ARP Table الي موجوده في PC1 بعد كده: PC1 يبعت data للسرفر -&gt; تروح للـ attacker
الـ attacker يقدر يتنصت (يهدد Confidentiality) و يعدّل البيانات (يهدد Integrity) قبل ما يوديها للسرفر الـ ARP Table : جدول صغير في جهازك بيربط عنوان IP بالـ MAC Address بتاعه، عشان تعرف تبعت البيانات لمين.
جمع معلومات عن الـ target (بتكون أول مرحلة في أي هجوم كبير) نوعين:ا ا Passive: مفيش تفاعل مباشر مع الـ target — مراقبة traffic، بحث في معلومات عامة
ا Active: تفاعل مباشر مع الـ target — port scans, service fingerprinting كلمة سر قوية: ≥ 8 أحرف، خلط uppercase + lowercase + أرقام + رموز خاصة (# @ ! ?)
الهدف: يخدع الإنسان مش الجهاز بدل ما يحاول يخترق السرفر، يكلمك على التليفون ويقولك "أنا من الدعم الفني، عايز كلمة السر عشان أصلح مشكلة" — وانت تصدقه
أمثلة: Phishing (إيميل وهمي)، Pretending (يتنكر في شخصية حد) اثنين أو أكتر من: لو attacker عرف كلمة السر (something you know)، لسه مش هيعرف يدخل من غير الـ factors التانية طريقة مصادقة لإثبات هوية حامل الـ certificate
بتستخدم للمواقع عشان تثبت إن الموقع اللي بتدخل عليه حقيقي
الـ entity اللي عايز certificate يبعت CSR (Certificate Signing Request) لـ CA (Certificate Authority) — وCA تعمل وتوقع الـ certificate Framework للتحكم في المستخدمين ومراقبتهم الشركات بتستخدم AAA server زي ISE (Cisco Identity Services Engine)
بروتوكولات الـ AAA: توعية الموظفين بمخاطر الأمن
مثال: الشركة تبعث إيميلات phishing وهمية — اللي يقع فيها يتنبه إنه يبقى حريص تدريب رسمي — ازاي تعمل strong passwords، إزاي تتجنب التهديدات حماية المعدات والبيانات بمنع الدخول المادي للأماكن المحمية
أقفال متعددة العوامل (badge + بصمة)
صلاحيات الموظفين (البادجات مثلا) تتعدل بسهولة (مثلا لو موظف استقال)
ليه محتاج Firewall؟ أي جهاز متصل بالإنترنت معرّض لملايين الأنظمة
الـ switches والـ routers مصمّمة تنقل traffic مش توقف attacks
الـ firewall هو أول خط دفاع — بيمنع الـ traffic المشبوه قبل ما يوصل للشبكة الداخلية بيشتغل على Layer 4 (OSI) — بيقرأ headers من Layer 2 (MAC), Layer 3 (IP), Layer 4 (Port) بيستخدم 6-tuple عشان يعرّف الـ network flow بشكل unique: Source IP + Source Port + Destination IP + Destination Port + Protocol + Direction مثال: 192.168.1.10 : 51514 → 23.0.13.20 : 443 (TCP outbound) — الـ admin يقرر يسمح أو يمنع الفلو ده كل interface على الـ firewall ليه security level من 0 لـ 100
Inside = 100 (أكتر ثقة) — Outside = 0 (أقل ثقة) — DMZ = 50 (وسط)
Higher Security → Lower Security = مسموح (Inside → Outside)
Lower Security → Higher Security = ممنوع (Outside → Inside) يعني الـ firewall بيحمي out of the box: الموظفين يفتحوا إنترنت (100 -&gt; 0 مسموح)، لكن أي حد من برة يدخل على الشبكة الداخلية (0 -&gt; 100 ممنوع) — حتى لو مفيش rules مكتوبة الـ firewall مش بيتعامل مع كل packet لوحدها — بيتتبع حالة الـ connections
أول ما موظف يفتح موقع (Inside → Outside), الـ firewall يعمل entry في State Table فيه: Source/Destination IP, Ports, Protocol, Connection State
أي return traffic يطابق الـ entry ده يسمح بيه تلقائيًا حتى لو مفيش rule صريح للـ inbound
الـ TCP: بيتتبع الـ Three-way handshake — يشوف SYN -&gt;يعني Established — يصدق إنها connection حقيقية مش هجوم من برة
تشبيه ا Stateful: زي البواب عنده نوتة. كل ما موظف يطلب حاجة من برة، البواب يكتبها في النوتة. لما الرد يجي، يشوف النوتة ويقول "أه ده مطلوب" — يدخله. ليه محتاج IPS الـ firewall قصر في ايه؟ الـ firewall بيشتغل على الـ 6-tuple: IP, Port, Protocol — مش بيفرق بين login legit و login malicius
لو سمحت بالـ SSH على الـ firewall، أي حد يستخدم SSH عادي — حتى لو attacker بيحاول يخترق الـ SQL database
ا IPS هو جهاز أمني بيقف inline مع الـ traffic ويفحص الـ packets بعمق ويمنع الـ threats في real-time الـ False Positive: لما الـ IPS يفكر إن traffic legit هو attack ويعمله block ويطلع في الاخر legit ومش هاكر
ا Alert and Log: ا syslog + alert للـ team (دي IDS mode)
ا Drop the Packet: يتخلص من الـ packet الضار
ا Reset the Connection: يبعت TCP reset للـ source والـ destination — يقطع الاتصال
ا Block the Source (Quarantine): يضيف مصدر الهجوم لـ block list — أو يعزل الـ host المصاب في network segment منفصل
]]></description><link>networks/lecture-8-security-fundamentals.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 8 - Security Fundamentals.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 7 - Wireless Networks]]></title><description><![CDATA[مقدمة ا Wireless network بيخلّي الناس تتواصل وتستخدم التطبيقات من غير أسلاك
بيدي freedom of movement ويقدر يوصّل الشبكة لأماكن صعب توصلها بالكابلات
بيستخدم radio waves أو infrared light للاتصال
عشان يكون عندك wireless infrastructure كويسة، لازم يكون في wired infrastructure قوية كـ backbone ا Wavelength (λ): المسافة الفيزيائية بين نقطة في الدوره ونفس النقطه في الدورة اللي بعدها
ا Frequency: عدد مرات تكرار الـ radio wave في الثانية (unit: Hertz)
ا Reflection: لما الموجه تخبط بحاجز بزاوية منخفضة وترتد
ا Multipath: الموجة الأصلية توصل + نسخ منها بعد ما ترتد على الحوائط والسقف
ا Refraction: تغير اتجاه الموجة لما تعدي من وسط لآخر (زي من الهوا للمية)
ا Scattering: الموجة ترتد من الأتربة أو قطرات المية في الهوا وتتشتت ا IEEE 802.15
مدى قصير جدًا: 1–10 meters
استهلاك طاقة قليل — سرعة قليلة — تكلفة منخفضة
تقنيات: Bluetooth, Zigbee ا IEEE 802.11 — اللي بنعرفه باسم Wi-Fi
مدى: 50–100 meters
الترددات: 2.4 GHz, 5 GHz, 6 GHz ا Infrastructure Mode (Star): الأجهزة بتتصل عن طريق Access Point
ا Ad-Hoc Mode (Peer-to-Peer): الأجهزة بتتصل مباشرة من غير AP ا ا Mesh Mode: ا APs متصلة ببعض لتغطية واسعة ا IEEE 802.16 — معروف بـ WiMAX
مدى: several kilometers (city)
ا Point-to-Multipoint — بي interconnect شبكات WLAN صغيرة Fixed WMAN (802.16d): للاتصالات الثابتة
Mobile WMAN (802.16e): بيدعم الحركة Point-to-Multipoint
Mesh أكبر مدى: Nationwide / Global (&gt; 50 km)
بيستخدم licensed frequencies و antenna towers عالية
مقدّم من telecommunications carriers ا Cellular Topology: المنطقة مقسّمة لـ cells ب base stations
ا Hierarchical Cell Structure: Macrocell, Microcell, Picocell الأجهزة بتتكلم مع بعضها مباشرة من غير Access Point
كل node شغالة كـ client و router في نفس الوقت
مناسبة للمواقف المؤقتة (زي gatherings)
مرنة وسهلة النشر، لكن فيها مشاكل: مدى محدود
الـ Data rates أقل
مش scalable — لو أجهزة كتير بعتت في نفس الوقت -&gt; interference
نفس مشكلة collision domain زي الـ Hub (كل الأجهزة في domain واحد) تشبيه زيّ 4 أشخاص كلهم بيتكلموا في نفس الوقت — محدش يفهم حاجة.
الحل: واحد يتكلم والباقي يستنوا دوره — ده الـ half-duplex بتاع الـ Wi-Fi. المشكلة في Ad-Hoc: مفيش حكم — أي جهاز يقدر يبعت في أي وقت ويسبب collisions
الحاجة: مجموعة مقفولة ومراقبة من الأجهزة اللاسلكية
الحل: Access Point (AP) — جهاز مركزي بيدير المجموعة ويتحكم في إعدادات كل الأجهزة الـ Wireless devices تتصل مباشرة من غير AP
مش scalable — لأجهزة قليلة
استخدامه: file transfer (زي AirDrop) أهم building block في Wi-Fi
الأجهزة (stations/clients) بتتصل عن طريق AP واحد
الأجهزة مبتكلمش بعض مباشرة — لازم عن طريق الـ AP
ا BSSID: الـ MAC address بتاع راديو الـ AP — بيبقي Unique
ا BSA (Basic Service Area): المنطقة اللي حوالين الـ AP اللي الإشارة فيه شغالة عشان نوسع الـ Wi-Fi أبعد من مدى AP واحد
بيبقي عباره عن APs متعددة (كل واحد ليه BSS) متصلة ببعضها عن طريق wired network
كل BSS له نفس الـ SSID و BSSID مختلف
كل BSS بيستخدم channel مختلف عشان avoidance interference
الـ clients بيقدروا يتحركوا بين APs من غير ما يفصلوا — ده اسمه Roaming
الـ BSAs المفروض يتداخلوا بنسبة 10–15% لما يكون صعب توصيل كابلا لكل AP
ا Mesh APs ليهم راديوين: راديو للـ BSS (client)
راديو لـ backhaul network (تواصل APs مع بعض) ا RAP (Root AP): واحد بس متصل بالشبكة السلكية
ا MAP (Mesh AP): الباقي
بروتوكول بيحدد أحسن path في الـ mesh (زي dynamic routing) أغلب الـ wireless networks مش standalone — بيوصلوا للـ wired network
الـ upstream wired network اسمه DS (Distribution System)
كل BSS أو ESS بيتعمله map لـ VLAN في الشبكة السلكية
ا AP يقدر يوفّر Wireless LANs متعددة (كل واحدة بـ SSID مختلف) — كل WLAN ليها VLAN و BSSID مختلفين بيوسع مدى الـ BSS
ببساطة retransmit أي إشارة من الـ AP
لو repeater براديو واحد -&gt; بيشتغل على نفس channel بتاع الـ AP -&gt; بيقلل الـ throughput بيشتغل كـ wireless client لـ AP تاني
بيوصل wired devices بالشبكة اللاسلكية
نوعين: الـ uWGB (Universal WGB): 802.11 standard — بيوصل جهاز واحد
الـ WGB (Cisco-proprietary): بيوصل أجهزة wired متعددة بيوصل شبكات على مسافات بعيدة من غير كابل
بيستخدم specialized antennas بتركز الإشارة في اتجاه واحد
ممكن يكون point-to-point أو point-to-multipoint الـ CSMA/CD : بيكتشف الـ collisions وي recover منها
الـ CSMA/CA : بيتجنب الـ collisions — الجهاز بيستنى لغاية ما القناة تفضى قبل ما يبعت
Important كل الأجهزة في مدى الـ signal بتستقبل كل الـ frames — زي الـ Hub بالظبط.
عشان كده الخصوصية (privacy) مهمة جدًا في الشبكات اللاسلكية.
ا Wi-Fi شغال Half-duplex — يقدر يبعت أو يستقبل في اللحظة الواحدة، مش الاتنين. الإشارة تعدي في مادة وتتحول لـ heat — بتضعف الإشارة الإشارة ترتد من مادة (زي المعدن) — عشان كده الـ Wi-Fi وحيد في المصاعد الموجة تنحني لما تدخل وسط السرعة فيه مختلفة (زي الزجاج أو المية) الموجة تصادف حاجز وتلف حواليه — ممكن يسبب blind spots ورا الحاجز المواد بتشتت الإشارة في كل الاتجاهات — زي dust, smog, uneven surfaces الشبكات اللاسلكية بتنقسم حسب المدى: WPAN &lt; WLAN &lt; WMAN &lt; WWAN
الـ Wi-Fi أشهرهم وبيشتغل على IEEE 802.11 بترددات 2.4, 5, 6 GHz
ا Ad-Hoc من غير AP و BSS/ESS/MBSS هما service sets المختلفة
ا CSMA/CA بيستخدم عشان يتجنب collisions في الـ half-duplex wireless
الإشارات بتتأثر بـ absorption, reflection, refraction, diffraction, scattering
ا Organizations المسؤولة: ITU-R (التنظيم), IEEE (المعايير), Wi-Fi Alliance (الشهادة)
]]></description><link>networks/lecture-7-wireless-networks.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 7 - Wireless Networks.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 6 - Subnetting]]></title><description><![CDATA[مقدمة: ما هو الـ Subnetting؟
الـ Subnetting ببساطة هو تقسيم الشبكة الكبيرة لشبكات أصغر اسمها Subnets.
ليه بنعمل كده؟ لأن عدد عناوين IPv4 محدود جداً، فمحتاجين نستخدمها بكفاءة أعلى وبدون هدر.
مثال من المحاضرة: شركة عندها الشبكة 37.1.1.0/24 اللي فيها 256 عنوان. بدل ما نديها كلها لأوفيس واحد، بنقسمها على الأربع أوفيسات (كل أوفيس فيه 50 يوزر).
دي معلومة أساسية لازم تحفظها عن تقسيم الشبكات القديم:المشكلة في النظام ده؟ منظمة IANA كانت بتدي الشركات Class بالكامل حسب حجمها (Class A و B للشركات الكبيرة، C للصغيرة). وده أدى لـ هدر كبير جداً في العناوين!مثال واضح للهدر: لو عندك شبكة 203.0.113.0/24 وفيها Router بس (محتاج عنوانين لـ R1 و R2)، بيتهدر منك 252 عنوان!
في 1993، منظمة IETF قدمت CIDR (Classless Inter-Domain Routing) وألغت قيود الـ Classes الثابتة.
قبل CIDR: شبكة Class C لازم تكون /24 بالظبط.
بعد CIDR: تقدر تستخدم /25، /26، /27، /28 ... إلخ (استخدام العناوين على قد الاحتياج).
عشان تحسب عدد الـ Subnets وعدد الأجهزة (Hosts):القوانين الأساسية عدد الـ Subnets = (حيث = عدد الـ borrowed bits المُستعارة).
إجمالي العناوين = (حيث = عدد الـ host bits).
العناوين القابلة للاستخدام (Usable Hosts) = . ليه بنطرح 2؟ لأن فيه عنوانين محجوزين في كل Subnet ومش بيستخدموا للأجهزة:
Network Address (عنوان الشبكة).
Broadcast Address (عنوان البث).
دي أسرع طريقة تحل بيها أي مسألة Subnetting من غير ما تتلخبط. بنجيب الـ Subnet Mask ونطرح الأوكتيت (Octet) اللي فيه التغيير من 256. مثال: Subnet Mask 255.255.254.0 (التغيير في الـ Octet الثالث).
اBlock Size = (يعني كل شبكة بتزيد بمقدار 2 في الأوكتيت ده). بدل ما تقعد تحسب من الأول وتزود واحدة بواحدة، استخدم المعادلة دي:
عنوان بداية الـ Subnet = (رقم الـ Subnet المطلوب - 1) × Block Size
أمثلة تطبيقية سريعة
لو الـ Block Size = 2: عايزين Subnet رقم 100: (إذن الشبكة هتبدأ من 172.16.198.0/23).
عايزين Subnet رقم 29: (إذن الشبكة هتبدأ من 172.16.56.0/23). كم host bits نحتاج؟ محتاجين 45 + 2 = 47. أقرب أكبر من 47 هي .
إذن نحتاج 6 Host bits.
الـ Prefix الجديد: بما إن الـ host bits = 6، إذن . الـ Prefix هيكون /26.
حساب الـ Subnets: (بما إن /26 بتدي بلوك سايز = 64): 💡 Trick: كل Subnet بيبدأ من بعد الـ Broadcast Address بتاع الـ Subnet اللي قبله! عشان نعمل 5 subnets، لو استلفنا 2 bits هيدينا 4 subnets (مش كفاية).
هنستعير 3 bits ➡️ تدينا 8 Subnets (وده كافي جداً).
الـ Prefix هيكون /27 (وكل subnet هيشيل 30 usable host).
العناوين هتبدأ كالتالي: .0, .32, .64, .96, .128 إلخ.
سؤال: الجهاز 192.168.5.57/27 موجود في أي شبكة؟
الطريقة (باستخدام الـ Binary): الـ /27 معناها أول 27 bit هم الـ Network، وآخر 5 bits هم الـ Host.
حوّل الرقم الأخير 57 لـ Binary ➡️ 00111001
صفّر آخر 5 bits (الخاصين بالـ Host) ➡️ 00100000 اللي هي بتساوي 32 بالديسيمال.
يبقي الجهاز ده في شبكة 192.168.5.32/27 في Class B الـ default prefix هو /16، يعني عندنا 16 Host bits.مثال: 172.16.0.0/16 ⬅️ عايزين نقسمها لـ 80 Subnet أقرب أكبر من 80 هي 128 (يعني هنستلف 7 bits).
الـ Prefix الجديد هيكون . يبقي نستخدم /23 . نفس المبدأ بالظبط، بس بنبدأ من /8.مثال: PC1 عنوانه 10.217.182.223/11 Network Address: 10.192.0.0/11
Broadcast Address: 10.223.255.255/11
First Usable: 10.192.0.1/11
Last Usable: 10.223.255.254/11
عدد الـ Hosts: ا = عدد الـ Usable Hosts (حيث = عدد الـ Host bits).
ا = عدد الـ Subnets (حيث = عدد الـ Borrowed bits).
لتحديد الـ Subnet ID: صفّر كل الـ Host bits.
لتحديد الـ Broadcast: فعّل كل الـ Host bits (خليهم كلهم 1).
كل Subnet جديد بيبدأ من: الـ Broadcast السابق + 1.
الـ Block Size = (للأوكتيت المتغير).
إيجاد بداية أي Subnet رقم X = .
]]></description><link>networks/lecture-6-subnetting.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 6 - Subnetting.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 5 - Transmission Media]]></title><description><![CDATA[مقدمة ا Transmission Media هو المسار الفيزيائي (physical path) اللي البيانات بتتنقل فيه بين الـ transmitter والـ receiver.
ممكن يكون: free space، metallic cable، أو fiber-optic cable.
المعلومات بتتحول لإشارة (signal) حسب الوسط: ا Copper cable: bits على شكل electrical signals
ا Fiber network: bits على شكل light pulses بيستخدم cabling system عشان يوجه الـ signals في مسار محدد
مميزاته: High Speed, Secure, مسافات قصيرة نسبيًا سلكين نحاس معزولين ملفوفين على بعض بشكل حلزوني عشان يقلل electromagnetic interference (crosstalk)
بيستخدم في الـ voice والـ data communications
ا Low frequency transmission medium رخيص ومتوفر
ا flexible, light weight, سهل التركيب عرضة للـ interference والـ noise
ضعف الإشارة - Attenuation problem ا Analog: repeaters كل 5-6 كم
اDigital: repeaters كل 2-3 كم اbandwidth منخفض (100 MHz)
ا بينقل الـ signals عبر center conductor محاط بـ metal shield عشان يحافظ على جودة الإشارة ويمنع التسرب ا Center Conductor/Core: سلك نحاس أو copper-coated steel بيحمل RF signals
ا Dielectric Insulator: بيفصل الـ core عن الـ shield (plastic)
ا Braided Shield: طبقة معدن مضفورة بتمنع external interference
ا Outer Jacket: الطبقة الخارجية الصلبة اللي بتحمي المكونات ا bandwidth أعلى (400-600 MHz) — يدعم أكتر من 10,000 voice conversation
أقل عرضة للـ interference من Twisted Pair
سهل إنك تكسر عليه (tapping) — ميزة وعيب في نفس الوقت
محتاج repeaters كل 2-3 كم ا Attenuation عالية -&gt; مكلف في المسافات الطويلة (repeaters كتير)
ا Bulky (ضخم) بيستخدم شعيرات زجاج رفيعة (pure glass) كـ waveguide لنقل الضوء بيحل محل النحاس في الاتصالات الحديثة ا Core: بيحمل الـ light signal
ا Cladding: معامل انكسار أقل — بيسبب total internal reflection
معظم الألياف بتشتغل في duplex pairs (ويمكن الإرسال والاستقبال على نفس الشعيرة) بتنقل البيانات من غير physical conductor — عن طريق electromagnetic signals
مميزاتها: broadcast عبر الهوا، أقل أمانًا، مسافات أطول ترددات بين 3 KHz و 1 GHz
ا Omnidirectional — بتتبث في كل الاتجاهات
استخدامات: multicasting ا (AM/FM radio, TV, cordless phones, paging) ترددات بين 1 GHz و 300 GHz
ا Unidirectional — بتتركز في اتجاه واحد ا antennas محتاجة تكون aligned
ميزة: أزواج antennas متقدرش تتداخل مع بعضها استخدامات: unicast (one-to-one) زي cellular phones, satellite networks, wireless LANs
مميزات: بيستخدم في long distance telephone communication ويحمل آلاف الـ voice channels
عيوب: مكلف جدًا ترددات بين 300 GHz و 400 THz
للـ short-range communication
مميز: مش بتخترق الحوائط — فمفيش interference بين نظام في أوضة ونظام في أوضة تانية
عيب: مش بنستخدمه برا المباني لأن أشعة الشمس فيها infrared waves وبتسبب interference جهاز إلكتروني بيشتغل في Physical Layer (Layer 1) من OSI
الإشارة بتضعف بعد مسافة معينة — الـ Repeater بيـ regenerate الإشارة (مش بيكبرها)
بياخد الإشارة الضعيفة ويعمل copy bit-by-bit بنفس القوة
ممكن يكون built-in في hubs أو switches بيمد مسافة الشبكة الفيزيائية
مبيأثرش على أداء الشبكة بشكل كبير مش بيقدر يوصل network architectures مختلفة (زي Token Ring و Ethernet)
مش بيقلل network traffic — مش بيفلتر البيانات
مش بيقسم الشبكة (segmentation)
عدد الـ repeaters لازم يكون محدود أول جهاز ظهر عشان يربط أجهزة متعددة في LAN
قبل الـ Hub: كل جهاز كان محتاج كابل لكل جهاز تاني
ا Hub بيشتغل في Layer 1 (Physical) — مش بيفهم البيانات، بس بينسخ الإشارات الكهربائية ويبعتها لكل الـ ports ا Hub بيدمج كل الأجهزة في collision domain واحد
لو جهازين بعتوا بيانات في نفس الوقت -&gt; يحصل collision (تصادم)
الأجهزة بتوقف، تستنى، وتحاول تاني — وده بيبطئ الشبكة
في collision domain واحد: جهاز واحد بس يقدر يتكلم في المرة الواحدة
كل ما زادت الأجهزة -&gt; الأداء بيقل
تشبيه ا Collision domain زي ترابيزة كبيرة كل الناس قاعدة عليها. واحد بس يقدر يتكلم في المرة. لو اتنين كلموا في نفس الوقت محدش يفهم حاجة. ا Layer 1 (Physical)
بيبعت البيانات لكل الـ ports
بيعمل collision domain واحد كبير
غبي — مش بيعرف MAC addresses
شغال بـ Half-duplex
مش مستخدم دلوقتي جهاز بيشتغل في Layer 2 (Data Link) — بيفهم MAC addresses
بقسم الشبكة لـ 2 collision domains (ومن هنا جت تسميته)
كل side فيه أجهزة أقل -&gt; collisions أقل -&gt; performance أحسن
بيبني MAC address table عشان يعرف كل جهاز في ناحية فين
بيستخدم selective frame forwarding — مش بيكرر الإشارة بس زي الـ Hub ا Layer 2 (Data Link)
بيوصل بين اتنين network segment
بيقلل الـ collisions بتقسيم الشبكة
بيتعلم MAC addresses ويختار الـ forwarding
محدود بـ 2 ports غالبًا
مش مستخدم دلوقتي — اتستبدل بالـ Switch الـ Switch اتعمل عشان يحل مشاكل الـ Hub والـ Bridge مع تزايد حجم الشبكات
ا Bridge بقسم الشبكة لـ 2 collision domains بس — لكن الـ Switch كل port فيه collision domain مستقل
كل جهاز ليه collision domain بتاعه — مفيش collisions خالص بيقرا Ethernet header في الـ frames
بيتعلم MAC addresses ويبني MAC address table
بيبعث الـ frame على الـ port الصح بس (مش كل الـ ports زي الـ Hub)
بيشتغل بـ Full-duplex (أسرع بكتير)
من وجهة نظر الأجهزة: الـ Switch ا invisible — الأجهزة مش بتتعامل معاه مباشرة ا Layer 2 (بعضها Layer 3)
كل port collision domain مستقل
بيتعلم MAC addresses ويforward frames بذكاء
بيدعم Full-duplex
قابل للتوسيع، سريع، ومستخدم في كل الشبكات الحديثة
الخلاصة الـ Hub كان أول حل لكنه ضاع في collision domain واحد.
الـ Bridge قسم الشبكة لنصين بس.
الـ Switch خلّى كل port domain مستقل — فمفيش collisions + full-duplex + scalable. ]]></description><link>networks/lecture-5-transmission-media.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 5 - Transmission Media.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 4 - TCP IP Model]]></title><description><![CDATA[مقدمه ا TCP/IP (Transmission Control Protocol/Internet Protocol) هو suite of protocols (مجموعة بروتوكولات) اتعملت في بداية السبعينات من DARPA (وكالة مشاريع الأبحاث المتطورة التابعة لوزارة الدفاع الأمريكية).
معروف كمان باسم Internet Protocol Suite.
ا TCP/IP أقدم من OSI Model — ا OSI جه سنة 1984، لكن TCP/IP كان موجود من قبله.
ا OSI Model هو reference model, لكن TCP/IP هو الـ protocol suite اللي فعليًا بيشتغل عليه الإنترنت والـ intranets.
ا TCP/IP مش tied to a vendor — ده open standard protocol وده سبب انتشاره.
ا TCP/IP v4 هو المستخدم دلوقتي، والـ Next version هو v6.
ا النموذج الأصلي كان 4 layers مبنيين على الـ hardware. دي الطبقة اللي المستخدم بيتفاعل معاها مباشرة. فيها البروتوكولات اللي بتخدم التطبيقات زي: ا HTTP / HTTPS للمواقع
ا SMTP / POP3 / IMAP للبريد الإلكتروني
ا FTP / SFTP لنقل الملفات ا DNS لحليل الأسماء ا SSH / Telnet للـ remote access
ا DHCP للتوزيع التلقائي للـ IPs مسؤولة عن إن البيانات تكون formatted properly قبل ما تتنقل. Note الفرق بين OSI و TCP/IP إن OSI بيكسر الطبقة دي لـ 3 طبقات: Application, Presentation, Session.
ا TCP/IP ضمهم كلهم في طبقة واحدة عشان التطبيق العملي. مسؤولة عن إنها تضبط عملية نقل البيانات بين جهازين.
بتوفر connection establishment و reliable data transmission.
أشهر بروتوكولين فيها: ا Connection-oriented (لازم تعمل connection قبل ما تبعت)
بيضمن التوصيل بالترتيب وبدون فقدان
بيستخدم في: الويب، الإيميل، نقل الملفات
بيشتغل بـ Three-way handshake عشان يفتح connection ا Connectionless (مش محتاج connection مسبق) سريع لكن مش مضمون (no error correction) بيستخدم في: live streaming، الألعاب، VoIP كل segment له Source Port و Destination Port عشان يحدد التطبيق اللي هيستقبل البيانات. كل segment له Sequence Number عشان يظبط ترتيب الـ segments. مسؤولة عن Logical Addressing و Routing. بتضيف الـ IP Header على البيانات عشان تكون Datagrams. الـ IP Header فيه: ا Source IP Address
ا Destination IP Address مسؤولة عن إنها تلاقي أحسن مسار (Route) للبيانات توصل منه للـ destination. ا IP (Internet Protocol) — البروتوكول الأساسي للعنونة والتوجيه ا ICMP (Internet Control Message Protocol) — للـ error reporting والتشخيص (زي ping) ا ARP (Address Resolution Protocol) — عشان يجيب الـ MAC Address من الـ IP Address (بيشتغل بين الـ Internet و Network Access layers) أدنى طبقة في الـ TCP/IP model.
بتعرف إزاي البيانات تتبعت فعليًا على الوسط الفيزيائي: كابلات (Ethernet)
إشارات راديوية (Wi-Fi)
ألياف ضوئية (Fiber Optics)
شبكات خلوية (Cellular) بتحول البيانات لـ Bits (إشارات كهربائية / ضوئية / راديوية).
بروتوكولات زي Ethernet و Wi-Fi (802.11) شغالة هنا.
Note ا OSI model بيكسر الطبقة دي لـ 2: Data Link Layer و Physical Layer.
التقسيم ده بيدي مرونة أكتر للمطورين لأنه بيفصل الـ organizing functions عن الـ accessing functions. قبل ما client يبدأ يتكلم مع server في TCP، لازم الاتنين يأسسوا connection عن طريق الـ Three-way handshake: ا Client ← Server (SYN): ا Client بيبعت SYN packet بـ sequence number عشوائي (خلينا نقول 4321).
ده بداية طلب الاتصال. ا Server ← Client (SYN-ACK): ا Server بيرد بـ SYN = 5501 (الـ sequence number بتاعه).
و ACK = 4322 (seq بتاع الـ Client + 1).
بيأكد إنه استلم طلب الاتصال. ا Client ← Server (ACK): ا Client بيبعت ACK = 5502 (seq بتاع الـ Server + 1).
كده الاتصال اشتغل رسميًا. البيانات بتاخد أسماء مختلفة في كل layer :
لما Device A يبعت بيانات لـ Device B:
ا Application Layer: البيانات بتتضاف عليها الـ application header (زي HTTP header) ← Message
ا Transport Layer: ا Message بيتغلف في Segment وبيتضاف Source/Destination Port و Sequence Number
ا Internet Layer: ا Segment بيتغلف في Datagram/Packet وبيتضاف Source/Destination IP
ا Network Access Layer: ا Datagram بيتغلف في Frame وبيتضاف Source/Destination MAC Address وبعدين بيت حول لـ Bits
عكسياً في الاستقبال — كل layer بتشيل header بتاعها وتعدي البيانات للي فوقها.Tip الموضوع زي الـ Russian nesting dolls (الدُمى الروسية) — كل طبقة بتغلف اللي جوة وتضيف حاجة، وفي الاستقبال بيتفكوا واحد واحد. ا TCP/IP هو الـ practical model المستخدم فعليًا على الإنترنت.
ا OSI بيفصل الـ Data Link عن Physical بينما الـ TCP/IP بيدمجهم مع بعض في الـ Network Access.
ا OSI بيفصل الـ Application layer لـ 3 طبقات عشان يدي alternatives أكتر للتطبيقات بينما الـ TCP/IP بيدمجهم مع بعض .
الـ Network layer في الـ OSI Model اسمه Internet layer في الـ TCP/IP
ا OSI بيزيد في الـ flexibility و subdivision عشان الـ developers. ا Standard protocol suite للإنترنت عن طريق packet switching
ا IP: بيدي unique addresses للأجهزة
ا TCP: اconnection-oriented, بيكسر البيانات لـ packets ويضمن التوصيل
الـ default protocol لكل أنظمة التشغيل الحديثة ا Application-layer protocol لنقل صفحات الويب
بيشتغل client-server (request / response)
ا Stateless — مش بيحتفظ بمعلومات الجلسة
مش secure — عشان كده بنستخدم HTTPS النسخة الآمنة من HTTP
بيستخدم SSL/TLS encryption عشان Confidentiality, Integrity, Authentication
بيحمي بيانات حساسة (credit cards, passwords, OTPs) ا Application-layer protocol لإرسال (مش استقبال) الإيميلات
بينقل الإيميل من sender's mail server لـ receiver's mail server
بيدعم multimedia عن طريق MIME extensions بيسترجع الإيميلات من الـ mail server للـ local device
الإيميلات بتت shift من الـ server بعد التحميل
ا Ports: 110 (unencrypted), 995 (secure)
مناسب لجهاز واحد بيدير الإيميلات على الـ server نفسه (مش بتحملها)
بيدعم access من أجهزة متعددة مع synchronization
أكتر مرونة من POP3 في الاستخدام الحديث
الفرق بين SMTP vs POP3 vs IMAP لنقل الملفات بين client و server
بيحتاج authentication وبيدعم TCP
استخدامات: website management, file sharing
مش secure إلا مع encryption نسخة آمنة من FTP بتشتغل فوق SSH
بت encrypt البيانات والأوامر
بديل آمن لـ FTP العادي ا Secure remote login عبر شبكة غير آمنة
بيستخدم public-key cryptography
بيدعم SCP و SFTP — أأمن من Telnet ا Remote login protocol
المشكلة: بينقل البيانات plain text من غير تشفير
مش secure — اتستبدل بـ SSH ا Network-layer protocol للـ error messages و diagnostics
أنواعه: Echo Request/Reply (ping), Destination Unreachable, Time Exceeded, Redirect
بيستخدم في troubleshooting وقياس RTT ا 32-bit addresses (~4.3 مليار عنوان)
مكتوب بـ dotted decimal: 192.168.1.1
بيعاني من address exhaustion ا 128-bit addresses — خلصت مشكلة نقص العناوين
فيه built-in IPsec للأمان
بيتم اعتماده تدريجيًا ا Data link layer protocol للاتصال المباشر بين device و device
بيدعم authentication (PAP, CHAP) — بيستخدمه ISPs من أقدم الـ Internet protocols للـ file retrieval
نظام hierarchical menu-based
ا Obsolete — مستبدل بـ HTTP و FTP اConnectionless — مش بيحتاج connection مسبق
سريع لكن لا يضمن التوصيل (no error correction)
استخدامات: streaming, gaming, VoIP
]]></description><link>networks/lecture-4-tcp-ip-model.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 4 - TCP IP Model.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 3 - OSI Layers]]></title><description><![CDATA[مقدمه في أبسط شكل، عندك جهازين (end-points) متصلين ببعضهم بكابل LAN (Network Media) و connectors (RJ45) بيشاركوا بيانات عن طريق الـ NICs.
المشكلة: لو جهاز شغال Windows والتاني شغال MAC OS، هما هيتكلموا مع بعض ازاي وكل واحد ليه نظام مختلف؟
عشان نحل المشكلة دي، الـ&nbsp;ISO&nbsp;(International Organization for Standardization) طرح في 1984 نموذج اسمه&nbsp;OSI Model&nbsp;(Open System Interconnection Model).
الـ OSI Model هو reference tool بنفهم بيه ازاي البيانات بتتنقل بين أي نظامين متصلين بالشبكة.
بيقسم عمليات الاتصال لـ 7 layers (طبقات).
كل layer ليها وظائف محددة عشان تخدم اللي فوقها وتستقبل خدمات من اللي تحتها.
الـ 3 layers الي تحت شغلها تمرير البيانات عبر الشبكة للـ end system.
الـ 4 layers الي فوق شغلها في الـ end system عشان تكمل عملية الاتصال. بيحدد ايه البروتوكول الي بيدعم الـ action الي انته بتعمله وبيوفره. بروتوكولات زي HTTP , HTTPs , FTP , SMTP , DNS. بيوفر خدمة Network Virtual Terminal (NVT)&nbsp;بيسمح للمستخدم يعمل login على host بعيد (زي SSH/Telnet)
بيوفر خدمة File Transfer Access and Management (FTAM)&nbsp;والي بتخلينا قادرين نوصل للملفات ونديرها على جهاز بعيد
بيوفر خدمات البريد الإلكتروني (Mail Services) زي SMTP , POP3 , IMAP.
“hover-notes-images/screenshot-01KS0123H6VY831CMB8H8JA0Z1.png” could not be found.
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=91.151683s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=91.151683s" target="_self">00:01:31</a>
بيحول الداتا من حروف وارقام الي binary ← العملية دي اسمها Translation
بيضغط الملفات عشان يقلل حجمها ← Data compression
بيعمل تشفير للداتا قبل ما تتبعت (Encryption ), والشخص الي بيستقبل البيانات بيفك التشفير ده (Decryption) ( بروتوكولات TLS/SSL بتشتغل هنا)
“hover-notes-images/screenshot-01KS017G2PSBXW5M66ZZY4T50R.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=156.540163s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=156.540163s" target="_self">00:02:36</a>
مسؤول عن إدارة الجلسات (Session Management) بين الأجهزة : مسؤول عن إنشاء واستمرار وإنهاء الجلسات (Session Establishment, Maintenance &amp; Termination) بين الجهازين. بيسمح بالتواصل (Transmission ) بين الأجهزة سواء هو Simplex ولا Half-Duplex ولا Full-Duplex.
مسؤول انه يتحقق من الصلاحيات (Authentication &amp; Authorization).
بيعمل (Synchronization) عن طريق إضافة Checkpoints في البيانات عشان لو حصل انقطاع يكمل من آخر نقطة.
بيتحكم في الحوار بين الأنظمة (Dialog Controller) وبيسمح بالتواصل سواء Half-Duplex او Full-Duplex.
“hover-notes-images/screenshot-01KS01JWYGFFQX5MD042RFM1G8.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=240.478148s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=240.478148s" target="_self">00:04:00</a>
مسؤوله عن نقل البيانات بيعمل Segmentation (بيقسم الداتا لاجزاء صغيره)
كل segment بيبقي ليه port number عشان يحدد التطبيق اللي هيستقبل البيانات.
كمان كل segment بيبقي ليه sequence number عشان يحدد ترتيب الـ segment بيعمل Flow control (بيتحكم في الـ transfer rate بحيث سرعة الإرسال والاستقبال تكون مناسبة للطرفين.
بيحدد نوع البروتوكول الي هنستخدمه في نقل البيانات حسب الاكشن الي اليوزر بيعمله اما هيستخدم الـ TCP (دقيق لكن مش سريع اوي)
او الـ UDP (مش دقيق لكن سريع جدا) وبنستخدمه في الـ streaming زي مثلا الفيديوهات او الالعاب بتوفر Service Point Addressing عن طريق إضافة الـ Source Port والـ Destination Port في الـ Header عشان البيانات توصل للـ Process الصح.
بتدعم بروتوكولات زي NetBIOS و PPTP المستخدمة في بعض خدمات الشبكات والاتصالات.
مسؤولة عن نقل البيانات (Data Transfer) بين الأجهزة.
“hover-notes-images/screenshot-01KS021WQM1T8YZVWGTJ9WT61A.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=460.364037s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=460.364037s" target="_self">00:07:40</a>
بتعمل Logical Addressing بتاخد الـ Segments من ال Transport layer وتضيف عليهم الـ IP Address بتاعة الـ sender , receiver عشان تكون Packets بتعمل routing وهي عملية اختيار افضل مسار الداتا هتمشي فيه
“hover-notes-images/screenshot-01KS026YJ82CTS1N7KYXVQ78W7.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=520.489703s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=520.489703s" target="_self">00:08:40</a>
بتستقبل الـ Packets من الـ Network Layer وبتحولها لـ Frames عشان تبعتها على الشبكة.
بتعمل Physical Addressing عن طريق إضافة الـ MAC Address بتاع الـ Sender والـ Receiver داخل الـ Frame. وبتستخدم بروتوكول ARP عشان تجيب الـ MAC Address المقابل للـ IP Address. بتعمل Framing عن طريق إضافة Header و Trailer للبيانات. وكمان بتحط Special Bit Patterns في بداية ونهاية الـ Frame عشان تحدد حدود الـ Frame بشكل صحيح. بتعمل Flow Control لضمان إن سرعة الـ Sender والـ Receiver تكون متقاربة ومناسبة لبعض.
بتعمل Error Detection &amp; Error Control لاكتشاف الأخطاء في الـ Frames. ولو الـ Frame حصلها Damage أو Lost بيتم إعادة إرسالها (Retransmission). الأجهزة اللي بتشتغل في الـ Data Link Layer : Switches
Bridges “hover-notes-images/screenshot-01KS02KJQZ7STHZS022SYE9V26.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=585.559363s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=585.559363s" target="_self">00:09:45</a>“hover-notes-images/screenshot-01KS02M83CS5CA027PDJT0RRCW.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=737.405332s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=737.405332s" target="_self">00:12:17</a>
بتحول البيانات (Bits) إلى Signals عشان تقدر تنتقل عبر الوسط الفيزيائي. ممكن تكون Electrical Signals
أو Optical Signals
أو Radio Signals بتوفر Bit Synchronization عن طريق توفير Clock يزامن بين الـ Sender والـ Receiver على مستوى الـ Bits.
بتحدد معدل نقل البيانات (Bit Rate Control) يعني عدد الـ Bits اللي بتتبعت في الثانية.
بتحدد شكل الشبكة الفيزيائي (Physical Topologies) زي: Bus
Star
Mesh بتحدد طريقة تدفق البيانات (Transmission Mode) هل هي: Simplex
Half-Duplex
Full-Duplex الأجهزة اللي بتشتغل في الـ Physical Layer تشمل: Hub
Repeater
Modem
Cables “hover-notes-images/screenshot-01KS02SKEX66ZS18GVTQJWRQTS.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=1048.325539s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=1048.325539s" target="_self">00:17:28</a>“hover-notes-images/screenshot-01KS02TZWEKHBCRMJ9MT3VFQHY.png” could not be found.<br>
<a data-tooltip-position="top" aria-label="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=1193.379797s" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.youtube.com/watch?v=61kRxdZ5p-o&amp;t=1193.379797s" target="_self">00:19:53</a> ا&nbsp;Application Layer بيكتب الإيميل في التطبيق وبيتضاف HTTP/SMTP header
ا&nbsp;Presentation Layer:&nbsp;البيانات بتتشفر وتتضغط عشان تبقى جاهزة للنقل
ا&nbsp;Session Layer:&nbsp;الاتصال بيتأسس بين الجهازين
ا&nbsp;Transport Layer:&nbsp;البيانات بتتقطع Segments وبيتضاف Source/Destination Port Number و Sequence Number
ا&nbsp;Network Layer:&nbsp;الـ Segments بتتغلف في Packets وبيتضاف Source/Destination IP Address
ا&nbsp;Data Link Layer:&nbsp;الـ Packets بتتغلف في Frames وبيتضاف Source/Destination MAC Address
ا&nbsp;Physical Layer:&nbsp;الـ Frames بتتحول لـ Bits (إشارات كهربائية/ضوئية/راديوية) وبتتبعت على الشبكة ا&nbsp;Physical Layer:&nbsp;بيستقبل الإشارات ويحولها لـ Bits ويوديها للـ Data Link
ا&nbsp;Data Link Layer:&nbsp;بيشيل MAC header ويتأكد من إن الـ Frame مفيهاش أخطاء (Error Detection)
ا&nbsp;Network Layer:&nbsp;بيشيل IP header ويشوف الـ destination عشان يعرف يوصل الـ Packet لمين
ا&nbsp;Transport Layer:&nbsp;بيشيل TCP/UDP header ويعمل Reassembly للـ Segments ويعرف إيه التطبيق اللي محتاج البيانات من Port Number
ا&nbsp;Session/Presentation/Application:&nbsp;يفك التشفير ويظهر الإيميل للمستخدم ]]></description><link>networks/lecture-3-osi-layers.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 3 - OSI Layers.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 2 - IP Addressing]]></title><description><![CDATA[مقدمة الـ IP Address (Internet Protocol Address) هو label رقمي بيتد لكل جهاز متصل بالشبكة عشان يتعرف عليه
زي عنوان البيت بالظبط — البيانات عشان توصللك محتاجة تعرف عنوانك
من غيره مفيش تواصل بين الأجهزة على الشبكة الـ IP address هو 32-bit number مقسّم لـ two-level hierarchical: ا Network Portion: بيعرّف الشبكة اللي الجهاز تابع ليها
ا Host Portion: بيعرّف الجهاز نفسه جوه الشبكة الـ 32 bits متقسمين لـ 4 octets (كل octet = 8 bits)
كل octet قيمته من 0 لـ 255
مكتوب بـ dotted decimal notation: مثال 192.168.1.10
مثال ا IP: 172.16.4.20
ا Network Portion: 172.16 — Host Portion: 4.20
ا IP: 172.16.4.32
ا Network Portion: 172.16 — Host Portion: 4.32
الاتنين على نفس الـ logical network لأن الـ network portion متطابق كل bit في الـ octet ليه قيمة:00001010 = 8 + 2 = 1000010111 = 16 + 4 + 2 + 1 = 2310101010 = 128 + 32 + 8 + 2 = 170Note
امثله عشان تتدرب: 00001010 00000001 00010111 00010011 ← 10.1.23.19
10101010 01000001 00010010 10101100 ← 170.65.18.172 10.0.0.0 — 10.255.255.255 -&gt; Class A
172.16.0.0 — 172.31.255.255 -&gt; Class B
192.168.0.0 — 192.168.255.255 -&gt; Class C رقم بيقسم الـ IP address لـ Network Part و Host Part
الـ bits اللي فيها 1 = Network Part
الـ bits اللي فيها 0 = Host Part
مثال
IP: 192.168.1.10
Subnet: 255.255.255.0
Binary IP: 11000000.10101000.00000001.00001010
Binary Sub: 11111111.11111111.11111111.00000000 Network = 192.168.1 (أول 3 octets)
Host = 10 (آخر octet)
الأجهزة الممكنة في الشبكة دي: 192.168.1.1 لـ 192.168.1.254 كل 255 في الـ subnet mask = جزء من الـ network
كل 0 = جزء من الـ host
ملاحظات ا 127.x.x.x محجوزة للـ Loopback (troubleshooting)
لو أول octet = 127 → ده localhost عشان تختبر الشبكة على جهازك Decimal: 129.11.11.239
أول octet ( رقم 129 ) -&gt; موجود بين (128–191) يعني Class B
يبقي الـ Network: أول 2 octets الي هما 129.11
والـ Host: آخر 2 octets الي هما 11.239 Decimal: 193.131.27.255
أول octet ( رقم 193 ) -&gt; موجود بين (192–223) يعني Class C يبقي الـ Network: أول 3 octets الي هما 193.131.27
والـ Host: آخر octet الي هو 255 111.56.045.78 -&gt; ممنوع الـ leading zeroes (045)
221.34.7.8.20 -&gt; أكتر من 4 octets
75.45.301.14 -&gt; كل octet ≤ 255
11100010.23.14.67 -&gt; ممنوع خلط binary و decimal الفكرة: الـ IP address هو رقم في&nbsp;Base 256&nbsp;— يعني كل octet عبارة عن رقم من 0 لـ 255.
الخطوات:
بنطرح أول IP من آخر IP&nbsp;octet-by-octet&nbsp;من اليمين لـ الشمال (زي الطرح العادي بالظبط): 146 . 102 . 32 . 255
- 146 . 102 . 29 . 0
───────────────────── 0 . 0 . 3 . 255 الناتج طلع كده ازاي ؟ لأن 255 - 0 = 255، و 32 - 29 = 3.
دلوقتي عندنا الناتج =&nbsp;0.0.3.255.
نحوله لـ decimal عشان نعرف قيمته:
(0 × 256³) + (0 × 256²) + (3 × 256¹) + (255 × 256⁰)
= 0 + 0 + 768 + 255
= 1023 او بمجرد النظر هنلاقي ان كل ما نزود ان كل ما نزود 255 في رابع octet تالت octet بيزيد واحد يعني 0.0.2.0 + 0.0.0.256 = 0.0.3.0 يبقي (256*3) + 255 = 1023 (لو مفهمتش اشتغل بالطريقة الي فاتت )
الخطوات:لما عدد العناوين = 32، يبقى الفرق بين الأول والآخر = 32 - 1 =&nbsp;31 يعني 0.0.0.31 .دلوقتي اجمع الـ IP الأول مع الرقم ده octet-by-octet من اليمين: 14 . 11 . 45 . 96
+ 0 . 0 . 0 . 31
───────────────────── 14 . 11 . 45 . 127 ليه بقى 127؟ لأن 96 + 31 = 127. ولو كان الناتج أكبر من 255، كنا هنعمل&nbsp;carry&nbsp;للـ octet اللي قبله (زي الجمع العادي).
إذن آخر IP =&nbsp;14.11.45.127وده منطقي لأن الـ IPs هتكون من&nbsp;96&nbsp;لـ&nbsp;127&nbsp;= 32 عنوان بالضبط.
ا IP Address هو 32-bit hierarchical number — Network + Host
ا Subnet Mask بيحدد مين network ومين host
ا Classful addressing بتقسّم العناوين لـ A, B, C, D, E
ا Public للإنترنت — Private للشبكة المحلية
ا Static ثابت — Dynamic متغير عن طريق DHCP
ا IPv6 جا عشان يحل مشكلة نقص العناوين في IPv4
]]></description><link>networks/lecture-2-ip-addressing.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 2 - IP Addressing.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item><item><title><![CDATA[Lecture 1 - Introduction]]></title><description><![CDATA[
تحدّيين رئيسيين خلّونا نحتاج التصنيف ده: ا Large Set of Devices — عدد الأجهزة الكبير محتاج طرق عشان ننظمه
ا Devices Too Far Apart — المسافات البعيدة محتاجة تقنيات مختلفة عشان نربط الأجهزة ببعض بتدعم small geographical area (بيت، مكتب، حرم جامعي)
مملوكة لنفس المنظمة اللي بتمتلك الأجهزة المتصلة
معدلات نقل بيانات (bandwidth) عالية جدًا مقارنة بـ WAN
كانت في الأصل broadcast systems (البيانات تروح لكل الأجهزة والجهاز المعني بس هو اللي يستلمها)
دلوقتي بقى فيه switched systems و ATM بتحدد ازاي الأجهزة مترتبة ومتصلة في الشبكة
أشهرها: Bus, Star, Ring, Mesh, Tree ا Broadcast: البيانات تروح لكل الأجهزة
ا Multicast: البيانات تروح لمجموعة معينة
ا Unicast: البيانات تروح لجهاز واحد
ا Half-duplex: جهاز واحد بس يقدر يبعت في المرة الواحدة
ا Full-duplex: الأجهزة تقدر تبعت وتستقبل في نفس الوقت بيستخدم في الشبكات السلكية
الجهاز بيحس إن القناة فاضية قبل ما يبعت
لو حصل collision -&gt; الجهاز بيكتشفه ويرجع تاني بعد وقت عشوائي CSMA/CD مفصل في محاضرة Wireless Networks بيستخدم في الشبكات اللاسلكية (Wi-Fi)
الجهاز بيستنى لغاية ما القناة تفضى قبل ما يبعت — بيتجنب الـ collision مش بيكتشفه CSMA/CA مفصل في محاضرة Wireless Networks Middle between LAN and WAN
تغطي منطقة كبيرة زي مدينة كاملة
ممكن تكون Private أو Public
بتدعم high speed على مساحة كبيرة
مثال: WiMAX (IEEE 802.16) بتدعم large geographical area
بتوصل الـ LANs ببعضها عبر مسافات كبيرة (بين مدن، دول، قارات)
بتستخدم common carrier circuits (شركات الاتصالات) — مش مملوكة لنفس المنظمة
غالبًا بطيئة مقارنة بـ LAN (الروابط بتاعة WAN أبطأ)
بتتعامل مع multiple service providers ا Fault Tolerance: قدرة الشبكة إنها تفضل شغالة حتى لو حصل عطل في جزء منها (زي الـ redundant links)
ا Scalability: الشبكة تقدر تكبر وتستوعب أجهزة زيادة من غير مشاكل
ا Quality of Service (QoS): بندي priority لبعض أنواع البيانات (زي VoIP أو video)
ا Security: حماية البيانات والتحكم في الدخول للشبكة By Scale: PAN &lt; LAN &lt; MAN &lt; WAN &lt; SAN
By Transmission: Guided (Wired): Twisted Pair, Coaxial, Fiber
Unguided (Wireless): Radio, Microwave, Infrared تفاصيل Transmission Media في محاضرة منفصلة الشبكات بتتصنف حسب المساحة و طريقة النقل
ا LAN سريعة و ownership واحد — WAN أبطأ ومقدّمة من service providers
ا CSMA/CD للـ wired و CSMA/CA للـ wireless
ا Topologies بتحدد شكل الشبكة — Switching techniques بتحدد ازاي البيانات بتتنقل
]]></description><link>networks/lecture-1-introduction.html</link><guid isPermaLink="false">2 - Areas/College/Networks/Lecture 1 - Introduction.md</guid><pubDate>Thu, 28 May 2026 18:30:07 GMT</pubDate></item></channel></rss>