स्पष्टीकरण के साथ बहुत सरल ज्यामितीय समाधान
कुछ दिन पहले, उसी समस्या में पड़ गए और उन्हें गणित की किताब के साथ बैठना पड़ा। मैंने कुछ बुनियादी सूत्रों के संयोजन और सरलीकरण द्वारा समस्या को हल किया।
आइए इस आंकड़े पर विचार करें-
हम जानना चाहते हैं Θ , इसलिए हम यह पता करना है α और बीटा पहले। अब, किसी भी सीधी रेखा के लिए-
y = m * x + c
आज्ञा देना- ए = (कुल्हाड़ी, एय) , बी = (बीएक्स, बाय) , और ओ = (बैल, ऑय) । तो लाइन OA के लिए -
oy = m1 * ox + c ⇒ c = oy - m1 * ox ...(eqn-1)
ay = m1 * ax + c ⇒ ay = m1 * ax + oy - m1 * ox [from eqn-1]
⇒ ay = m1 * ax + oy - m1 * ox
⇒ m1 = (ay - oy) / (ax - ox)
⇒ tan α = (ay - oy) / (ax - ox) [m = slope = tan ϴ] ...(eqn-2)
उसी तरह, लाइन ओबी के लिए -
tan β = (by - oy) / (bx - ox) ...(eqn-3)
अब, हमें चाहिए ϴ = β - α
। त्रिकोणमिति में हमारे पास एक सूत्र है-
tan (β-α) = (tan β + tan α) / (1 - tan β * tan α) ...(eqn-4)
tan α
(Eqn-2 से) के मान को बदलने के बाद और tan b
eqn-4 में (eqn-3 से), और हमारे द्वारा प्राप्त सरलीकरण को लागू करते हैं-
tan (β-α) = ( (ax-ox)*(by-oy)+(ay-oy)*(bx-ox) ) / ( (ax-ox)*(bx-ox)-(ay-oy)*(by-oy) )
इसलिए,
ϴ = β-α = tan^(-1) ( ((ax-ox)*(by-oy)+(ay-oy)*(bx-ox)) / ((ax-ox)*(bx-ox)-(ay-oy)*(by-oy)) )
बस इतना ही!
अब, निम्नलिखित आंकड़ा लें-
यह C # या जावा विधि कोण (की गणना करता है Θ ) -
private double calculateAngle(double P1X, double P1Y, double P2X, double P2Y,
double P3X, double P3Y){
double numerator = P2Y*(P1X-P3X) + P1Y*(P3X-P2X) + P3Y*(P2X-P1X);
double denominator = (P2X-P1X)*(P1X-P3X) + (P2Y-P1Y)*(P1Y-P3Y);
double ratio = numerator/denominator;
double angleRad = Math.Atan(ratio);
double angleDeg = (angleRad*180)/Math.PI;
if(angleDeg<0){
angleDeg = 180+angleDeg;
}
return angleDeg;
}