ব্যাখ্যার সাথে খুব সরল জ্যামিতিক সমাধান
কয়েক দিন আগে, একজন একই সমস্যায় পড়েছিল এবং গণিতের বইটি নিয়ে বসেছিলেন। আমি কিছু বেসিক সূত্রগুলি একত্রিত ও সরল করে সমস্যার সমাধান করেছি।
আসুন এই চিত্রটি বিবেচনা করুন-
আমরা জানতে চাই Θ , তাই আমরা খুঁজে বের করতে হবে α এবং বিটা প্রথম। এখন, কোনও সরল রেখার জন্য-
y = m * x + c
চলুন- এ = (কুড়াল, আই ) , বি = (বিএক্স, বাই) , এবং ও = (ষাঁড়, ওয়) । সুতরাং ওএ লাইনের জন্য -
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 α
) এবং tan b
(একন -৩ থেকে ) মূল্য প্রতিস্থাপন করার পরে এবং সরলীকরণ প্রয়োগের পরে আমরা-
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)) )
হ্যাঁ, ওটাই!
এখন, নিম্নলিখিত চিত্রটি গ্রহণ করুন-
এই সি # বা, জাভা পদ্ধতিটি কোণ ( ϴ ) গণনা করে -
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;
}