Làm cách nào để chuyển đổi từ không gian tọa độ toàn cầu sang không gian cục bộ?


13

Với một thực thể có tên EntityA, tôi muốn xác định một không gian tọa độ cục bộ, trong đó vị trí của EntityAlà gốc, vectơ tiêu đề của nó là trục X và bình thường của vectơ tiêu đề là trục Y:

mô tả hình ảnh của cùng

Với tọa độ toàn cầu của chúng, làm cách nào để tìm vị trí của một thực thể khác trong EntityAkhông gian cục bộ?

Một ví dụ: EntityAvị trí toàn cầu là (50,50) và vị trí đó EntityBlà (80,90). Vậy đâu là vị trí của EntityBtrong EntityAcủa không gian địa phương?

EDIT: Hãy đi dễ dàng trên toán học.

Câu trả lời:


21

Được rồi, vì vậy Giả sử bạn biết ma trận Biến đổi thế giới cho đối tượng A đó là gì, Bạn chỉ cần xây dựng nghịch đảo của ma trận đó và bạn sẽ có những gì bạn cần.

Giả sử ma trận xoay, chia tỷ lệ và dịch của đối tượng A được sử dụng để đưa nó vào Không gian toàn cầu lần lượt là R , ST. Bạn sẽ nhân những thứ này lại với nhau như

S * R * T = W

Bây giờ, lấy W và tìm nghịch đảo W ^ -1 bằng cách nào đó. Nghịch đảo của một ma trận là ma trận đó làm ngược lại. Tích của ma trận với nghịch đảo của nó luôn là ma trận danh tính.

W * W ^ -1 = tôi

do đó W ^ -1 = I / W ;

Bây giờ Áp dụng ma trận nghịch đảo này khi chuyển đổi thế giới cho cảnh và mỗi đối tượng sẽ ở tọa độ bạn muốn.

Để nhân ma trận, xem trang này. Đối với ma trận danh tính, xem điều này.

Dưới đây là một trang khác mà cung cấp cho bạn các ma trận bạn sẽ cần phải thực hiện W .

Trong câu hỏi ở trên, bạn nên dịch theo trục x là 50, dịch theo trục y là 50, không chia tỷ lệ theo một trong hai trục và xoay mà bạn chưa chỉ định.


Cảm ơn câu trả lời nhưng tôi thực sự không hiểu nhiều về điều này. Không giỏi môn toán lắm. Với là một ma trận? Bạn có ý nghĩa gì khi 'ma trận xoay, chia tỷ lệ và dịch thuật'?
Manila Cohn

Một Matrix là một cách rất nhỏ gọn của đại diện cho một tập hợp các số liên quan đến nhau hoặc đối tượng. Trong đồ họa Máy tính, chúng được sử dụng rộng rãi để tính toán. kiểm tra liên kết cuối cùng trong câu trả lời để biết ý của tôi khi dịch Xoay và ma trận mở rộng.yes, bạn sẽ phải đọc tất cả điều đó. Mặt khác, bạn có thể sử dụng phương pháp của tro cốt để giải quyết vấn đề của mình, nhưng điều đó sẽ không chiếm được sự xoay vòng và nhân rộng của EntityA, nếu có.
The Spark Spark

9

Tôi đã làm điều này với lượng giác thay vì ma trận trong quá khứ (Tôi là một ma trận noob). Câu trả lời của Ashes999 là nửa chừng, lấy vectơ tương đối, sau đó xoay nó theo góc nghịch đảo của EntityA.

   relativeX = B.x - A.x
   relativeY = B.y - A.y
   rotatedX = Cos(-Angle) * relativeX - Sin(-Angle) * relativeY
   rotatedY = Cos(-Angle) * relativeY + Sin(-Angle) * relativeX

2
+1 Trực quan hơn và dễ sử dụng lượng giác hơn so với ma trận.
Ramowderra Apte

Còn quy mô thì sao? Khi nào bạn áp dụng nó?
Llamageddon

Xin lỗi, có nghĩa là luân chuyển.
Llamageddon

6

Hãy để tôi thử cung cấp cho bạn một cái gì đó ở đâu đó giữa câu trả lời của The Light Spark và câu trả lời của Elliot, bởi vì từ những gì tôi đọc được, bạn thực sự đang tìm kiếm một thuật toán để theo dõi chứ không chỉ là toán học ném vào bạn.

Báo cáo sự cố: Cho rằng bạn có một vị trí A (50, 50)và một tiêu đề (vì bạn không cung cấp một vị trí, tôi sẽ khẳng định nó là y = 2 * x + 25), tìm vị trí B (80, 90)có liên quan đến Avà tiêu đề.

