مقالات

3.3: مثلثات ليست مثلثات قائمة


أسئلة التركيز

تهدف الأسئلة التالية إلى توجيه دراستنا للمواد في هذا القسم. بعد دراسة هذا القسم ، يجب أن نفهم المفاهيم التي تحركها هذه الأسئلة وأن نكون قادرين على كتابة إجابات دقيقة ومتماسكة لهذه الأسئلة.

  • ما هو قانون الجيوب؟
  • ما هي المعلومات التي نحتاجها حول المثلث لتطبيق قانون الجيب؟
  • ماذا نعني بالحالة الغامضة لقانون الجيوب؟ لماذا هو غامض؟
  • ما هو قانون جيب التمام؟
  • ما هي المعلومات التي نحتاجها حول المثلث لتطبيق قانون جيب التمام؟

في القسم 3.2 ، تعلمنا كيفية استخدام الدوال المثلثية وقدمنا ​​معلومات حول مثلث قائم الزاوية لتحديد الأجزاء الأخرى من هذا المثلث القائم. بالطبع ، هناك العديد من المثلثات بدون زوايا قائمة (تسمى هذه المثلثات مثلثات مائلة). مهمتنا التالية هي تطوير طرق لربط جوانب وزوايا المثلثات المائلة. في هذا القسم ، سنطور طريقتين من هذا القبيل ، قانون الجيب وقانون جيب التمام. في القسم التالي ، سنتعلم كيفية استخدام هذه الأساليب في التطبيقات.

كما هو الحال مع المثلثات القائمة ، سنحتاج إلى بعض الرموز القياسية عند التعامل مع المثلثات العامة. سيكون تدويننا مشابهًا لما استخدمناه للمثلثات القائمة الزاوية. على وجه الخصوص ، غالبًا ما نترك أطوال الأضلاع الثلاثة للمثلث تكون (أ ) و (ب ) و (ج ). الزوايا المقابلة لجوانب الطول (أ ) و (ب ) و (ج ) ستتم تسميتها ( ألفا ) و ( بيتا ) و ( جاما ) على التوالي (الشكل ( PageIndex {1} )).

سنقوم أحيانًا بتسمية رؤوس المثلث على أنها A و B و C كما هو موضح في الشكل ( PageIndex {1} ).

الشكل ( PageIndex {1} ): تسمية قياسية لمثلث

بداية النشاط

قبل أن نذكر قانون الجيب وقانون جيب التمام ، سنستخدم تطبيقي Geogebra لاستكشاف العلاقات حول أجزاء المثلث. في كل من هذه التطبيقات ، يتم رسم مثلث. أطوال جانبي المثلث وقياس كل زاوية من الزوايا الموضحة. يمكن تغيير حجم وشكل المثلث بسحب واحدة (أو كل) من النقاط التي تشكل رؤوس المثلث.

1. افتح تطبيق Geogebra المسمى قانون الجيوب على الموقع http://gvsu.edu/s/01B

  1. جرب بتحريك رؤوس المثلث ولاحظ ما يحدث للأطوال والزوايا والحسابات الموضحة في الجزء الأيسر السفلي من الشاشة.
  2. استخدم مثلثًا معينًا وتحقق من الحسابات الموضحة في الجزء الأيسر السفلي من الشاشة. قم بتدوير نتائجك إلى أقرب ألف كما هو الحال في التطبيق.
  3. اكتب معادلة (أو معادلات) يوضحها هذا التطبيق. سيكون هذا جزءًا من قانون الجيوب.

2. افتح تطبيق Geogebra المسمى قانون جيب التمام على الموقع http://gvsu.edu/s/01C

  1. جرب بتحريك رؤوس المثلث ولاحظ ما يحدث للأطوال والزوايا والحسابات الموضحة في الجزء الأيسر السفلي من الشاشة.
  2. استخدم مثلثًا معينًا وتحقق من الحسابات الموضحة في الجزء الأيسر السفلي من الشاشة. قم بتدوير نتائجك إلى أقرب ألف كما هو الحال في التطبيق.
  3. اكتب معادلة يوضحها هذا التطبيق. سيكون هذا جزءًا من قانون جيب التمام.

قانون الجيوب

كان الجزء الأول من نشاط البداية يهدف إلى توضيح قانون الجيوب. فيما يلي بيان رسمي لقانون الجيب.

قانون الجيوب

في المثلث ، إذا (أ ) ، (ب ) ، و (ج ) هي أطوال الأضلاع المتقابلة للزوايا ( ألفا ) ، ( بيتا ) ، ( جاما ) ، على التوالي ، إذن

[ dfrac { sin ( alpha)} {a} = dfrac { sin ( beta)} {b} = dfrac { sin ( gamma)} {c} ]

هذا يعادل

[ dfrac {a} { sin ( alpha)} = dfrac {b} { sin ( beta)} = dfrac {c} { sin ( gamma)} ]

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

[ dfrac { sin ( alpha)} {a} = dfrac { sin ( beta)} {b} ] [ dfrac { sin ( alpha)} {a} = dfrac { sin ( gamma)} {c} ] [ dfrac { sin ( beta)} {b} = dfrac { sin ( gamma)} {c} ]

مفتاح استخدام قانون الجيب هو أن كل معادلة تتضمن 4 كميات ، وإذا عرفنا 3 من هذه الكميات ، فيمكننا استخدام قانون الجيب لتحديد الرابعة. هذه الكميات الأربعة هي في الواقع زوجان مختلفان ، حيث يكون أحد عناصر الزوج زاوية والعنصر الآخر من هذا الزوج هو طول الضلع المقابل لتلك الزاوية. في الشكل ( PageIndex {2} ) ، يشكل ( theta ) و (س ) أحد هذين الزوجين ، و ( phi ) و (y ) هما زوجان آخران من هذا القبيل. يمكننا كتابة قانون الجيب على النحو التالي:

الشكل ( PageIndex {2} ): رسم تخطيطي لقانون الجيب

قانون الجيوب

في المثلث ، إذا كان (x ) هو طول الضلع المقابل للزاوية ( theta ) و (y ) هو طول الضلع المقابل للزاوية ( phi ) ، إذن

[ dfrac {x} { sin ( theta)} = dfrac {y} { sin ( phi)} ] أو [ dfrac { sin ( theta)} {x} = dfrac { sin ( phi)} {ص}. التسمية {lawofsines} ]

مثال ( PageIndex {1} ): استخدام قانون الجيب

افترض أن قياس زاويتين في المثلث هما (25 ^ circ ) و (51.3 ^ circ ) وأن الضلع المقابل للزاوية (25 ^ circ ) يبلغ طوله 12 قدمًا. سنستخدم قانون الجيب لتحديد الأجزاء الثلاثة الأخرى من المثلث. (تذكر أننا كثيرًا ما نقول إننا "نحل المثلث"). الخطوة الأولى هي رسم مخطط دقيق معقول للمثلث وتسمية أجزائه. هذا موضح في الرسم البياني التالي.

نلاحظ أننا نعرف قيم طول الضلع والزوايا المقابلة له ( (a ) و ( alpha )). نظرًا لأننا نعرف أيضًا قيمة ( beta ) ، يمكننا استخدام قانون الجيب لتحديد (ب ). هكذا يتم فعل هذا:

[ dfrac {a} { sin ( alpha)} = dfrac {b} { sin ( beta)} ] [b = dfrac {a sin ( beta)} { sin ( alpha)} ] [b = dfrac {12 sin (51.3 ^ circ)} { sin (25 ^ circ)} ] [b almost 22.160 ]

