Làm thế nào để ánh xạ kết cấu vuông thành tam giác?


13

Tôi muốn tìm tọa độ kết cấu cho điểm P. Tôi có các đỉnh của tam giác và tọa độ uv tương ứng của chúng.

Các số trong các ô vuông nhỏ trong kết cấu đại diện cho các giá trị màu.

Các bước tính toán tọa độ uv của P là gì?

nhập mô tả hình ảnh ở đây


Có một phép biến đổi affine sẽ ánh xạ từng góc tới tọa độ kết cấu của nó, bạn có thể sử dụng phép đó để ánh xạ P tới tia cực tím của nó.
ratchet freak

@ratchetfreak bạn có thể cung cấp cho tôi một liên kết không?
john john

Có một bài viết hay về cách thực hiện phép tính điểm giao nhau cũng như tính toán dây nhị phân trong một lần trong bài viết này . Điều này về cơ bản là để biến đổi tam giác.
joojaa

Câu trả lời:


14

Điều này đạt được thông qua Nội suy Barycentric .

Đầu tiên, chúng tôi tìm tọa độ barycentric của . Các tọa độ nhị phân biểu thị trọng lượng của mỗi đỉnh đóng góp vào điểm và có thể được sử dụng để nội suy bất kỳ giá trị nào được biết tại các đỉnh trên mặt của một tam giác.P

Xét 3 tam giác bên trong , và .ABPPBCPCA

nhập mô tả hình ảnh ở đây

Chúng ta có thể nói rằng tọa độ nhị phân, hoặc trọng lượng của đỉnh trên điểm tỷ lệ với tỷ lệ diện tích của tam giác bên trong với diện tích của toàn bộ tam giác .APPBCABC

Điều này là hiển nhiên nếu chúng ta xem xét rằng khi tiến đến thì tam giác phát triển lớn hơn và hai hình kia trở nên nhỏ hơn.PAPBC

Ngoài ra bằng chứng trực giác nên là tổng các tọa độ nhị phân của một điểm bên trong một tam giác luôn bằng . Vì vậy, chỉ cần tìm hai trong số các tọa độ để lấy được thứ 3 là đủ.1

Phương pháp tính toán tọa độ barycentric là:

BaryA=(ByCy)(PxCx)+(CxBx)(PyCy)(ByCy)(AxCx)+(CxBx)(AyCy)BaryB=(CyAy)(PxCx)+(AxCx)(PyCy)(ByCy)(AxCx)+(CxBx)(AyCy)BaryC=1BaryABaryB

Đạo hàm và lý luận được giải thích trong bài viết trên wikipedia .

Khi bạn có tọa độ, bạn có thể xác định tọa độ kết cấu của bằng cách nội suy các giá trị tại các đỉnh bằng cách sử dụng tọa độ barycentric làm trọng số:P

Puv=BaryAAuv+BaryBBuv+BaryCCuv

Lý do cũng được giải thích rất độc đáo trong bài trình bày này .

Cũng xem câu hỏi này cho các phương pháp tính toán hiệu quả.


tôi có lỗi trong ? Thuật ngữ đầu tiên nên là hay tôi sai? ( A y - C y )BaryB(AyCy)
joojaa

@joojaa Tôi không nghĩ vậy. Nó giống như trong bài viết trên Wikipedia và có vẻ đúng từ một phép tính thử nghiệm mà tôi đã làm.
Rotem

(AyCy)ACy=(AyCy)

1
P
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.