2010-06-15 32 views

Trả lời

16

Tôi có thể nghĩ đến một vài trường hợp khác nhau mà bạn có thể hỏi.


Given: Một hệ thống tồn tại trước đó phối hợp

  • Trong một hệ thống 2D, rìu của bạn/cơ sở luôn [1,0][0,1]-xy trục.

  • Trong một hệ thống 3D, rìu của bạn/cơ sở luôn [1,0,0], [0,1,0], và [0,0,1]-x, y, và z.


Given: Một trục trong một 2D tùy ý-cơ sở phối hợp hệ thống

Nếu bạn có một trục trong một 2D tùy ý-cơ sở hệ tọa độ, trục khác là vector trực giao.

Để xoay một vector trực giao truy cập chiều kim đồng hồ:

[x_new, y_new] = [ -y_old, x_old] 

Để xoay một vector trực giao chiều kim đồng hồ:

[x_new, y_new] = [ y_old, -x_old] 

Để tóm tắt:

Given: x-axis = [ a, b] 
Then: y-axis = [-b, a] 

Given: y-axis = [ c, d] 
Then: x-axis = [ d, -c] 

Given: Hai trục trong một tùy ý-cơ sở 3D phối hợp hệ thống

Để thực hiện điều này, hãy tìm các sản phẩm chéo.

[a,b,c] x [d,e,f] = [ b*f - c*e, c*d - a*f, a*e - b*d ] 

Tiếp theo những ba nguyên tắc:

  • (x trục) x (y trục) = (z trục)
  • (y trục) x (z trục) = (x trục)
  • (z trục) x (x trục) = (y trục)

Given: Một trục trong một 3D tùy ý-cơ sở phối hợp hệ thống

Có không đủ thông tin để tìm thấy giải pháp duy nhất vấn đề này là. Điều này là do, nếu bạn nhìn vào trường hợp thứ hai (Một trục trong một hệ tọa độ 2D tùy ý), trước tiên bạn cần phải tìm một vectơ trực giao. Tuy nhiên, có một lượng vô hạn các vector trực giao có thể có với một trục duy nhất trong không gian 3D!

Tuy nhiên, bạn có thể tìm thấy một trong các giải pháp khả thi.

Một cách để tìm thấy một tùy ý một trong những vectơ trực giao bằng cách tìm bất kỳ vector [d,e,f] nơi:

[a,b,c] = original axis 
[d,e,f] = arbitrary orthogonal axis (cannot be [0,0,0]) 

a*d + b*e + c*f = 0 

Ví dụ, nếu trục ban đầu của bạn là [2,3,4], bạn muốn giải quyết:

2 * d + 3 * e + 4 * f = 0 

Tức là, bất kỳ giá trị nào của [d,e,f] thỏa mãn điều này là một vectơ trực giao thỏa đáng (miễn là nó không phải là [0,0,0]). Người ta có thể lựa chọn, ví dụ, [3,-2,0]:

2 * 3 + 3 *-2 + 4 * 0 = 0 
    6 + -6 + 0 = 0 

Như bạn thấy, một trong những "công thức" mà làm việc đến là [d,e,f] = [b,-a,0] ... nhưng có rất nhiều những người khác có thể làm việc tốt; có, trên thực tế, một vô hạn!

Khi bạn tìm thấy hai bạn trục [a,b,c][d,e,f], bạn có thể giảm trở lại này đối với trường hợp trước đó (trường hợp 3), sử dụng [a,b,c][d,e,f] như x và y rìu của bạn (hoặc bất kỳ trục bạn cần họ để được, ví của bạn vấn đề cụ thể).


Normalization

Lưu ý rằng, khi bạn liên tục làm các sản phẩm và các sản phẩm chấm chéo, vectơ của bạn sẽ bắt đầu phát triển lớn hơn và lớn hơn. Tùy thuộc vào những gì bạn muốn, điều này có thể không được mong muốn. Ví dụ: bạn có thể muốn các vectơ cơ sở của mình (các trục tọa độ) cho tất cả đều có cùng kích thước/chiều dài.