نرى أن الضلع المقابل للزاوية (51.3 ^ circ ) يبلغ طوله حوالي 22.160 قدمًا. ما زلنا بحاجة إلى تحديد ( جاما ) و (ج ). سنستخدم حقيقة أن مجموع زوايا المثلث يساوي (180 ^ circ ) لتحديد ( gamma ).
الآن بعد أن عرفنا ( gamma ) ، يمكننا استخدام قانون الجيب مرة أخرى لتحديد (c ). للقيام بذلك ، نحل المعادلة التالية لـ (c ).

[ dfrac {a} { sin ( alpha)} = dfrac {c} { sin ( gamma)} ]

يجب أن نتحقق من أن النتيجة (c حوالي 27.587 ) قدم. للتحقق من نتائجنا ، يجب أن نتحقق من أنه بالنسبة لهذا المثلث ، [ dfrac { sin ( alpha)} {a} = dfrac { sin ( beta)} {b} = dfrac { sin ( جاما)} {ج} حوالي 0.035. ]

تمرين ( PageIndex {1} )

افترض أن قياسات زاويتين في المثلث هي (15 ^ circ ) و (135 ^ circ ) وأن الضلع المشترك بين هاتين الزاويتين طوله (71 ) بوصة. فيما يلي رسم تخطيطي دقيق بشكل معقول لهذا المثلث.

أوجد طولي ضلعي المثلث الآخرين وقياس الزاوية الثالثة. تلميح: أدخل أولاً بعض الرموز المناسبة ، وحدد قياس الزاوية الثالثة ، ثم استخدم قانون الجيب.

إجابه

نلاحظ أولًا أن الزاوية الثالثة في المثلث هي (30 ^ circ ) لأن مجموع الزاويتين المعطاة هو (150 ^ circ ). لنفترض أن x هو طول الضلع المقابل للزاوية (15 ^ circ ) ونفترض أن (y ) يكون طول الضلع المقابل للزاوية (135 ^ circ ). ثم نرى ذلك

[ dfrac {x} { sin (15 ^ circ)} = dfrac {71} { sin (30 ^ circ)} ]
[x = dfrac {71 sin (15 ^ circ)} { sin (30 ^ circ)} ]
[س حوالي 36.752 ]

[ dfrac {y} { sin (135 ^ circ)} = dfrac {71} { sin (30 ^ circ)} ]
[y = dfrac {71 sin (135 ^ circ)} { sin (30 ^ circ)} ]
[y حوالي 100.409 ]

إذن ، طول الضلع المقابل للزاوية (15 ^ circ ) حوالي (36.75 ) بوصة ، وطول الضلع المقابل للزاوية (135 ^ circ ) حوالي (100.41 ) بوصات.

استخدام قانون الجيب لتحديد زاوية

كما ذكرنا سابقًا ، تشتمل معادلة قانون الجيب على أربع مقادير وزاويتين وطول الضلعين المتقابلين. في الأمثلة التي نظرنا إليها ، لدينا زاويتان وضلع واحد. ثم استخدمنا قانون الجيب لتحديد طول الضلع الآخر.

يمكننا أن نواجه تعقيدًا بسيطًا عندما نريد تحديد زاوية باستخدام قانون الجيب. يمكن أن يحدث هذا عندما نعرف أطوال ضلعين وقياس زاوية مقابل أحد هذين الضلعين. تكمن المشكلة في وجود زاويتين مختلفتين بين (0 ^ circ ) و (180 ^ circ ) وهما حلان لمعادلة بالصيغة ( sin ( theta) = ) "رقم بين (0 ) و (1 ) ".
على سبيل المثال ، ضع في اعتبارك المعادلة ( sin ( theta) = 0.7 ). يمكننا استخدام دالة الجيب العكسية لتحديد حل واحد لهذه المعادلة ، وهو [ theta_ {1} = sin ^ {- 1} (0.7) حوالي 44.427 ^ circ. ]

تعطينا دالة الجيب العكسية الحل بين (0 ^ circ ) و (90 ^ circ ) ، أي الحل في الربع الأول. يوجد حل ثان لهذه المعادلة في الربع الثاني ، أي بين (90 ^ circ ) و (180 ^ circ ). هذا الحل الثاني هو ( theta_ {2} = 180 ^ circ - theta_ {1} ). في هذه الحالة ، [ theta_ {2} = 180 ^ circ - sin ^ {- 1} (0.7) almost 135.573 ^ circ. ]
سيتم توجيه عمليتي فحص التقدم التاليتين من خلال الأمثلة حيث سنحتاج إلى استخدام قانون الجيب لتحديد الزاوية.

تمرين ( PageIndex {2} )

افترض أن مثلثًا له ضلع طوله (2 ) قدم وهو ضلع مجاور لزاوية قياسها (40 ^ circ ). هل يمكن أن يبلغ طول الضلع المقابل للزاوية (40 ^ circ ) (1.7 ) قدم؟

لمحاولة الإجابة على هذا ، نرسم أولاً مخططًا دقيقًا بشكل معقول للموقف كما هو موضح أدناه.

الخط الأفقي ليس جانبًا من المثلث (حتى الآن). في الوقت الحالي ، نستخدمه فقط كأحد جوانب زاوية (40 ^ circ ). بالإضافة إلى ذلك ، لم نرسم الضلع المقابل للزاوية (40 ^ circ ) لأنه من خلال الملاحظة فقط ، يبدو أن هناك طريقتين محتملتين لرسم جانب طوله 3 أقدام. الآن نصل إلى التفاصيل.

  • لنفترض أن ( theta ) هي الزاوية المقابلة لضلع الطول 2 قدم. استخدم قانون الجيب لتحديد ( sin ( theta) ).
  • استخدم دالة الجيب العكسية لتحديد حل واحد (مقربًا لأقرب عشر درجة) لـ ( theta ). اتصل بهذا الحل ( theta_ {1} ).
  • لنفترض أن ( theta_ {2} = 180 ^ circ - theta_ {1} ) اشرح السبب (أو تحقق من أن) ( theta_ {2} ) هو أيضًا حل للمعادلة في الجزء (1).

هذا يعني أنه يمكن أن يكون هناك مثلثين يفيان بشروط المشكلة.

  • أوجد الزاوية الثالثة والضلع الثالث عندما تكون الزاوية المقابلة لضلع الطول (2 ) هي ( theta_ {1} ).
  • أوجد الزاوية الثالثة والضلع الثالث عندما تكون الزاوية المقابلة لضلع الطول (2 ) هي ( theta_ {2} ).
إجابه

1. الضلع المقابل للزاوية (40 ^ circ ) له طول (1.7 ) قدم. لذلك نحصل

[ dfrac { sin ( theta)} {2} = dfrac { sin (40 ^ circ)} {1.7} ]
[ sin ( theta) = dfrac {2 sin (40 ^ circ)} {1.7} almost 0.75622 ]
2. نحن نرى ذلك

[ theta_ {1} = sin ^ {- 1} ( dfrac {2 sin (40 ^ circ)} {1.7}) حوالي 49.132 ^ circ ]

3. ( theta_ {2} = 180 ^ circ - theta_ {1} حوالي 130.868 ^ circ ). باستخدام الزوايا المرجعية بدلاً من الأقواس المرجعية ، فإن ( theta_ {1} ) هي الزاوية المرجعية لـ ( theta_ {2} ) ، الموجودة في الربع الثاني. ومن هنا ، ( sin ( theta_ {2}) = sin ( theta_ {1}) )

4. يمكن تحديد الزاوية الثالثة ( alpha ) باستخدام مجموع زوايا المثلث.

[ alpha + theta_ {1} + 40 ^ circ = 180 ^ circ ]

[ alpha almost 180 ^ circ - 40 ^ circ - 49.132 ^ circ ]