Những gì bạn muốn làm là thực sự khá đơn giản. 1) Di chuyển Ađến nguồn gốc của hệ thống của bạn. Điều này chỉ đơn giản có nghĩa là các Agiá trị cục bộ sẽ là giá trị vị trí toàn cầu trừ đi các giá trị vị trí toàn cầu A. Atrở thành (0, 0)Btrở thành (30, 40).

1.1) Tiêu đề cũng cần phải được di chuyển. Đây thực sự là một việc rất dễ thực hiện, bởi vì phần chặn y Atheo thuật ngữ địa phương luôn là 0 và độ dốc sẽ không thay đổi, vì vậy chúng tôi có y = 2 * xtiêu đề.

2) Bây giờ chúng ta cần căn chỉnh tiêu đề trước với trục X. Vì vậy, làm thế nào để chúng tôi làm điều này? Cách dễ nhất, về mặt khái niệm để làm điều này là chuyển đổi từ tọa độ x, y sang hệ tọa độ cực. Hệ thống tọa độ cực bao gồm R, khoảng cách đến một vị trí và phigóc quay từ trục x. Rđược định nghĩa là sqrt(x^2 + y^2)phiđược định nghĩa là atan(y / x). Hầu hết các ngôn ngữ máy tính ngày nay đều đi trước và xác định một atan2(y, x)chức năng thực hiện chính xác điều tương tự atan(y/x)nhưng thực hiện theo cách mà đầu ra có xu hướng từ -180 độ đến 180 độ thay vì 0 độ đến 360 độ, nhưng đều hoạt động.

Bdo đó trở thành R = sqrt(30^2 + 40^2) = sqrt(2500) = 50, và phi = atan2(40, 30) = 53.13theo độ.

Tương tự, tiêu đề bây giờ thay đổi. Điều này hơi khó để giải thích, nhưng bởi vì tiêu đề, theo định nghĩa, luôn đi qua nguồn gốc của chúng tôi A, chúng tôi không cần phải lo lắng về Rthành phần này. Tiêu đề luôn sẽ theo hình thức phi = Cnơi Clà một hằng số. Trong trường hợp này, phi = atan(2 * x / x) = atan(2) = 63.435độ.

Bây giờ, chúng ta có thể xoay hệ thống để di chuyển tiêu đề sang trục X của Ahệ thống cục bộ . Giống như khi chúng ta chuyển Ađến nguồn gốc của hệ thống, tất cả những gì chúng ta phải làm là trừ đi phitiêu đề khỏi tất cả các phigiá trị trong hệ thống. Vì vậy, phicác Bthành 53.13 - 63.435 = -10.305độ.

Cuối cùng, chúng ta phải chuyển đổi ngược ra khỏi tọa độ cực thành tọa độ x, y. Công thức để thực hiện chuyển đổi đó là X = R * cos(phi)Y = R * sin(phi). Đối Bdo đó, chúng tôi nhận X = 50 * cos(-10.305) = 49.2Y = 50 * sin(-10.305) = 8.9, vì vậy Btrong địa phương-to- Atọa độ gần (49,9).

Hy vọng rằng điều đó sẽ giúp, và đủ nhẹ về toán học để bạn theo dõi.


1

Bạn cần biết tư thế của Thực thể A trong không gian toàn cầu (x1, y1,), trong đó θ là hướng liên quan đến trục x.

Để chuyển đổi vị trí EntityB từ tọa độ tổng thể (x2, y2) sang tọa độ cục bộ (x2 ', y2'):


  1. Sử dụng biểu thức

Toàn cầu đến địa phương

x2' = (x2-x1)cosθ + (y2-y1)sinθ

y2' = -(x2-x1)sinθ + (y2-y1)cosθ

Địa phương đến toàn cầu

x2 = x2'cosθ - y2'sinθ + x1

y2 = x2'sinθ + y2'cosθ + y1

  1. Sử dụng ma trận:

    R = [cosθ   -sinθ
    
         sinθ    cosθ]
    
    A = [x1
         y1]
    
    B_global = [x2
                y2]
    
    B_local = [x2' 
               y2']

Toàn cầu đến địa phương

    B_local = inv(R) x (B_global - A)

Địa phương đến toàn cầu

    B_global = R x B_local + A

-2

Nói một cách đơn giản, thực thể B sẽ cần một tham chiếu đến thực thể A. Sau đó, bạn cần có sự khác biệt giữa vị trí A của thực thể và vị trí của thực thể B.


3
Tôi không hiểu làm thế nào điều này trả lời câu hỏi.
Anko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.