Giải pháp hình học rất đơn giản với giải thích
Vài ngày trước, a rơi vào cùng một vấn đề và phải ngồi với cuốn sách toán học. Tôi đã giải quyết vấn đề bằng cách kết hợp và đơn giản hóa một số công thức cơ bản.
Hãy xem xét con số này-
Chúng ta muốn biết ϴ , vì vậy chúng ta cần tìm ra α và β trước. Bây giờ, đối với bất kỳ đường thẳng nào-
y = m * x + c
Cho- A = (ax, ay) , B = (bx, by) , và O = (ox, oy) . Vì vậy, đối với dòng 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)
Theo cách tương tự, đối với dòng OB -
tan β = (by - oy) / (bx - ox) ...(eqn-3)
Bây giờ, chúng ta cần ϴ = β - α
. Trong lượng giác, chúng ta có một công thức-
tan (β-α) = (tan β + tan α) / (1 - tan β * tan α) ...(eqn-4)
Sau khi thay thế giá trị của tan α
(từ eqn-2) và tan b
(từ eqn-3) trong eqn-4 và áp dụng đơn giản hóa, chúng tôi nhận được-
tan (β-α) = ( (ax-ox)*(by-oy)+(ay-oy)*(bx-ox) ) / ( (ax-ox)*(bx-ox)-(ay-oy)*(by-oy) )
Vì thế,
ϴ = β-α = tan^(-1) ( ((ax-ox)*(by-oy)+(ay-oy)*(bx-ox)) / ((ax-ox)*(bx-ox)-(ay-oy)*(by-oy)) )
Đó là nó!
Bây giờ, hãy xem hình sau-
Phương thức C # hoặc, Java này tính toán gó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;
}