[ alpha almost 90.868 ^ circ ]

نستخدم قانون الجيب لتحديد طول (س ) الضلع المقابل ( ألفا ). يظهر المثلث الناتج على اليمين.

[ dfrac {x} { sin ( alpha)} = dfrac {1.7} { sin ^ (40 ^ circ)} ]

[x = dfrac {1.7 sin ( alpha)} { sin (40 ^ circ)} ]

[x حوالي 2.644 مسافة قدم ]

5. باستخدام نفس الإجراء الذي قمنا به في الجزء (4) ، نحصل عليه

[ theta_ {2} حوالي 130.868 ^ دائرة ]

[ theta_ {2} حوالي 9.132 ^ circ ]

[x_ {2} حوالي 0.420 مسافة قدم ]

يظهر المثلث على اليمين.

هناك أوقات يظهر فيها قانون الجيب أنه لا توجد مثلثات تستوفي شروطًا معينة. غالبًا ما نرى هذا عندما ينتج قانون الجيب معادلة بالصيغة [ sin ( theta) = p ]

حيث (p ) هو رقم حقيقي ولكنه ليس بين 0 و 1. على سبيل المثال ، تغيير الشروط في التحقق من التقدم 3.15 بحيث نريد مثلثًا طول ضلعه 2 قدم وهو ضلع مجاور لزاوية (40 ^ circ ) والضلع المقابل للزاوية (40 ^ circ ) يبلغ طوله قدمًا واحدًا. كما هو الحال في فحص التقدم 3.15 ، ندع ( theta ) أن تكون الزاوية المقابلة لضلع الطول 2 قدم ونستخدم قانون الجيب للحصول على

[ dfrac { sin ( theta)} {2} = dfrac { sin (40 ^ circ)} {1} ]

[ sin ( theta) = dfrac {2 sin (40 ^ circ)} {1} حوالي 1.2856 ]

لا توجد مثل هذه الزاوية ( theta ) وهذا يدل على عدم وجود مثلث يلبي الشروط المحددة. يوضح الرسم البياني الموجود على اليمين الموقف.

تمرين ( PageIndex {3} )

افترض أن مثلثًا له ضلع طوله (2 ) قدم وهو ضلع مجاور لزاوية قياسها (40 ^ circ ). هل يمكن أن يبلغ طول الضلع المقابل للزاوية (40 ^ circ ) (3 ) أقدام؟

إجابه

الاختلاف الوحيد بين هذا والتحقق من التقدم 3.15 هو في طول الضلع المقابل للزاوية (40 ^ circ ). يمكننا استخدام نفس الشكل. من خلال الملاحظة ، يبدو أن هناك طريقة واحدة على الأرجح لرسم جانب بطول (3 ) قدم. الآن نصل إلى التفاصيل.

لنفترض أن ( theta ) هي الزاوية المقابلة لضلع الطول (2 ) قدم. استخدم قانون الجيب لتحديد ( sin ( theta) ). استخدم دالة الجيب العكسية لتحديد حل واحد (مقربًا لأقرب عشر درجة) لـ ( theta ). اتصل بهذا الحل ( theta_ {1} ).

هذا يعني أنه يمكن أن يكون هناك مثلثين يفيان بشروط المشكلة.

أوجد الزاوية الثالثة والضلع الثالث عندما تكون الزاوية المقابلة لضلع الطول 2 ( theta_ {1} ). أوجد الزاوية الثالثة والضلع الثالث عندما تكون الزاوية المقابلة لضلع الطول (2 ) هي ( theta_ {2} ). الآن حدد المجموع (40 ^ circ + theta_ {2} ) واشرح سبب عدم إمكانية ذلك في المثلث.
  • دع ( theta_ {2} = 180 ^ circ - theta_ {1} )
  • اشرح لماذا (أو تحقق من أن) ( theta_ {2} ) هو أيضًا حل للمعادلة في الجزء (1).

قانون جيب التمام

لقد رأينا كيف يمكن استخدام قانون الجيب لتحديد المعلومات حول الأضلاع والزوايا في المثلثات المائلة. ومع ذلك ، لاستخدام قانون منذ (المعادلة المرجع {lawofsines}) نحتاج إلى معرفة ثلاث أجزاء من المعلومات. نحتاج إلى معرفة الزاوية وطول ضلعها المقابل ، بالإضافة إلى ذلك ، نحتاج إلى معرفة زاوية أخرى أو طول ضلع آخر. إذا كان لدينا ثلاثة أجزاء مختلفة من المعلومات ، مثل أطوال ضلعين والزاوية المحصورة بينهما أو أطوال الأضلاع الثلاثة ، فسنحتاج إلى طريقة مختلفة لتحديد الأجزاء الأخرى من المعلومات حول المثلث. هذا هو المكان الذي يكون فيه قانون جيب التمام مفيدًا.

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

قانون جيب التمام

في المثلث ، إذا (أ ) ، (ب ) ، و (ج ) هي أطوال الأضلاع المتقابلة للزوايا ( ألفا ) ، ( بيتا ) ، ( جاما ) ، على التوالي ، إذن

[c ^ {2} = a ^ {2} + b ^ {2} - 2ab cos ( gamma) ]

[b ^ {2} = a ^ {2} + c ^ {2} - 2ac cos ( beta) ]

[a ^ {2} = b ^ {2} + c ^ {2} - 2bc cos ( alpha) ]

كما هو الحال مع قانون الجيب ، هناك ثلاث معادلات في قانون الجيب. ومع ذلك ، يمكننا تذكر ذلك بمعادلة واحدة فقط لأن مفتاح استخدام قانون جيب التمام هو أن هذا القانون يتضمن 4 كميات. هذه الكميات الأربعة هي أطوال الأضلاع الثلاثة وقياس إحدى زوايا المثلث كما هو موضح في الشكل 3.14.

الشكل ( PageIndex {3} ): رسم تخطيطي لقانون جيب التمام

في هذا الرسم البياني ، أطوال الأضلاع الثلاثة و ( theta ) هي الزاوية بين الجانبين (س ) و (ص ). يمكن أيضًا اعتبار ثيتا زاوية متقابلة. لذلك يمكننا كتابة قانون جيب التمام على النحو التالي:

قانون جيب التمام

في المثلث ، إذا كانت (س ) ، (ص ) ، و (ض ) هي أطوال أضلاع المثلث و ( ثيتا ) هي الزاوية بين الجانبين (س ) و (y ) كما في الشكل ( PageIndex {3} ) ، ثم

[z ^ {2} = x ^ {2} + y ^ {2} - 2xy cos ( theta). ]

الفكرة هي أنه إذا كنت تعرف 3 من هذه الكميات الأربعة ، فيمكنك استخدام قانون جيب التمام لتحديد الكمية الرابعة. يتضمن قانون جيب التمام أطوال الأضلاع الثلاثة للمثلث والزاوية الواحدة. إنها تنص على أن:

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

سوف نستكشف استخدام قانون جيب التمام في فحص التقدم التالي.

تمرين ( PageIndex {4} )

طول ضلعي المثلث (2.5 ) متر و (3.5 ) متر ، والزاوية المكونة من هذين الضلعين لها قياس (60 ^ دائرة ). حدد الأجزاء الأخرى من المثلث.

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

  1. استخدم قانون جيب التمام لتحديد طول الضلع المقابل للزاوية (60 ^ circ ). ( (ج )). نعرف الآن الزاوية ( (60 ^ circ )) وطول ضلعها المقابل. يمكننا استخدام قانون الجيب لتحديد الزاويتين الأخريين. ومع ذلك ، تذكر أنه يجب علينا توخي الحذر عند استخدام قانون الجيب لتحديد الزاوية لأن المعادلة قد تنتج زاويتين.
  2. استخدم قانون الجيب لتحديد ( sin ( alpha) ). حدد القيمتين المحتملتين لـ ( alpha ) واشرح سبب عدم إمكانية إحداهما.
  3. استخدم حقيقة أن مجموع زوايا المثلث هو (180 ^ circ ) لتحديد الزاوية ( beta ).
  4. استخدم قانون الجيب للتحقق من النتائج.
