2010-08-10 6 views
11

chế biến có một chức năng tuyệt vời, tôi sử dụng tất cả các thời gian:Value Remapping

map(value, low1, high1, low2, high2) 

http://processing.org/reference/map_.html

Nó remaps value (có một phạm vi dự kiến ​​của low1 để high1) vào một loạt mục tiêu của low2-high2).

Tôi muốn hiểu toán học đằng sau nó để tôi có thể sử dụng nó bằng các ngôn ngữ khác. Bất cứ ai muốn ném cho tôi một xương và giúp tôi đảo ngược kỹ sư đó? Tôi hiểu rằng đó là một lerp đã được tái tỉ lệ và tái bù đắp ... cảm giác não đã chết sáng nay.

Trả lời

23

Từ mô tả của bạn, nó phải làm điều này, phải không?

low2 + (value - low1) * (high2 - low2)/(high1 - low1) 

Tìm khoảng cách bạn đạt đến phạm vi đầu tiên, chia tỷ lệ khoảng cách đó với tỷ lệ phạm vi và khoảng cách bạn sẽ ở trong phạm vi thứ hai.

+0

hoàn hảo, cảm ơn bạn – ack

+0

Sẽ không này hoàn toàn phá vỡ trong thực sự khá phổ biến trường hợp remapping từ 0..1 đến một phạm vi khác? Chia cho số không .. – metaleap

+0

@metaleap Tôi nghĩ bạn đã hiểu sai điều gì đó. Mẫu số là chiều rộng của khoảng, 1-0 = 1 trong trường hợp đó. – Cascabel

1

Tôi muốn thêm rằng đôi khi hữu ích khi tìm yếu tố giữa low1 và high1 để bạn có thể điều chỉnh nó bằng một đường cong trước khi sử dụng hệ số như là giá trị LERP's t.

Vì vậy, t = (giá trị-thấp1)/(high1-low1) để lấy vị trí tương đối của giá trị trong dòng từ 1 đến cao1.

Sau đó, bạn có thể điều chỉnh t với một số bộ lọc đường cong ví dụ: gamma, độ lệch, độ lợi, v.v. Cũng như kẹp t giữa 0 và 1 nếu bạn giới hạn giá trị vượt quá mức thấp nhất và mức cao nhất định.

Và sau đó sử dụng t cho LERP giữa low2 và high2 như: finalvalue = low2 * (1-t) + high2 * t