2022-06-15 12:20:45 +02:00
|
|
|
#!/usr/bin/python
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import math
|
|
|
|
|
|
|
|
f = open(sys.argv[1])
|
|
|
|
lines = [x.split() for x in f]
|
|
|
|
f.close()
|
|
|
|
|
2022-06-18 14:54:50 +02:00
|
|
|
res = int(sys.argv[2]) # pixel per unit
|
2022-06-15 12:20:45 +02:00
|
|
|
|
2022-06-18 14:54:50 +02:00
|
|
|
data = {(round(float(l[0])*res), round(float(l[1])*res)) : float(l[5]) for l in lines}
|
2022-06-15 12:20:45 +02:00
|
|
|
data[(0,0)] = 2.0
|
|
|
|
|
2022-06-18 14:54:50 +02:00
|
|
|
xmin = min([p[0] for p in data.keys()])
|
|
|
|
xmax = max([p[0] for p in data.keys()])
|
|
|
|
ymin = min([p[1] for p in data.keys()])
|
|
|
|
ymax = max([p[1] for p in data.keys()])
|
|
|
|
yrange=max([-ymin,ymax])
|
|
|
|
|
2022-06-15 12:20:45 +02:00
|
|
|
print("P3")
|
2022-06-18 14:54:50 +02:00
|
|
|
print("{dx:d} {dy:d}".format(dx=xmax-xmin+1, dy=2*yrange+1))
|
2022-06-15 12:20:45 +02:00
|
|
|
print("255")
|
|
|
|
|
2022-06-18 14:54:50 +02:00
|
|
|
for i in range(-yrange,yrange+1):
|
|
|
|
for j in range(xmin,xmax+1):
|
|
|
|
x = j
|
|
|
|
y = i if i >= ymin and i <= ymax else -i
|
2022-06-15 12:20:45 +02:00
|
|
|
|
2022-06-18 14:54:50 +02:00
|
|
|
if not (x,y) in data:
|
2022-06-15 12:20:45 +02:00
|
|
|
value = 0
|
|
|
|
else:
|
2022-06-18 14:54:50 +02:00
|
|
|
value = data[(x,y)]-1
|
2022-06-15 12:20:45 +02:00
|
|
|
|
|
|
|
value = 0 if value < 0 else 1 if value > 1 else value
|
|
|
|
|
2022-06-18 14:54:50 +02:00
|
|
|
r = round(255*value**0.5)
|
2022-06-15 12:20:45 +02:00
|
|
|
g = round(255*(value)**3)
|
2022-06-18 14:54:50 +02:00
|
|
|
b = round(255*(math.sin(2*math.pi*value)))
|
2022-06-15 12:20:45 +02:00
|
|
|
|
|
|
|
r = 0 if r < 0 else 255 if r > 255 else r
|
|
|
|
g = 0 if g < 0 else 255 if g > 255 else g
|
|
|
|
b = 0 if b < 0 else 255 if b > 255 else b
|
|
|
|
|
|
|
|
print("%d %d %d" % (r,g,b))
|