إجابه

1. باستخدام قانون جيب التمام نحصل عليها

[c ^ {2} = 3.5 ^ {2} + 2.5 ^ {2} - 2 (3.5) (2.5) cos (60 ^ circ) = 9.75 ]

لذلك (c = sqrt {9.75} حوالي 3.12250 space قدم )
2. باستخدام قانون الجيب ، نحصل عليه

[ dfrac { sin ( alpha)} {2.5} = dfrac { sin (60 ^ circ)} {c} ]

[ sin ( alpha) = dfrac {2.5 sin (60 ^ circ)} {c} almost 0.69338 ]

من هذا ، نحصل على ( alpha almost 43.898 ^ circ ) أو ( alpha almost 136.102 ^ circ ). ومع ذلك ، نظرًا لأن الزاوية المعطاة في (60 ^ circ ) ، فإن القيمة الثانية غير ممكنة منذ (136.102 ^ circ + 60 ^ circ <180 ^ circ ). لذلك ( alpha حوالي 43.898 ^ circ ).

نظرًا لأن مجموع زوايا المثلث يجب أن يكون (180 ^ circ ) ، لدينا [60 ^ circ + 43.898 ^ circ + beta = 180 ^ circ ] [ beta almost 76.102 ^ دائري ]

من خلال القيم التي حددناها ، يمكننا التحقق من عملنا من خلال إظهار أن [ dfrac { sin (60 ^ circ)} {c} = dfrac { sin ( alpha)} {2.5} = dfrac { بيتا} {3.5} حوالي 0.27735. ]

استخدمنا قانون الجيب لتحديد زاويتين في التحقق التقدمي 3.17 ورأينا أنه يتعين علينا توخي الحذر لأن معادلة قانون الجيب غالبًا ما تنتج زاويتين محتملتين. يمكننا تجنب هذا الموقف باستخدام قانون جيب التمام لتحديد الزوايا بدلاً من ذلك. هذا لأن معادلة بالصيغة ( cos ( theta) = p ) ، حيث p هو رقم حقيقي بين (0 ) و (1 ) له حل واحد فقط لـ ( ثيتا ) بين (0 ^ circ ) و (180 ^ circ ). الفكرة هي حل معادلة من قانون جيب التمام لجيب تمام الزاوية. في التمرين ( PageIndex {4} ) ، حددنا أولاً ( theta ^ {2} = 3.12250 ). بعد ذلك كان بإمكاننا المضي قدمًا على النحو التالي:

[2.5 ^ {2} = 3.5 ^ {2} + 3.12250 ^ {2} - 2 (3.5) (3.12250) cos ( alpha) ]
[2 (3.5) (3.12250) cos ( alpha) = 3.5 ^ {2} + 3.12250 ^ {2} - 2.5 ^ {2} ]
[ cos ( alpha) = dfrac {15.75} {21.8575} حوالي 0.720577 ]

يمكننا بعد ذلك استخدام دالة جيب التمام العكسي والحصول على ( alpha almost 43.898 ^ circ ) ، وهو ما حصلنا عليه في التمرين ( PageIndex {4} ).

يمكننا الآن استخدام حقيقة أن مجموع الزوايا في المثلث هو (180 ^ circ ) لتحديد ( beta ) ولكن من أجل الاكتمال ، يمكننا أيضًا استخدام قانون جيب التمام لتحديد ( beta ) ثم استخدم مجموع زاوية المثلث للتحقق من عملنا.

تمرين ( PageIndex {5} )

الأضلاع الثلاثة للمثلث لها أطوال (3 ) أقدام و (5 ) أقدام و (6 ) أقدام. استخدم قانون جيب التمام لتحديد كل زاوية من الزوايا الثلاث.

إجابه

الخطوة الأولى هي رسم مخطط دقيق بشكل معقول وتسمية الزوايا. سنستخدم الرسم البياني الموجود على اليمين.

قانون جيب التمام ، نحصل عليه

[5 ^ {2} = 3 ^ {2} + 6 ^ {2} - 2 (3) (6) cos ( alpha) ] [ cos ( alpha) = dfrac {20} { 36} ] [ alpha almost 56.251 ^ circ ]

[6 ^ {2} = 3 ^ {2} + 5 ^ {2} - 2 (3) (5) cos ( beta) ] [ cos ( beta) = dfrac {-2 } {30} ] [ بيتا حوالي 98.823 ^ circ ]

[3 ^ {2} = 5 ^ {2} + 6 ^ {2} - 2 (5) (6) cos ( gamma) ] [ cos ( gamma) = dfrac {52} {60} ] [ gamma almost 29.926 ^ circ ]

نتحقق من هذه النتائج من خلال التحقق من أن ( alpha + beta + gamma = 180 ^ circ ).

الملحق - إثبات قانون الجيب

سنستخدم ما نعرفه عن المثلثات القائمة لإثبات قانون الجيب. الفكرة الأساسية هي إنشاء مثلثات قائمة من الرسم التخطيطي لمثلث عام عن طريق رسم ارتفاع بطول (ح ) من أحد الرؤوس. نلاحظ أولاً أنه إذا كانت ( alpha ) و ( beta ) و ( gamma ) هي الزوايا الثلاث للمثلث ، فإن [ alpha + beta + gamma = 180 ^ circ ]

هذا يعني أن إحدى الزوايا الثلاث يمكن أن تكون زاوية منفرجة (بين (90 ^ circ ) و (180 ^ circ )) ، وبالتالي ، يجب أن تكون اثنتان على الأقل من الزوايا حادة (أقل من (90 ^ circ )) يوضح الشكل 3.15 الحالتين المحتملتين للمثلث العام. يحتوي المثلث الموجود على اليسار على ثلاث زوايا حادة والمثلث الموجود على اليمين له زاويتان حادتان ( ( alpha ) و ( beta )) وزاوية منفرجة ( gamma ).

الشكل ( PageIndex {4} ): المثلثات العامة

سنثبت الآن قانون الجيب للحالة التي تكون فيها الزوايا الثلاث للمثلث زوايا حادة. يتم تضمين الدليل على الحالة التي تكون فيها إحدى زوايا المثلث منفرجة في التمارين. الفكرة الأساسية هي إنشاء مثلثات قائمة من الرسم التخطيطي لمثلث عام عن طريق رسم ارتفاعات في المثلث كما هو موضح في الشكل ( فهرس الصفحة {5} ) حيث يتم رسم ارتفاع الطول (ح ) من قمة الزاوية ( بيتا ) وارتفاع الطول (ك ) مرسومان من قمة الزاوية ( جاما )

الشكل ( PageIndex {5} ): رسم تخطيطي لإثبات قانون الجيب

باستخدام المثلثات اليمنى في الرسم التخطيطي على اليسار ، نرى أن [ sin ( alpha) = dfrac {h} {c} ] [ sin ( gamma) = dfrac {h} {a} ]

من هذا ، يمكننا أن نستنتج أن [h = c sin ( alpha) ] [h = a sin ( gamma) ]

باستخدام المعادلتين في (1) ، يمكننا استخدام حقيقة أن كلا الجانبين الأيمن يساوي h لاستنتاج أن [c sin ( alpha) = a sin ( gamma) ]
الآن ، بقسمة طرفي المعادلة الأخيرة على (ac ) ، نرى ذلك

