2009-12-31 36 views
7

Tôi đang nghiên cứu toán học cho trình theo dõi tia, nhưng tôi không theo dõi quá trình chuyển đổi được thực hiện chỉ trong mỗi bài viết tôi đã đọc về chủ đề này. Đây là những gì tôi có:Làm thế nào để thiết lập phương trình bậc hai cho giao điểm ray/cầu?

Formula cho một quả cầu:

(X - Cx)^2 + (Y - Cy)^2 + (Z - Cz)^2 - R^2 = 0

Trong đó R là bán kính, C là tâm và X, Y, Z là tất cả các điểm trong hình cầu.

Formula cho một dòng:

X + DxT, Y + DyT, Z + DZT

trong đó D là một vector hướng bình thường hóa cho các dòng và X, Y, Z là tất cả các điểm trên line, và T là một tham số cho một số điểm trên dòng.

Bằng cách thay thế các thành phần của dòng vào phương trình mặt cầu, chúng tôi nhận được:

(X + DxT - Cx)^2 + (Y + DyT - Cy)^2 + (Z + DZT - Cz)^2 - R^2 = 0

Tôi làm theo mọi thứ cho đến thời điểm đó (ít nhất là tôi nghĩ), nhưng sau đó mọi hướng dẫn tôi đã đọc sẽ chuyển từ đó sang phương trình bậc hai mà không giải thích nó (điều này được sao chép từ một trong các trang web, vì vậy các cụm từ hơi khác so với ví dụ của tôi):

A = Xd^2 + Yd^2 + Zd^2

B = 2 * (Xd * (X0 - Xc) + Yd * (Y0 - Yc) + Zd * (Z0 - Zc))

C = (X0 - Xc)^2 + (Y0 - Yc)^2 + (Z0 - Zc)^2 - Sr^2

Tôi nhận được cách giải quyết T bằng cách sử dụng công thức bậc hai, nhưng tôi không hiểu làm thế nào họ nhận được phương trình bậc hai từ các công thức trên. Tôi cho rằng đó chỉ là một phần của kiến ​​thức toán phổ biến mà tôi đã từ lâu quên, nhưng googling cho "Làm thế nào để thiết lập một phương trình bậc hai" đã không thực sự mang lại bất cứ điều gì một trong hai.

Tôi thực sự muốn hiểu cách thực hiện bước này trước khi tiếp tục, vì tôi không thích viết mã mà tôi không nắm bắt đầy đủ.

+0

Đó là một chút khó đọc tất cả các biểu tượng. Tôi nghĩ rằng tôi biết làm thế nào để trả lời câu hỏi của bạn, nhưng bạn có thể chỉ cho tôi một trong những hướng dẫn mà bạn đang gặp rắc rối với để tôi có thể cung cấp một số bối cảnh? Ngoài ra, bạn đã không hoàn thành câu ở giữa câu hỏi: "X, Y, Z là tất cả các điểm trên đường dây, và T là ...". –

+0

http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtinter1.htm http://www.codeproject.com/KB/graphics/Simple_Ray_Tracing_in_C_.aspx Có một phần ba, nhưng tôi không nghĩ rằng html cho trang web đang được hiển thị đúng, và một số phần của phương trình dường như bị thiếu, vì vậy tôi bỏ qua điều đó. Tôi vừa sửa xong câu chưa hoàn thành. –

+1

Câu hỏi có thể rõ ràng hơn nếu bạn phân biệt giữa X, Y, Z trong công thức cho một hình cầu (biến không xác định) và X, Y, Z trong công thức cho dòng (điểm đã biết trên dòng). Khi bạn thay thế đường thẳng vào hình cầu, bạn chuyển đổi từ một cặp phương trình với X, Y, Z và T chưa biết thành một phương trình với chỉ T chưa biết (có thể được giải quyết), nhưng sử dụng X, Y, Z trong phương trình thay thế chỉ ra rằng đây vẫn là những ẩn số. –

Trả lời

8

Từ đây:

(X + DxT - Cx)^2 + (Y + DyT - Cy)^2 + (Z + DzT - Cz)^2 - R^2 = 0 

Mở rộng ba phương ngữ, vì vậy bạn có một biểu dài:

X^2 + Dx^2T^2 + Cx^2 + 2XDxT - 2XCx - 2DxTCx + ...... = 0 

(Điều này là do sử dụng công thức (x+y+z)^2 = x^2 + y^2 + z^2 + 2xy + 2xz + 2yz)

Sau đó nhóm vì vậy bạn có các yếu tố của T^2, T và 1:

Các yếu tố này là A, B, C được nêu ở trên. Đây là một phương trình bậc hai cho T, và có thể được giải quyết bằng cách sử dụng công thức bậc hai.

+0

Điều đó xóa mọi thứ. Tôi ước họ sẽ chỉ nói rằng trong ít nhất một trong các bài báo. Có lẽ nó đã được một, mặc dù. Cảm ơn! –

11

Dưới đây là hướng dẫn chi tiết của từng bước; hy vọng điều này sẽ làm cho mọi thứ trở nên rõ ràng.Phương trình cho một quả cầu ba chiều là:

(x-a)^2 + (y-b)^2 + (z-c)^2 = r^2

với <a, b, c> là tâm của hình cầu và r bán kính của nó. Điểm <x, y, z> là trên hình cầu nếu nó thỏa mãn phương trình này.

Các phương trình tham số cho một ray là:

  • X = xo + xd*t
  • Y = yo + yd*t
  • Z = zo + zd*t

nơi <xo, yo, zo> là nguồn gốc của các tia, và <xd,yd,yd> là hướng camera ray.

Để tìm giao lộ, chúng tôi muốn xem điểm nào trên tia giống với điểm trên hình cầu. Vì vậy, chúng tôi thay thế phương trình ray vào phương trình mặt cầu:

(xo + xd*t - a)^2 + (yo + yd*t - b)^2 + (zo + zd*t - c)^2 = r^2

mà mở rộng để:

(xd^2 + yd^2 + zd^2)        * t^2 + 
    [2[xd * (xo - a) + yd * (yo - b) + zd *(zo - c)]] * t + 
    [(xo - a)^2 + (yo - b)^2 + (zo - c^)2 - r^2]  * 1 
    = 0 

Chú ý rằng đây là một phương trình bậc hai theo hình thức At^2 + Bt + C = 0, với:

  • A = (xd^2 + yd^2 + zd^2)
  • B = [2[xd * (xo - a) + yd * (yo - b) + zd *(zo - c)]]
  • C = [(xo - a)^2 + (yo - b)^2 + (zo - c^)2 - r^2]

Chúng ta có thể áp dụng công thức bậc hai chung của một biến không rõ, đó là:

t = [-B +- sqrt(B^2 - 4AC)]/2A 

Phần B^2 - 4AC được gọi là "biệt thức". Tùy thuộc vào giá trị của biệt thức, chúng tôi sẽ nhận được không, một hoặc hai giải pháp để phương trình này:

  • Nếu nó là nhỏ hơn không, giải pháp là một số ảo, và ray và lĩnh vực không cắt nhau trong mặt phẳng thực.

  • Nếu nó bằng 0, thì tia cắt hình cầu tại chính xác 1 điểm (chính xác là tiếp tuyến với hình cầu).

  • Nếu nó lớn hơn 0 thì tia sẽ cắt hình cầu ở chính xác 2 điểm.

Nếu phân biệt đối xử chỉ ra rằng không có giải pháp, thì bạn đã hoàn tất! Tia không cắt ngang hình cầu. Nếu phân biệt đối xử chỉ ra ít nhất một giải pháp, bạn có thể giải quyết cho t để xác định điểm giao nhau. Hai giải pháp là:

t_1 = [-B + sqrt(B^2 - 4AC)]/2A 
t_2 = [-B - sqrt(B^2 - 4AC)]/2A 

Giải pháp nhỏ hơn là điểm mà tia đầu tiên chạm vào hình cầu.

+0

Tôi ước tôi có thể đánh dấu hai câu hỏi là câu trả lời, vì đây thực sự là một phản ứng tuyệt vời. Trong khi người kia giải quyết câu hỏi trực tiếp hơn một chút, điều này thực sự giúp đặt những gì tôi đang cố gắng làm tốt hơn, và tôi thực sự đánh giá cao nó. Cảm ơn bạn rất nhiều vì đã dành thời gian và giúp đỡ, John. –

+0

Lưu ý: Nếu một trong hai giải pháp là số âm và giá trị kia là số dương, điều đó cho bạn biết rằng tia bắt nguồn từ _inside_ của hình cầu. (Bạn phải đi "lùi" để tìm một điểm giao cắt và "chuyển tiếp" để tìm điểm giao nhau.) –

+0

Chắc chắn chỉ có một điểm nếu nó bắt nguồn từ bên trong hình cầu? .. có phải bạn có nghĩa là nếu bạn quay trở lại từ điểm xuất phát của tia, bạn cũng sẽ thoát khỏi quả cầu? –

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