كيفية تحديد Triangle داخل مستطيل مع إعطاء إحداثي في ​​هذا المستطيل

StackOverflow https://stackoverflow.com/questions/2310794

سؤال

Problem illustration

إعطاء مستطيل من العرض ث والارتفاع ح. والإحداثيات x ، y في هذا المستطيل أود تحديد المثلث الذي أنا في الداخل.

أي يجب أن تأخذ الوظيفة معلمات (x ، y) وإرجاع A أو B أو C أو D أو A رقم صفر تمثل هذا الفهرس المثلث IE (0 = A ، 1 = B ، 2 = C ، 3 = D) إذا كانت بهذا الترتيب.

أعتقد أن هذا سيكون شيئًا مثل> = صيغة الخط الأحمر و> = صيغة الخط الأخضر؟

أود تنفيذ هذا في vb.net

هل كانت مفيدة؟

المحلول

aboveRed = x*h > y*w;
aboveGreen = (w-x)*h > y*w;
if (aboveRed)
{
    if (aboveGreen) return "C"; else return "B";
}
else
{
    if (aboveGreen) return "D"; else return "A";
}

نصائح أخرى

معادلة الخط الأخضر: h * x + w * y = h * w

معادلة الخط الأحمر: x * h - y * w = 0

Public Function GetTriangleNumber(ByVal x As Integer, ByVal y As Integer) 
                                                                     As Integer
    Dim overGreenLine As Boolean = ((((h * x) + (w * y)) - (h * w)) < 0)
    Dim overRedLine As Boolean = (((h * x) - (w * y)) > 0)
    If overGreenLine Then
        Return IIf(overRedLine, 2, 3)
    End If
    Return IIf(overRedLine, 1, 0)
End Function

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

لا تحتاج فعليًا إلى حساب وظائف المثلثات العكسية للقيام بذلك ، لأن نسبة أطوال الخطوط تمنحك معلومات كافية (والخطيئة (45) ... أو بالأحرى الخطيئة (PI/4) هي قيمة ثابتة) .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top