[ dfrac { sin ( alpha)} {a} = dfrac { sin ( gamma)} {c} ]

نستخدم الآن وسيطة مماثلة باستخدام المثلث الموجود على اليمين في الشكل ( PageIndex {5} ). نرى أن [ sin ( alpha) = dfrac {k} {b} ] [ sin ( beta) = dfrac {k} {a} ]

من هذا ، نحصل على [k = b sin ( alpha) ] [k = a sin ( beta) ] وهكذا [b sin ( alpha) = a sin ( beta) ] [ dfrac { sin ( alpha)} {a} = dfrac { sin ( beta)} {b} ]

يمكننا الآن استخدام المعادلتين (2) و (3) لإكمال إثبات قانون الجيب ،

وهو [ dfrac { sin ( alpha)} {a} = dfrac { sin ( beta)} {b} = dfrac { sin ( gamma)} {c}. ]

الملحق - إثبات قانون جيب التمام

كما هو الحال مع قانون الجيب ، سنستخدم نتائج حول المثلثات القائمة لإثبات قانون جيب التمام. سنستخدم أيضًا صيغة المسافة. سنبدأ بمثلث عام بـ (a ) و (b ) و (c ) يمثل أطوال الأضلاع المقابلة للزوايا ( alpha ) و ( beta ) و ( جاما ) على التوالي. سنضع الزاوية ( gamma ) في الوضع القياسي في نظام الإحداثيات كما هو موضح في الشكل ( PageIndex {6} ).

في هذا الرسم التخطيطي ، تظهر الزاوية ( gamma ) كزاوية منفرجة ولكن البرهان سيكون هو نفسه إذا كان ( gamma ) زاوية حادة. لقد قمنا بتسمية رأس الزاوية ( alpha ) كـ (A ) بالإحداثيات ((x، y) ) ورسمنا خطًا من (A ) عموديًا على (x ) -محور. لذلك من تعريفات الدوال المثلثية في القسم 3.1 ، نرى ذلك

[ cos ( gamma) = dfrac {x} {b} ] [x = b cos ( gamma) ]

[ sin ( gamma) = dfrac {y} {b} ] [y = b sin ( gamma) ]


الشكل ( PageIndex {6} ): رسم تخطيطي لقانون جيب التمام

نستخدم الآن صيغة المسافة مع النقاط (A ) ورأس الزاوية ( beta ) التي لها إحداثيات ((a، 0) ). هذا يعطي

[c = sqrt {(x - a) ^ {2} + (y - 0) ^ {2}} ]
[c ^ {2} = (x - a) ^ {2} + y ^ {2} ]
[c ^ {2} = x ^ {2} - 2ax + a ^ {2} + y ^ {2} ]

نستبدل الآن قيم (x ) و (y ) في المعادلة (4) ونحصل عليها

[c ^ {2} = b ^ {2} cos ^ {2} ( gamma) - 2ab cos ( gamma) + a ^ {2} + b ^ {2} sin ^ {2} ( جاما) ]
[c ^ {2} = a ^ {2} + b ^ {2} cos ^ {2} ( gamma) + b ^ {2} sin ^ {2} ( gamma) - 2ab cos ( جاما) ]
[c ^ {2} = a ^ {2} + b ^ {2} ( cos ^ {2} ( gamma) + sin ^ {2} ( gamma)) - 2ab cos ( gamma) ]

يمكننا الآن استخدام المعادلة الأخيرة وحقيقة أن (cos ^ {2} ( gamma) + sin ^ {2} ( gamma) = 1 ) لاستنتاج ذلك

[c ^ {2} = a ^ {2} + b ^ {2} -2ab cos ( gamma) ]

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

ملخص

درسنا في هذا القسم المفاهيم والأفكار المهمة التالية:

يمكن استخدام قانون الجيب وقانون جيب التمام لتحديد أطوال أضلاع المثلث وقياس زوايا المثلث.

ال قانون الجيوب ينص على أنه إذا كان q هو طول الضلع المقابل للزاوية ( theta ) و (p ) هو طول الضلع المقابل للزاوية ( theta ) ، إذن [ dfrac { sin ( theta)} {q} = dfrac { sin ( phi)} {p} ]

ال قانون جيب التمام ينص على أنه إذا كانت (p ) و (q ) و (r ) هي أطوال أضلاع المثلث و ( theta ) هي الزوايا المقابلة للجانب (q ) ، إذن

[q ^ {2} = p ^ {2} + r ^ {2} - 2pr cos ( theta). ]

تتضمن كل من المعادلات في قانون الجيب وقانون جيب التمام أربعة متغيرات. لذا ، إذا عرفنا قيم ثلاثة من المتغيرات ، فيمكننا استخدام المعادلة المناسبة لحل المتغير الرابع.


مثلثات

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

مجموع الزوايا الداخلية للمثلث هو 180 درجة.
x° + ذ° + ض° = 180°

يجب أن يكون طول الضلع الأطول في المثلث أقل من مجموع أطوال ضلعي المثلث الآخرين ، ولكن أكبر من الفرق في الطول.
(ABقبل الميلاد) العلامة & lt تيار متردد & lt (AB + قبل الميلاد)

أطول ضلع في المثلث يقابل أكبر زاوية وأقصر ضلع يقابل أصغر زاوية.
∠ ب هي أكبر زاوية تيار متردد هو أطول جانب.
AB هو أقصر جانب حتى ∠ج هي أصغر زاوية.

إذا قمت بتمديد جانب واحد من المثلث ، فإن خارج، الزاوية سيكون الناتج مساويًا لمجموع الزاويتين الداخليتين الأخريين في المثلث.
x° + ض° = ن°

مثال

أوجد قيمة ذ.

المحلول

ابدأ بالمثلث الموجود على اليمين. باستخدام الزوايا الخارجية ،
x° + 120 درجة = 150 درجة ، لذا x° = 30°.

تعني الأقواس الموجودة أعلى المثلث أن الزوايا متطابقة. منذ x° = 30 درجة ، وزاويتها المتطابقة هي أيضًا 30 درجة.

من هنا ، توجد طريقتان لإيجاد قيمة ذ.

إحدى الطرق هي استخدام الزوايا الخارجية. ذ° + 30 ° = 120 درجة ، إذن ذ° = 90°.

الطريقة الأخرى هي إيجاد الزاوية المجهولة الأخرى أولاً. بما أن الزاوية المجهولة تشكل زاوية مستقيمة بزاوية 120 درجة ، فإن قياسها هو 60 درجة.
مجموع الزوايا الداخلية للمثلث هو 180 درجة.
لذلك 60 درجة + 30 درجة + ذ° = 180°.
ثانية، ذ° = 90°.


هل المثلث الذي ضلعه 3،4،6 مثلث قائم الزاوية؟

للتحقق مما إذا كانت الأضلاع مثلثًا قائمًا أم لا ، تحقق مما إذا كان مجموع مربعي الضلعين الأصغر يساوي طول مربع الضلع الأطول.

بمعنى آخر ، تحقق مما إذا كانت تعمل مع نظرية فيثاغورس:

بما أن # 25 # ليس # 36 # فإن المثلث ليس مثلثًا قائمًا.

مثلث به جوانب # لون (أحمر) (3 و 4 و 6 # هو # لون (أزرق) (ليس # أ مثلث قائم.

توضيح:

#" "#
لدينا ثلاثة أضلاع للمثلث رقم 3 و 4 و 6 #.

فيثاغورس نظرية ينص على أنه في مثلث قائم الزاوية ، مربع الوتر يساوي مجموع مربعات الجانبين الآخرين.

