Hoạt hình một chuyển đổi tuyến tính trơn tru


7

Sau khi xem video này trên ma trận, tôi đã cố gắng tạo ra một hình ảnh động đơn giản về các phép biến đổi tuyến tính 2D. Bắt đầu với một tập hợp các điểm 2D trong một lưới, tôi áp dụng ma trận 2x2 cho mỗi điểm và thu được một tập hợp các điểm được chuyển đổi.

Tôi không chắc làm thế nào để làm sinh động quá trình chuyển đổi giữa trạng thái ban đầu và trạng thái cuối cùng. Lúc đầu, tôi làm cho mỗi điểm di chuyển dọc theo đường thẳng giữa vị trí ban đầu và cuối cùng của nó. Điều này gây ra vấn đề cho ma trận xoay. Ví dụ: 180 xoay sẽ hiển thị các điểm xoay quanh gốc tọa độ trong các cung tròn, nhưng phương pháp của tôi làm cho nó trông giống như toàn bộ lưới được lật xung quanh, mà không quay.

Một hình ảnh động xoay tốt hơn có thể được thực hiện bằng cách áp dụng một vòng quay rất nhỏ, giả sử 1, nhiều lần. Ma trận cho 1 xoay gần với ma trận danh tính:

[0.99980.01750.01750.9998]

Có một số công thức chung có thể tạo ra một ma trận biến đổi vi phân, được đưa ra ma trận biến đổi đầy đủ không? Tôi muốn nó hoạt động cho bất kỳ ma trận 2x2 nào, mà không cần chỉ định loại chuyển đổi.


2
Có nhưng do sự không ổn định về số lượng, cuối cùng nó sẽ bị lệch. Tôi nên tra cứu các ghi chú bài giảng của mình, chưa xem lại điều này sau khi tôi ngừng giảng dạy.
joojaa

Nó sẽ nghiêng cho bất kỳ loại chuyển đổi, hoặc chỉ những loại quá lớn?
Vermillion

2
Một ma trận biến đổi chỉ nắm bắt kết quả cuối cùng của một phép biến đổi, chứ không phải "làm thế nào nó đạt được". Ma trận quay 180 ° theo một hướng, ma trận xoay 180 ° theo hướng khác và ma trận lật lưới, được chia tỷ lệ theo (-1, -1), tất cả đều giống nhau.
Quinchilion

Ý nghĩ đầu tiên xuất hiện trong đầu tôi là bạn có thể đưa ma trận vào một phép biến đổi Möbius và sau đó ghi lại số lượng. vi.wikipedia.org/wiki/ Kẻ
MB Reynold

Tôi đã không nghe nói về sự chuyển đổi Möbius trước đây, cảm ơn bạn!
Vermillion

Câu trả lời:


6

Theo nguyên tắc chung, bạn không thể nội suy các ma trận biến đổi. Thay vào đó, bạn phân tách chúng thành các giá trị riêng lẻ của chúng, sau đó nội suy chúng và biên dịch lại.

Phép biến đổi Möbius như được đề xuất trong các bình luận nghe có vẻ thú vị, nhưng theo truyền thống, tôi chỉ cần trích xuất tỷ lệ và xoay và nội suy chúng.

Giả sử ma trận biến đổi

    | a  b |
T = | c  d |
  • các quy mô[sqrt(a² + c²), sqrt(b² + d²)]
  • Các góc xoayatan(c/a)

Bây giờ bạn sẽ nội suy tỷ lệ và góc xoay này, biên dịch lại ma trận ở mỗi khung.

[Chỉnh sửa] Đã sửa góc (như được phát hiện bởi Nathan Reed) [/ Chỉnh sửa]


2
Không nên là góc atan(c/a)? (Hoặc tốt hơn atan2(c, a), nếu ngôn ngữ của bạn hỗ trợ điều đó.) Ngoài ra, đáng chú ý điều này giả định rằng ma trận không bao gồm cắt. Nếu có, bạn có thể thử trích xuất phần đó và nội suy nó một cách riêng biệt.
Nathan Reed

1
Trong ma trận xoay thuần, c = sin ( t ) và cả ad bằng cos ( t ). Vì vậy, có thể cả hai câu trả lời của bạn làm việc?
Vermillion

1
Cảm ơn @NathanReed, vì đã sửa góc! Và thực sự, điều này không tính đến. Tôi đã từng làm việc trong 3D là chúng ta thường có thể thoát khỏi việc bỏ qua cắt, nhưng trong các phép biến đổi 2D tôi đoán rằng cắt được sử dụng thường xuyên hơn nhiều.
Paul-Jan

@Vermillion: thực sự, đối với ma trận xoay thuần túy chúng giống nhau, nhưng đối với ma trận tỷ lệ thì tỷ lệ khác nhau trên mỗi cột (vì vậy nếu bạn muốn sử dụng phần tử d thay thế, trước tiên bạn cần tính toán tỷ lệ và làm một cái gì đó như atan ( (sx / sy) * c / d).
Paul-Jan
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.