1

我有以下 python/pygame 代码:

import sys, pygame 
from array import * 
pygame.init() 

height = 600 
width = 800 

设置显示窗口

DISPLAYSURFACE = pygame.display.set_mode((width, height)) 
pygame.display.set_caption('Graphics Assignment Part 1') 

打开文件

file = open('F:\\school\\Graphics\\PIXA.DAT', 'r') 

将文件读入列表并关闭它

vlist = file.readlines() 
#close file 
file.close 
#remove last value from list 
del vlist[-1] 

将 vlist 中的值存储到点中,但将 J 更改为 JUMP 位并用 , 拆分整数

points = [list(map(int,v.split())) if v.strip().lower() != "j" else "JUMP" for v in vlist] 

设置循环以拆分vlist为 3 个 x、y、z 坐标列表列表

Xs,Ys,Zs= zip(*points) 
unique_Xs = [] 
[unique_Xs.append(val) for val in Xs if val != "J"] 
unique_Ys = [] 
[unique_Ys.append(val) for val in Ys if val != "U"] 
unique_Zs = [] 
[unique_Zs.append(val) for val in Zs if val != "M"] 
draw = list(zip(unique_Xs,unique_Ys)) 

将屏幕上的点列表绘制为一系列线条

drawing = pygame.draw.lines(DISPLAYSURFACE,(0,255,172),False, draw, 1) 

更新显示并退出 pygame

pygame.display.update() 
running = True 
while running: 
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            running = False

我正在读取坐标列表并将它们存储到 x、y、z 坐标列表中,以在 pygame 中绘制一组线。

我可以绘制图像,但是整个图像并没有显示在屏幕上,因为这些点在 -2000 到 2000 的范围内。

如何在我的 python 窗口中更改我的坐标范围以在我的 800x600 显示窗口中显示我的整个图像

4

1 回答 1

0

缩放和平移坐标。编写一个函数,将一个范围的值映射到另一个范围。请参阅将一系列值映射到另一个

def mapVal(val, amin, amax, bmin, bmax):
    return bmin + (val - amin) * (bmax - bmin) / (amax - amin)
Xs,Ys,Zs= zip(*points) 
   
unique_Xs = [mapVal(val, -2000, 2000, 0, 800) for val in Xs if val != "J"] 
unique_Ys = [mapVal(val, -2000, 2000, 0, 600) for val in Ys if val != "U"]  
unique_Zs = [val for val in Zs if val != "M"]

draw = list(zip(unique_Xs, unique_Ys)) 
于 2020-12-21T12:11:02.947 回答