لتحديد ما إذا كانت الأضلاع الثلاثة المعطاة تشكل مثلثًا قائمًا أم لا ، نستخدم فيثاغورس نظرية للتحقق.

ارسم a مثلث، قل # أ ، ب ، ج # بالمقادير المعطاة.

نلاحظ أن أطول ضلع (BC) حجمها # 6 # وحدات.

ومن ثم ، يجب أن يكون هذا هو الوتر، إذا كان المثلث ABC مثلث قائم الزاوية.

هل الزاوية # / _ CAB # تجعل الزاوية اليمنى # 90 ^ @ #؟

تحقق من ذلك باستخدام العلاقة بين الوتر والساقين الآخرين للمثلث.

إذا كان # (AB) ^ 2 + (AC) ^ 2 = (BC) ^ 2 # ، فإننا نعلم أن # BC # هو الوتر والمثلث # ABC # مثلث قائم الزاوية.


كيف تتحقق مما إذا كان المثلث هو مثلث صحيح له جوانب معطاة

كيفية معرفة ما إذا كان المثلث قائم الزاوية له جوانب معينة: & # xa0

إذا كان a و b قياسين للجوانب الأقصر للمثلث ، فإن c هو المقياس & # xa0 لأطول ضلع ، و c 2 = a 2 & # xa0 + b 2 ، فإن المثلث هو مثلث قائم الزاوية.

إذا كان c 2 & # xa0 ≠ & # xa0 a 2 & # xa0 + b 2 ، فإن المثلث ليس مثلثًا قائمًا.

دعونا نرى بعض أمثلة المشاكل على أساس المفهوم أعلاه.

حدد ما إذا كانت القياسات الجانبية التالية تشكل مثلثات قائمة.

بما أن قياس أطول ضلع هو 29 ، فلنفترض أن c = 29 و a = 20 و b = 21.

ثم حدد ما إذا كان & # xa0 c 2 & # xa0 = & # xa0 a 2 & # xa0 + b 2

بما أن & # xa0 c 2 & # xa0 = & # xa0 a 2 & # xa0 + b 2 ، فإن المثلث هو مثلث قائم الزاوية.

حدد ما إذا كانت القياسات الجانبية التالية تشكل مثلثات قائمة.

بما أن قياس أطول ضلع هو 12 ، فلنفترض أن c = 12 و a = 10 و b = 8.

ثم حدد ما إذا كان & # xa0 c 2 & # xa0 = & # xa0 a 2 & # xa0 + b 2

بما أن & # xa0 c 2 & # xa0 & # xa0 ≠ & # xa0 a 2 & # xa0 + b 2 ، فإن المثلث ليس مثلثًا قائمًا.

حدد ما إذا كانت القياسات الجانبية التالية تشكل مثلثات قائمة.

بما أن قياس أطول ضلع هو 50 ، فلنفترض أن c = 50 و a = 30 و b = 40.

ثم حدد ما إذا كان & # xa0 c 2 & # xa0 = & # xa0 a 2 & # xa0 + b 2

بما أن & # xa0 c 2 & # xa0 = & # xa0 a 2 & # xa0 + b 2 ، فإن المثلث هو مثلث قائم الزاوية.

حدد ما إذا كانت القياسات الجانبية التالية تشكل مثلثات قائمة.

بما أن قياس أطول ضلع هو 18 ، فلنفترض أن c = 18 و a = 6 و b = 12.

ثم حدد ما إذا كان & # xa0 c 2 & # xa0 = & # xa0 a 2 & # xa0 + b 2

بما أن & # xa0 c 2 & # xa0 & # xa0 ≠ & # xa0 a 2 & # xa0 + b 2 ، فإن المثلث ليس مثلثًا قائمًا.

حدد ما إذا كانت القياسات الجانبية التالية تشكل مثلثات قائمة.

بما أن قياس أطول ضلع هو 36 ، فلنفترض أن c = 36 و a = 24 و b = 30.

ثم حدد ما إذا كان & # xa0 c 2 & # xa0 = & # xa0 a 2 & # xa0 + b 2

بما أن & # xa0 c 2 & # xa0 & # xa0 ≠ & # xa0 a 2 & # xa0 + b 2 ، فإن المثلث ليس مثلثًا قائمًا.

بعد الاطلاع على الأشياء المذكورة أعلاه ، نأمل أن يكون الطلاب قد فهموا "كيفية معرفة ما إذا كان المثلث هو مثلث قائم الزاوية مع جوانب معينة". & # xa0

بصرف النظر عن الأشياء المذكورة أعلاه ، إذا كنت تريد معرفة المزيد حول "كيفية معرفة ما إذا كان المثلث هو مثلث قائم الزاوية مع جوانب معينة" ، يرجى النقر هنا & # xa0

بصرف النظر عن الأشياء الواردة في صفحة الويب هذه ، إذا كنت بحاجة إلى أي أشياء أخرى في الرياضيات ، فيرجى استخدام بحث Google المخصص هنا.

إذا كان لديك أي ملاحظات حول محتوى الرياضيات الخاص بنا ، فيرجى مراسلتنا عبر البريد الإلكتروني: & # xa0

نحن دائما نقدر ملاحظاتك. & # xa0

يمكنك أيضًا زيارة صفحات الويب التالية حول مواد مختلفة في الرياضيات. & # xa0


التعليقات (43)

ماهو حل السؤال الاخير ؟؟
اعتقدت أنه يجب أن يكون (E)
إذا كان الجانبان 9 ، فإن الجانب الثالث يقع بين 0 و 18 ، لذا فإن الحد الأقصى للمحيط هو 9 + 9 + 17 = 35 ، ولهذا السبب (E) غير ممكن!
كيف هو الجواب أ.

لا يقول في أي مكان أن الأضلاع المتساوية هي 9. (E) ممكن إذا كانت الأضلاع 30 ، 30 ، 9. (أ) غير ممكن لأن الجوانب الأخرى يجب أن تكون 3 و 3 لجعل المحيط 15 ، لكن أضلاع 3 و 3 و 9 تكسر قاعدة عدم مساواة المثلث.

هناك طريقة أخرى للحل ، على الرغم من أنها تتطلب وقتًا وحذرًا ، وهي إيجاد نطاق المحيط. هناك احتمالان هنا: [9 ، أ ، أ] ، [9 ، 9 ، أ]. طبق نظرية عدم المساواة ، [9، a، a] لديك P = 9 + 2a & gt 18، [9،9، a] لها 18 & lt P = 18 + a 18. هذا هو الشرط الوحيد لتلبية المشكلة. ثم A هو الجواب.


3.3: مثلثات ليست مثلثات قائمة

أدخل 3 أطوال أضلاع مثلث (أ ، ب ، ج) ، ثم انقر فوق "إدخال". ستحدد هذه الآلة الحاسبة ما إذا كانت هذه الجوانب الثلاثة ستشكل مثلثًا متساوي الأضلاع أو متساوي الأضلاع أو حادًا أو يمينًا أو منفرجًا أو رقم triangle at all.

Without Using The Calculator
When given 3 triangle sides, to determine if the triangle is acute, right or obtuse:

2) Sum the squares of the 2 shortest sides.

3) Compare this sum to the square of the 3rd side.

if sum > 3rd side²   Acute Triangle

if sum = 3rd side²   Right Triangle

sum of the squares of the short sides = 25 + 36 = 61

3, 4 and 5 Squaring each side = 9, 16 and 25

sum of the squares of the short sides = 9 + 16 = 25

3, 7 and 9 Squaring each side = 9, 49 and 81

sum of the squares of the short sides = 9 + 49 = 58

