我正在制作一个sim城市应用程序。在应用程序中,会有随机时间发生的事件。我希望用户能够放大该事件以获得详细视图。
在不放大的情况下,事件的位置只标记为X.如果用户放大,用户将能够看到事件的更多细节;即如果是车祸,放大用户会看到可能有2辆以上的车撞毁,还有一些动画等。
我希望缩放工作的方式是让用户能够暂停应用程序,将鼠标移动到事件的位置,滚动以放大/缩小。
答案 0 :(得分:2)
您可以使用3D-2D投影功能(方法)来处理缩放(以及透视),例如:
class Point3D:
def __init__(self, x = 0, y = 0, z = 0):
self.x, self.y, self.z = float(x), float(y), float(z)
...
def project(self, win_width, win_height, fov, viewer_distance, perspective):
"""
Transforms this 3D point to 2D using a perspective projection.
"""
if perspective:
factor = fov / (viewer_distance + self.z)
else:
factor = fov / viewer_distance
x = self.x * factor + win_width / 2
y = -self.y * factor + win_height / 2
return Point3D(x, y, self.z)
在这种情况下,参数viewer_distance用于缩放。