2008-09-24 26 views
5

Tôi đang làm việc trên một vấn đề hình học đòi hỏi phải tìm giao điểm của hai vòng cung parabol trong bất kỳ vòng quay nào. Tôi đã có thể quan sát một đường thẳng và một vòng cung parabol bằng cách xoay mặt phẳng để căn chỉnh vòng cung với một trục, nhưng hai parabol không thể vừa với một trục. Tôi đang nghiên cứu về các công thức, nhưng tôi muốn biết liệu có một tài nguyên đã có sẵn cho điều này hay không.Mã hoặc công thức cho giao điểm của hai parabolas trong bất kỳ vòng quay

Trả lời

6

đầu tiên tôi muốn xác định phương trình cho arc parabol trong 2D mà không quay:

x(t) = ax² + bx + c 
    y(t) = t; 

Bây giờ bạn có thể áp dụng luân phiên bằng cách xây dựng một ma trận xoay:

s = sin(angle) 
    c = cos(angle) 

    matrix = | c -s | 
      | s c | 

Áp dụng ma trận đó và bạn sẽ nhận được phương trình tham số xoay:

x' (t) = x(t) * c - s*t; 
y' (t) = x(t) * s + c*t; 

Điều này sẽ cung cấp cho bạn hai phương trình (đối với x và y) của vòng cung parabol của bạn.

Làm điều đó cho cả vòng cung xoay của bạn và trừ chúng. Điều này cung cấp cho bạn một phương trình như sau:

xa'(t) = rotated equation of arc1 in x 
    ya'(t) = rotated equation of arc1 in y. 
    xb'(t) = rotated equation of arc2 in x 
    yb'(t) = rotated equation of arc2 in y. 
    t1 = parametric value of arc1 
    t2 = parametric value of arc2 

    0 = xa'(t1) - xb'(t2) 
    0 = ya'(t1) - yb'(t2) 

Mỗi phương trình này chỉ là một bậc 2 đa thức. Đây là những dễ dàng để giải quyết.

Để tìm điểm giao nhau bạn giải phương trình trên (ví dụ: tìm gốc).

Bạn sẽ nhận được tối đa hai gốc cho mỗi trục. Bất kỳ gốc nào bằng nhau trên x và y là một điểm giao nhau giữa các đường cong.

Bắt vị trí dễ dàng ngay bây giờ: Chỉ cần cắm gốc vào phương trình tham số của bạn và bạn có thể trực tiếp nhận x và y.

+0

Làm thế nào để bạn giải quyết hệ phương trình này trong C++ (do đó không phải với các hàm Matlab sẵn có) http://math.stackexchange.com/questions/1894043/solve-squared-non-linear-system-with-two -equations –

+0

@ Mr.Sheep Xin lỗi, tôi sẽ không hướng dẫn bạn giải pháp. Tôi cũng chưa bao giờ sử dụng Matlab để tôi có thể giúp ở đây. –

+0

Tôi sẽ tìm ra, tuy nhiên tôi thực sự đánh giá cao giải pháp của bạn ở đây- cảm ơn bạn. –

1

Thật không may, câu trả lời chung yêu cầu giải pháp của đa thức bậc bốn. Nếu chúng ta biến đổi tọa độ sao cho một trong hai parabolas ở dạng chuẩn y = x^2, thì parabola thứ hai thỏa mãn (ax + by)^2 + cx + dy + e == 0. Để tìm giao lộ, hãy giải quyết đồng thời cả hai. Thay thế trong y = x^2, chúng ta thấy kết quả là đa thức bậc bốn: (ax + bx^2)^2 + cx + dx^2 + e == 0. Giải pháp Nils do đó sẽ không hoạt động (sai lầm của mình: mỗi một là đa thức bậc 2 trong mỗi biến riêng biệt, nhưng cùng nhau chúng không).

1

Thật dễ dàng nếu bạn có CAS trong tầm tay.

Xem giải pháp trong Mathematica.

Chọn một parabol và thay đổi tọa độ để phương trình của nó trở thành y (x) = a x^2 (Biểu mẫu thông thường).

Các parabol khác sẽ có dạng tổng quát:

A x^2 + B x y + CC y^2 + DD x + EE y + F == 0 

where B^2-4 A C ==0 (so it's a parabola) 

Hãy giải quyết một trường hợp số:

p = {a -> 1, A -> 1, B -> 2, CC -> 1, DD -> 1, EE -> -1, F -> 1}; 
p1 = {[email protected]@Reduce[ 
     (A x^2 + B x y + CC y^2 + DD x + EE y +F /. {y -> a x^2 } /. p) == 0, x]} 

{{x -> -2,11769}, {x -> -0,641445}, {x -> 0,379567- 0,76948 I}, {x -> 0,379567+ 0.76.948 Tôi}}

Hãy cốt truyện nó:

Show[{ 
    Plot[a x^2 /. p, {x, -10, 10}, PlotRange -> {{-10, 10}, {-5, 5}}], 
    ContourPlot[(A x^2 + B x y + CC y^2 + DD x + EE y + F /. p) == 
    0, {x, -10, 10}, {y, -10, 10}], 
    Graphics[{ 
    PointSize[Large], Pink, Point[{x, x^2} /. p /. p1[[1]]], 
    PointSize[Large], Pink, Point[{x, x^2} /. p /. p1[[2]]] 
    }]}] 

enter image description here

Các giải pháp chung liên quan đến tính gốc rễ của:

4 A F + 4 A DD x + (4 A^2 + 4 a A EE) x^2 + 4 a A B x^3 + a^2 B^2 x^4 == 0 

nào được thực hiện dễ dàng trong bất kỳ CAS.

Các vấn đề liên quan