58 For determining if the 3 sides can even form a triangle, the triangle inequality theorem states that the longest side must be shorter than the sum of the other 2 sides.


Linking Vertex Attributes

The vertex shader allows us to specify any input we want in the form of vertex attributes and while this allows for great flexibility, it does mean we have to manually specify what part of our input data goes to which vertex attribute in the vertex shader. This means we have to specify how OpenGL should interpret the vertex data before rendering.

Our vertex buffer data is formatted as follows:

  • The position data is stored as 32-bit (4 byte) floating point values.
  • Each position is composed of 3 of those values.
  • There is no space (or other values) between each set of 3 values. The values are tightly packed in the array.
  • The first value in the data is at the beginning of the buffer.

With this knowledge we can tell OpenGL how it should interpret the vertex data (per vertex attribute) using glVertexAttribPointer :

The function glVertexAttribPointer has quite a few parameters so let's carefully walk through them:

  • The first parameter specifies which vertex attribute we want to configure. Remember that we specified the location of the position vertex attribute in the vertex shader with layout (location = 0) . This sets the location of the vertex attribute to 0 and since we want to pass data to this vertex attribute, we pass in 0 .
  • The next argument specifies the size of the vertex attribute. The vertex attribute is a vec3 so it is composed of 3 values.
  • The third argument specifies the type of the data which is GL_FLOAT (a vec* in GLSL consists of floating point values).
  • The next argument specifies if we want the data to be normalized. If we're inputting integer data types (int, byte) and we've set this to GL_TRUE , the integer data is normalized to 0 (or -1 for signed data) and 1 when converted to float. This is not relevant for us so we'll leave this at GL_FALSE .
  • The fifth argument is known as the stride and tells us the space between consecutive vertex attributes. Since the next set of position data is located exactly 3 times the size of a float away we specify that value as the stride. Note that since we know that the array is tightly packed (there is no space between the next vertex attribute value) we could've also specified the stride as 0 to let OpenGL determine the stride (this only works when values are tightly packed). Whenever we have more vertex attributes we have to carefully define the spacing between each vertex attribute but we'll get to see more examples of that later on.
  • The last parameter is of type void* and thus requires that weird cast. This is the offset of where the position data begins in the buffer. Since the position data is at the start of the data array this value is just 0 . We will explore this parameter in more detail later on

Now that we specified how OpenGL should interpret the vertex data we should also enable the vertex attribute with glEnable VertexAttribArray giving the vertex attribute location as its argument vertex attributes are disabled by default. From that point on we have everything set up: we initialized the vertex data in a buffer using a vertex buffer object, set up a vertex and fragment shader and told OpenGL how to link the vertex data to the vertex shader's vertex attributes. Drawing an object in OpenGL would now look something like this:

We have to repeat this process every time we want to draw an object. It may not look like that much, but imagine if we have over 5 vertex attributes and perhaps 100s of different objects (which is not uncommon). Binding the appropriate buffer objects and configuring all vertex attributes for each of those objects quickly becomes a cumbersome process. What if there was some way we could store all these state configurations into an object and simply bind this object to restore its state?

Vertex Array Object

A vertex array object (also known as VAO ) can be bound just like a vertex buffer object and any subsequent vertex attribute calls from that point on will be stored inside the VAO. This has the advantage that when configuring vertex attribute pointers you only have to make those calls once and whenever we want to draw the object, we can just bind the corresponding VAO. هذا يجعل التبديل بين تكوينات البيانات والسمات المختلفة للقمة أمرًا سهلاً مثل ربط VAO مختلف. All the state we just set is stored inside the VAO.

Core OpenGL يستوجب that we use a VAO so it knows what to do with our vertex inputs. If we fail to bind a VAO, OpenGL will most likely refuse to draw anything.

A vertex array object stores the following:

  • Calls to glEnable VertexAttribArray or glDisableVertexAttribArray .
  • Vertex attribute configurations via glVertexAttribPointer .
  • Vertex buffer objects associated with vertex attributes by calls to glVertexAttribPointer .

The process to generate a VAO looks similar to that of a VBO:

To use a VAO all you have to do is bind the VAO using glBindVertexArray . From that point on we should bind/configure the corresponding VBO(s) and attribute pointer(s) and then unbind the VAO for later use. As soon as we want to draw an object, we simply bind the VAO with the preferred settings before drawing the object and that is it. In code this would look a bit like this:

And that is it! Everything we did the last few million pages led up to this moment, a VAO that stores our vertex attribute configuration and which VBO to use. Usually when you have multiple objects you want to draw, you first generate/configure all the VAOs (and thus the required VBO and attribute pointers) and store those for later use. The moment we want to draw one of our objects, we take the corresponding VAO, bind it, then draw the object and unbind the VAO again.

The triangle we've all been waiting for

To draw our objects of choice, OpenGL provides us with the glDrawArrays function that draws primitives using the currently active shader, the previously defined vertex attribute configuration and with the VBO's vertex data (indirectly bound via the VAO).

The glDrawArrays function takes as its first argument the OpenGL primitive type we would like to draw. Since I said at the start we wanted to draw a triangle, and I don't like lying to you, we pass in GL_TRIANGLES . The second argument specifies the starting index of the vertex array we'd like to draw we just leave this at 0 . The last argument specifies how many vertices we want to draw, which is 3 (we only render 1 triangle from our data, which is exactly 3 vertices long).

Now try to compile the code and work your way backwards if any errors popped up. As soon as your application compiles, you should see the following result:

The source code for the complete program can be found here .

If your output does not look the same you probably did something wrong along the way so check the complete source code and see if you missed anything.


The Take-Aways

Remembering the rules for 30-60-90 triangles will help you to shortcut your way through a variety of math problems . But do keep in mind that, while knowing these rules is a handy tool to keep in your belt, you can still solve most problems without them.

Keep track of the rules of $x$, $x√3$, $2x$ and 30-60-90 in whatever way makes sense to you and try to keep them straight if you can, but don't panic if your mind blanks out when it's crunch time. Either way, you've got this.

And, if you need more practice, go ahead and check out this 30-60-90 triangle quiz . Happy test-taking!

Have friends who also need help with test prep? Share this article!

Courtney scored in the 99th percentile on the SAT in high school and went on to graduate from Stanford University with a degree in Cultural and Social Anthropology. She is passionate about bringing education and the tools to succeed to students from all backgrounds and walks of life, as she believes open education is one of the great societal equalizers. She has years of tutoring experience and writes creative works in her free time.


3.3: Triangles that are Not Right Triangles

This section describes the Triangle Count or Clustering Coefficient algorithm in the Neo4j Labs Graph Algorithms library.

This is documentation for the Graph Algorithms Library, which has been deprecated by the Graph Data Science Library (GDS).

Triangle counting is a community detection graph algorithm that is used to determine the number of triangles passing through each node in the graph. A triangle is a set of three nodes, where each node has a relationship to all other nodes.

The Triangle Counting / Cluster Coefficient algorithm was developed by the Neo4j Labs team and is not officially supported.

9.3.3.1. History and explanation

Triangle counting gained popularity in social network analysis, where it is used to detect communities and measure the cohesiveness of those communities. It can also be used to determine the stability of a graph, and is often used as part of the computation of network indices, such as the clustering coefficient.

There are two types of clustering coefficient:

The transitivity coefficient of a graph is sometimes used, which is three times the number of triangles divided by the number of triples in the graph. For more information, see "Finding, Counting and Listing all Triangles in Large Graphs, An Experimental Study".

