demo/pile_layout.py
2023-06-02 10:35:25 +08:00

54 lines
1.0 KiB
Python

import sys
import math
STATION_ICON_SIZE = 90
PILE_ICON_SIZE = 40
PILE_X_OFFSET = 200
ROW_RATE = 3
COL_RATE = 10
def matrix(n):
v = (n / (ROW_RATE * COL_RATE)) ** 0.5
r = int(round(ROW_RATE * v))
c = math.ceil(n / r)
return r, c
def station_pos(r):
A = (STATION_ICON_SIZE + PILE_ICON_SIZE) // 2
B = (STATION_ICON_SIZE - PILE_ICON_SIZE) // 2
return (0, (r - 1) * A - B)
def pile_pos(c, n):
A = STATION_ICON_SIZE + PILE_ICON_SIZE
lst = []
for i in range(n):
x = (i % c) * A + PILE_X_OFFSET
y = (i // c) * A
lst.append((x, y))
return lst
def link(c, n):
lst = []
for i in range(n):
if i % c != 0:
lst.append(i - 1, i)
else:
lst.append(-1, i)
return lst
def pile_layout(n):
r, c = matrix(n)
print(r, c)
print(station_pos(r))
print(pile_pos(c, n))
print(link(c, n))
def main():
if len(sys.argv) < 2:
print("test.py <n>")
return
pile_layout(int(sys.argv[1]))
if __name__ == '__main__':
main()