#!/usr/bin/env python3 import logging import math import sys try: import importlib.machinery danmaku2ass = importlib.machinery.SourceFileLoader('danmaku2ass', '../danmaku2ass.py').load_module('danmaku2ass') except (AttributeError, ImportError): import imp danmaku2ass = imp.load_source('danmaku2ass', '../danmaku2ass..py') extcode = 0 def main(): logging.basicConfig(level=logging.INFO) for Y in (120, 360): for X in (160, 480): for rotY in range(0, 361): for rotZ in range(0, 361): trX, trY, outX, outY, outZ, scaleX, scaleY = danmaku2ass.ConvertFlashRotation(rotY, rotZ, X=X, Y=Y, width=640, height=480) logging.info('(%3d, %3d), %4d, %4d => %4d, %4d, %4d, %4d%%' % (X, Y, rotY, rotZ, outX, outY, outZ, scaleX)) CompareMatrix(rotY, rotZ, outX, outY, outZ) def CompareMatrix(rotY, rotZ, outX, outY, outZ): def ApproxEqual(a, b, e=0.01): assert e >= 0 a_b = a-b if -e < a_b < e: return 0 else: return a_b def FormatError(i, j, l, r): global extcode if ApproxEqual(l, r) != 0: extcode = 1 logging.error('l[%s][%s]=%9.6f r[%s][%s]=%9.6f' % (i, j, l, i, j, r)) def sind(x): return math.sin(x*math.pi/180.0) def cosd(x): return math.cos(x*math.pi/180.0) l = cosd(rotY)*cosd(rotZ) r = -sind(outX)*sind(outY)*sind(outZ)+cosd(outY)*cosd(outZ) FormatError(0, 0, l, r) l = cosd(rotY)*sind(rotZ) r = -cosd(outX)*sind(outZ) FormatError(0, 1, l, r) l = sind(rotY) r = -sind(outX)*cosd(outY)*sind(outZ)-sind(outY)*cosd(outZ) FormatError(0, 2, l, r) l = -sind(rotZ) r = sind(outX)*sind(outY)*cosd(outZ)+cosd(outY)*sind(outZ) FormatError(1, 0, l, r) l = cosd(rotZ) r = cosd(outX)*cosd(outZ) FormatError(1, 1, l, r) l = 0 r = sind(outX)*cosd(outY)*cosd(outZ)-sind(outY)*sind(outZ) FormatError(1, 2, l, r) l = -sind(rotY)*cosd(rotZ) r = cosd(outX)*sind(outY) FormatError(2, 0, l, r) l = -sind(rotY)*sind(rotZ) r = -sind(outX) FormatError(2, 1, l, r) l = cosd(rotY) r = cosd(outX)*cosd(outY) FormatError(2, 2, l, r) if __name__ == '__main__': main() sys.exit(extcode)