9.3.3.2. Use-cases - when to use the Triangle Counting / Clustering Coefficient algorithm

  • Triangle count and clustering coefficient have been shown to be useful as features for classifying a given website as spam, or non-spam, content. This is described in "Efficient Semi-streaming Algorithms for Local Triangle Counting in Massive Graphs".
  • Clustering coefficient has been used to investigate the community structure of Facebook’s social graph, where they found dense neighbourhoods of users in an otherwise sparse global graph. Find this study in "The Anatomy of the Facebook Social Graph".
  • Clustering coefficient has been proposed to help explore thematic structure of the web, and detect communities of pages with a common topic based on the reciprocal links between them. For more information, see Curvature of co-links uncovers hidden thematic layers in the World Wide Web.

9.3.3.3. Triangle Counting / Clustering Coefficient algorithm sample

The following will create a sample graph:

The following will return a stream of triples, with nodeId for each triangle:

We can see that there are KNOWS triangles containing "Will, Michael, and Chris", "Will, Mark, and Michael", and "Michael, Karin, and Chris". This means that everybody in the triangle knows each other.

The following will count the number of triangles that a node is member of, and write it back. It will return the total triangle count and average clustering coefficient of the given graph:

The following will count the number of triangles that a node is member of, and return a stream with nodeId and triangleCount :

We learn that Michael is part of the most triangles, but it’s Karin and Mark who are the best at introducing their friends - all of the people who know them, know each other!

9.3.3.4. Example usage

In graph theory, a clustering coefficient is a measure of the degree to which nodes in a graph tend to cluster together. Evidence suggests that in most real-world networks, and in particular social networks, nodes tend to create tightly knit groups characterised by a relatively high density of ties this likelihood tends to be greater than the average probability of a tie randomly established between two nodes.

We check if this holds true for Yelp’s social network of friends:

Average clustering coefficient is 0.0523, which is really low for a social network. This indicates that groups of friends are not tightly knit together, but rather sparse. We can assume that users are not on Yelp for finding and creating friends, like Facebook for example, but rather something else, like finding good restaurant recommendations.

Local triangle count and clustering coefficient of nodes can be used as features in finding influencers in social networks.

9.3.3.5. Cypher projection

If node label and relationship type are not selective enough to describe your subgraph to run the algorithm on, you can use Cypher statements to load or project subsets of your graph. This can also be used to run algorithms on a virtual graph. You can learn more in the Section 2.2, “Cypher projection” section of the manual.

Set graph:'cypher' in the config:

9.3.3.6. بناء الجملة

The following will return a stream of triples with nodeId for each triangle:

The label to load from the graph. If null, load all nodes.

The relationship type to load from the graph. If null, load all nodes.

The number of concurrent threads used for running the algorithm. Also provides the default value for 'readConcurrency'.

The number of concurrent threads used for reading the graph.

The ID of node in the given triangle.

The ID of node in the given triangle.

The ID of node in the given triangle.

The following will count the number of triangles that a node is a member of, and return a stream with nodeId and triangleCount :

The label to load from the graph. If null, load all nodes.

The relationship type to load from the graph. If null, load all relationships.

The number of concurrent threads used for running the algorithm. Also provides the default value for 'readConcurrency'.


In-depth: Software rasterizer and triangle clipping

Software rasterizers can be used for occlusion culling. Some games such as كيلزون 3 use this to cull objects. So I decided to write one myself.

The steps are first to transform vertices to homogenous coordinates, clip the triangles to the viewport, and then fill the triangles with interpolated parameters.

Note that the clipping process should be done in homogenous coordinates before the perspective division, otherwise lots of the extra work is needed to clip the triangles properly. This post will explain why clipping should be done before the perspective division.

Points in homogenous coordinates

In our usual Cartesian Coordinate system, we can represent any points in 3D space in the form of (X, ص, ض). While in Homogenous coordinates, a redundant component ث is added, which results in a form of (x, ذ, ض, ث). Multiplying any constant (except zero) to that 4-components vector still represents the same point in homogenous coordinates.

To convert a homogenous point back to our usual Cartesian Coordinate, we would multiply a point in homogenous coordinates so that the ث component is equals to one:

In the following figure, we consider the x-ث plane, a point (x, ذ, ض, ث) is transformed back to the usual Cartesian Coordinates (X, ص, ض) by projecting onto the ث=1 plane:

figure 1. projecting point to ث=1 plane

The interesting point comes when the ث component is equal to zero. Imagine the ث component is getting smaller and smaller, approaching zero. The coordinates of point (x/ث , y/ث , z/w, 1) will getting larger and larger. متي ث is equal to zero, we can represent a point at infinity.

Line Segments in Homogenous coordinates

In Homogenous coordinates, we still can represent a line segment between two points P 0 = (x 0 , ذ 0 , ض 0 , ث 0 ) and P 1 = (x 1 , ذ 1 , ض 1 , ث 1 ) in parametric form:

Then we can get a line having the shape:

figure 2. internal line segment

The projected line on ث=1 is called internal line segment in the above case.

But what if the coordinates of P 0 and P 1 having the coordinates where ث 0 < 0 and ث 1 > 0 ?


figure 3. external line segment

In this case, it will result in the above figure, forming an external line segment. It is because the homogenous line segment has the form L= P 0 + t * (P 1 -P 0 ), when moving the parameter from ر=0 to ر= 1, since ث 0 < 0 and ث 1 > 0, there exists a point on the homogenous line where ث=0.

This point is at infinity when projected to the ث=1 plane, where the projected line segment joining P 0 and P 1 passes through the point at infinity, forming an external line segment.

The figure below shows how points are transformed before and after perspective projection and divided by ث:

figure 4. region mapping

The blue line shows the viewing frustum, nothing unusual for the region in front of the eye. The unusual things are the points behind the eye. After perspective transformation and projected to ث=1 plane, those points are transformed in front of the eye too. So for line segment with one point in front of the eye and the other behind the eye, it would be transformed to the external line segment after the perspective division.

Triangles in Homogenous coordinates

In the last section, we know that there are internal and external line segments after the perspective division.Wwe also have internal and external triangles. The internal triangles are the one that we usually sees. The external triangles must be formed by 1 internal line segment and 2 external line segments:

figure 5. external triangle

In the above figure, the shaded area represents the external triangle formed by the points P 0 , P 1 and P 2 . These kind of external triangles may appear after the perspective projection transform. And this happens in our real world too:

Triangles clipping

To avoid the case of external triangles, lines/triangles should be clipped in homogenous coordinates before being divided by the ث-component. The homogenous point (x, ذ, ض, ث) will be tested with the following inequalities:

which represent only a single point in homogenous coordinates.

S oa triangle (after clipped by inequality 1, 2, 3) having one or two vertices with ث=0 will result in either a line or a point which can be discarded. Hence, after clipping, no external triangles will be produced when dividing by ث-component.

To clip a triangle against a plane, the triangle may result in either 1 or 2 triangles depending on whether there are 1 or 2 vertex outside the clipping plane:

figure 6. clipping internal triangles

Then the clipped triangles can be passed to the next stage to be rasterized either by a scan line algorithm or by a half-space algorithm.

Below is the clipping result of an external triangle with 1 vertex behind the camera.

clipping external triangle in software rasterizer

Below is another rasterized result:

In this post, the math behind the clipping of triangles are explained. Clipping should be done before projecting the homogenous point to the ث=1 to avoid taking special cares to clip the external triangles. In the next post, I will talk about the perspective interpolation, and the source code will be given in the next post (written in Javascript, drawing to HTML canvas).

And lastly, special thanks to Fabian Giesen for giving feedback during the draft of this post.

[This piece was reprinted from #AltDevBlogADay, a shared blog initiative started by @mike_acton devoted to giving game developers of all disciplines a place to motivate each other to write regularly about their personal game development passions.]