class Mapper:
def __init__(self, old_ul, old_lr, new_ul, new_lr):
self.old_ul = old_ul
self.old_lr = old_lr
self.new_ul = new_ul
self.new_lr = new_lr
self.old_diff = Point(old_lr.x - old_ul.x,
old_ul.y - old_lr.y)
self.new_diff = Point(new_lr.x - new_ul.x,
new_ul.y - new_lr.y)
def map(self, pt):
nx = (self.old_lr.x+pt.x) * (self.new_diff.x/self.old_diff.x) + self.new_ul.x
ny = (self.old_ul.y+pt.y) * (self.new_diff.y/self.old_diff.y) + self.new_lr.y
return Point(nx, ny)
def main(args):
pixelToReal = Mapper(Point(0, 0), Point(600, 600), Point(-2, 2), Point(2, -2))
realToPixel = Mapper(Point(-2, 2), Point(2, -2), Point(0, 0), Point(600, 600))
print(pixelToReal.map(Point(300,300))) # prints 0.0,0.0
print(realToPixel.map(pixelToReal.map(Point(300,300)))) # prints 300,300
for x in range(0,630, 30):
for y in range(0,630, 30):
print(pixelToReal.map(Point(x,y)))
Mapper의 생성자는 원래의 왼쪽 위 및 오른쪽 아래 모서리와 새로운 왼쪽 위 및 오른쪽 아래 모서리를 가져옵니다. Mapper.map()은 원래 공간에서 새로운 공간으로 점을 변환합니다.
그러나 파이썬에서 조심해야한다! 사람들이 정수로 보낼 가능성이 매우 높으며 부서가 잔인하게 반올림됩니다. 이것을 시도하려면 명시 적으로 분자를 실수로 변환해야합니다. (xFraction이라고도 부르며, 실제로 백분율입니다). 또한 실제로 -2. + 1.993333 범위를 생성 할 것입니다. 이는 아마도 충분히 근접 할 것입니다. –
'from __future__ import division'? – jrennie