Để bật bất kỳ vector (trừ [0,0,0]) vào một vector đơn vị (một vector với chiều dài 1, theo hướng tương tự như các vector gốc):

r = [a,b,c] 
v = Sqrt(a^2 + b^2 + c^2) <-- this is the length of the original vector 
r' = [ a/v , b/v , c/v ] 

đâu r' đại diện cho đơn vị vector của r - một véc tơ có độ dài 1 điểm theo cùng một hướng với r. Một ví dụ:

r = [1,2,3] 
v = Sqrt(1^2 + 2^2 + 3^2) = Sqrt(13) = 3.60555 <-- this is the length of the original vector 
r' = [0.27735, 0.55470, 0.83205] 

Bây giờ, nếu tôi muốn, ví dụ, một vector trong cùng một hướng của r với chiều dài 5, tôi chỉ đơn giản là nhân ra r' * 5, đó là [a' * 5, b' * 5, c' * 5].

+0

Nếu anh ấy sử dụng phần mềm mô phỏng hoặc trò chơi, anh ấy có thể xoay đối tượng, điều này sẽ giúp việc tìm kiếm hai trục khác đủ dễ dàng. – LanceH

+2

Câu hỏi là trung thực khá mơ hồ =/ –

+0

Vì vậy, tóm lại sau đó Justin: Đầu tiên bạn sử dụng quy tắc sản phẩm chấm rằng hai vectơ trực giao có một sản phẩm dấu chấm bằng không, để lấy trục thứ hai. Sau đó sử dụng sản phẩm chéo của hai trục này để lấy trục thứ ba. Tôi hiểu tất cả điều này. Câu hỏi duy nhất tôi có là làm thế nào để bạn có được trục trực giao tùy ý nói vectơ của {4.418020, -6.474061, -6.210284} – Stoff81

0

Bạn đang nói về một hệ thống 3coordinate điển hình như hệ thống được sử dụng trong công cụ 3D?

Chỉ với một véc tơ bạn không thể tìm thấy hai thứ kia, thông tin duy nhất bạn sẽ có nó trên mặt phẳng mà chúng nằm .. nhưng chúng có thể ở bất kỳ góc nào nếu chúng vuông góc với một vector duy nhất bạn có.

3

Chỉ có một trục là không đủ, vì vẫn còn một số lượng vô hạn các trục có thể nằm trong mặt phẳng vuông góc.

Nếu bạn quản lý để có được một trục khác, bạn có thể sử dụng sản phẩm chéo để tìm thứ ba.

+0

Làm thế nào có thể đúng là "Chỉ có một trục là không đủ" khi bạn ngay lập tức nói rằng có vô số vectơ phù hợp và trong đoạn tiếp theo của bạn nói làm thế nào để tiến hành cho rằng một vector phù hợp đã được tìm thấy? – sigfpe

+6

Đừng làm cho tôi liên kết đến mục nhập trên "if" tại dictionary.reference.com ... –

1

Nếu bạn có một véc tơ (x, y, z), bạn có thể nhận được một vectơ vuông góc với nó như (y, -x, 0) (dot-product là x yy x + 0 * z = 0)

Sau đó, bạn lấy sản phẩm chéo của cả hai để có được vectơ vuông góc còn lại: (x, y, z) × (y, -x, 0) = (0y + zx, ​​yz-0x, -x²- y²) = (zx, yz, -x²-y²)

+2

Cho (x, y, z) = (0,0,1). Vectơ (y, -x, 0) là (0,0,0). Đó là một vector không. – sigfpe

+0

@ user207442: Mô tả sự cố cho biết vectơ không được căn chỉnh với trục. Nếu (x, y, z) = (0,0,1) thì tìm hai vectơ kia là tầm thường. – Ozan

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