mirror of
https://github.com/open-goal/jak-project.git
synced 2024-11-27 00:10:31 +00:00
a13b0dce45
Fixes #3063
279 lines
7.3 KiB
Python
279 lines
7.3 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from numpy.polynomial.polynomial import Polynomial
|
|
|
|
# 1:1 - 1.00 - 500x500
|
|
# 5:4 - 1.25 - 640x512
|
|
# 4:3 - 1.33 - 640x480
|
|
# 3:2 - 1.50 - 480x320
|
|
# 16:10 - 1.60 - 640x400
|
|
# 16:9 - 1.78 - 640x360
|
|
# 1.85:1 - 1.85 - 640x346
|
|
# 21:9 - 2.33 - 640x274
|
|
# 2.35:1 - 2.35 - 640x272
|
|
# 2.39:1 - 2.39 - 640x267
|
|
# 32:9 - 3.56 - 1280x360
|
|
|
|
# (ml "progress-pc")
|
|
# (pc-set-window-size 500 500)
|
|
# (set! (-> *progress-process* 0 left-x-offset) 20)
|
|
# (set! (-> *progress-process* 0 right-x-offset) 20)
|
|
# (set! *PC-CROSS-X-ADJUST* -20.0)
|
|
# (set! *PC-CROSS-Y-ADJUST* -20.0)
|
|
# (set! *PC-SQUARE-X-ADJUST* -20.0)
|
|
# (set! *PC-SQUARE-Y-ADJUST* -20.0)
|
|
|
|
values = [
|
|
{
|
|
'aspect': 1.00,
|
|
'left': 20,
|
|
'right': -33,
|
|
'cross-x': -20.0,
|
|
'cross-y': -20.0,
|
|
'square-x': -5.0,
|
|
'square-y': -10.0,
|
|
'triangle-x': 0.0,
|
|
'triangle-y': 0.0,
|
|
'circle-x': 0.0,
|
|
'circle-y': 0.0,
|
|
'percent-x': 0.0,
|
|
'autosave-x': 0.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 1.25,
|
|
'left': 4,
|
|
'right': -6,
|
|
'cross-x': -5.0,
|
|
'cross-y': 0.0,
|
|
'square-x': 0.0,
|
|
'square-y': 0.0,
|
|
'triangle-x': 0.0,
|
|
'triangle-y': 0.0,
|
|
'circle-x': 0.0,
|
|
'circle-y': 0.0,
|
|
'percent-x': 0.0,
|
|
'autosave-x': 0.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 1.33,
|
|
'left': 0,
|
|
'right': 0,
|
|
'cross-x': 0.0,
|
|
'cross-y': 0.0,
|
|
'square-x': 0.0,
|
|
'square-y': 0.0,
|
|
'triangle-x': 0.0,
|
|
'triangle-y': 0.0,
|
|
'circle-x': 0.0,
|
|
'circle-y': 0.0,
|
|
'percent-x': 0.0,
|
|
'autosave-x': 0.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 1.5,
|
|
'left': -6,
|
|
'right': 12,
|
|
'cross-x': 5.0,
|
|
'cross-y': 0.0,
|
|
'square-x': 5.0,
|
|
'square-y': 0.0,
|
|
'triangle-x': 0.0,
|
|
'triangle-y': 0.0,
|
|
'circle-x': 0.0,
|
|
'circle-y': 0.0,
|
|
'percent-x': 12.0,
|
|
'autosave-x': 10.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 1.60,
|
|
'left': -10,
|
|
'right': 18,
|
|
'cross-x': 8.0,
|
|
'cross-y': 5.0,
|
|
'square-x': 5.0,
|
|
'square-y': 0.0,
|
|
'triangle-x': 0.0,
|
|
'triangle-y': 0.0,
|
|
'circle-x': 0.0,
|
|
'circle-y': 0.0,
|
|
'percent-x': 12.0,
|
|
'autosave-x': 10.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 1.78,
|
|
'left': -14,
|
|
'right': 26,
|
|
'cross-x': 15.0,
|
|
'cross-y': 10.0,
|
|
'square-x': 8.0,
|
|
'square-y': 10.0,
|
|
'triangle-x': 0.0,
|
|
'triangle-y': 0.0,
|
|
'circle-x': 0.0,
|
|
'circle-y': 0.0,
|
|
'percent-x': 15.0,
|
|
'autosave-x': 10.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 1.85,
|
|
'left': -16,
|
|
'right': 29,
|
|
'cross-x': 17.0,
|
|
'cross-y': 10.0,
|
|
'square-x': 8.0,
|
|
'square-y': 10.0,
|
|
'triangle-x': 0.0,
|
|
'triangle-y': 0.0,
|
|
'circle-x': 0.0,
|
|
'circle-y': 0.0,
|
|
'percent-x': 15.0,
|
|
'autosave-x': 10.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 2.33,
|
|
'left': -25,
|
|
'right': 45,
|
|
'cross-x': 30.0,
|
|
'cross-y': 20.0,
|
|
'square-x': 15.0,
|
|
'square-y': 15.0,
|
|
'triangle-x': 2.0,
|
|
'triangle-y': 5.0,
|
|
'circle-x': 2.0,
|
|
'circle-y': -7.0,
|
|
'percent-x': 18.0,
|
|
'autosave-x': 15.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 2.35,
|
|
'left': -26,
|
|
'right': 46,
|
|
'cross-x': 30.0,
|
|
'cross-y': 20.0,
|
|
'square-x': 15.0,
|
|
'square-y': 15.0,
|
|
'triangle-x': 2.0,
|
|
'triangle-y': 5.0,
|
|
'circle-x': 2.0,
|
|
'circle-y': -7.0,
|
|
'percent-x': 18.0,
|
|
'autosave-x': 15.0,
|
|
'orb-x': 0.0,
|
|
'orb-glow-x': 0.0,
|
|
'orb-text-x': 0.0,
|
|
'cell-x': 0.0,
|
|
'cell-text-x': 0.0,
|
|
'buzzer-text-x': 0.0,
|
|
'options-text-x': 0.0
|
|
},
|
|
{
|
|
'aspect': 3.56,
|
|
'left': -37,
|
|
'right': 65,
|
|
'cross-x': 45.0,
|
|
'cross-y': 25.0,
|
|
'square-x': 17.0,
|
|
'square-y': 15.0,
|
|
'triangle-x': 3.0,
|
|
'triangle-y': 5.0,
|
|
'circle-x': 5.0,
|
|
'circle-y': -10.0,
|
|
'percent-x': 25.0,
|
|
'autosave-x': 18.0,
|
|
'orb-x': 5.0,
|
|
'orb-glow-x': 4.0,
|
|
'orb-text-x': 10.0,
|
|
'cell-x': -10.0,
|
|
'cell-text-x': 2.0,
|
|
'buzzer-text-x': -5.0,
|
|
'options-text-x': 3.0
|
|
},
|
|
]
|
|
|
|
adjustments = [
|
|
'left', 'right', 'cross-x', 'cross-y', 'square-x', 'square-y', 'triangle-x', 'triangle-y', 'circle-x', 'circle-y', 'percent-x', 'autosave-x', 'orb-x', 'orb-glow-x', 'orb-text-x', 'cell-x', 'cell-text-x', 'buzzer-text-x', 'options-text-x'
|
|
]
|
|
|
|
aspect_ratio_values = []
|
|
for dataset in values:
|
|
aspect_ratio_values.append(dataset['aspect'])
|
|
aspect_ratios = np.array(aspect_ratio_values)
|
|
|
|
def check_return_value(aspect_ratio, coefs):
|
|
return coefs[0] + coefs[1] * aspect_ratio + coefs[2] * aspect_ratio**2
|
|
|
|
for adjust in adjustments:
|
|
# collect the values
|
|
data_values = []
|
|
for dataset in values:
|
|
data_values.append(dataset[adjust])
|
|
np_values = np.array(data_values)
|
|
# polynomial regression to interpolate between values
|
|
poly = Polynomial.fit(aspect_ratios, np_values, 3)
|
|
coefficients = poly.convert().coef
|
|
# produce a goal function to represent this polynomial
|
|
# if the aspect-ratio is close within a threshold we use that
|
|
function_string = ""
|
|
function_string += f"(defun pc-sprite-adjust-{adjust} ((aspect-ratio float))\n"
|
|
function_string += f" (cond\n"
|
|
for aspect_ratio, value in zip(aspect_ratios, data_values):
|
|
function_string += f" ((fequal-epsilon? aspect-ratio {aspect_ratio} 0.01) {value:.1f})\n"
|
|
function_string += f" (else\n (+ {coefficients[0]}\n (* {coefficients[1]} aspect-ratio)\n (* {coefficients[2]} aspect-ratio aspect-ratio)\n (* {coefficients[3]} aspect-ratio aspect-ratio aspect-ratio)))))\n"
|
|
print(function_string)
|