import numpy as np
import matplotlib.pyplot as plt
A = np.array([[-1, 0], [0, 1]])
theta = np.pi / 8
rot = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
A = rot.T @ A @ rot
npts = 51
v = np.array([-3, -2, -1, 0, 1, 2, 3])
x = np.linspace(-3, 3, npts)
y = x
X, Y = np.meshgrid(x, y)
xy = np.vstack((X.flatten(), Y.flatten()))
z = np.diag(xy.T @ A @ xy).reshape(npts, npts)
c = plt.contour(x, y, z, levels=v)
plt.show(block=False)
with open("quadhyp.dat", "w") as f:
for j in range(len(v)):
for i, seg in enumerate(c.allsegs[j]):
np.savetxt(f, seg, fmt='%f')
f.write('\n\n')