import math
import matplotlib.pyplot as plt
import random

class R2:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __add__(self, v):
        r = R2(0, 0)
        r.x = self.x + v.x
        r.y = self.y + v.y
        return r
    def __sub__(self, v):
        r = R2(0, 0)
        r.x = self.x - v.x
        r.y = self.y - v.y
        return r
    def __mul__(self, s):
        r = R2(0, 0)
        r.x = self.x*s
        r.y = self.y*s
        return r
    def __str__(self):
        return "(" + str(self.x) + ", " + str(self.y) + ")"
    def norm(self):
        return (self.x**2 + self.y**2)**0.5
    def get(self):
        return self.x, self.y
def cross(v, w):
    s = v.x*w.y - v.y*w.x
    return s
    
class R2R2:
    def __init__(self, theta):
        self.m11 = math.cos(theta)
        self.m12 = math.sin(theta)
        self.m21 = -math.sin(theta)
        self.m22 = math.cos(theta)
    def __mul__(self, v):
        if type(v) == R2:
            r = R2(0, 0)
            r.x = self.m11*v.x + self.m12*v.y
            r.y = self.m21*v.x + self.m22*v.y
            return r
        elif type(v) == R2R2:
            m = R2R2(0)
            m.m11 = self.m11*v.m11 + self.m12*v.m21
            m.m12 = self.m11*v.m12 + self.m12*v.m22
            m.m21 = self.m21*v.m11 + self.m22*v.m21
            m.m22 = self.m21*v.m12 + self.m22*v.m22
            return m
        else:
            m = R2R2(0)
            m.m11 = self.m11*v
            m.m12 = self.m12*v
            m.m21 = self.m21*v
            m.m22 = self.m22*v
            return m
        return r
    def __str__(self):
        return "(" + str(self.m11) + "," + str(self.m12) + ":" + str(self.m21) + "," + str(self.m22) + ")"


for i in range(25): # 課題1 の固定分
    mm = R2R2(0)
    mm.m11 = random.random()
    mm.m12 = random.random()
    mm.m21 = random.random()
    mm.m22 = random.random()
    mmI = mm.inverse()
    print(mm*mmI) # 課題4，逆行列の計算

def lineBetween(a, b, N): # 課題2, 関数の作成
    lx = []
    ly = []
    return lx, ly

lrx, lry = lineBetween(R2(0.1, 0.2), R2(0.4, 0.95), 128) # 課題3


fig = plt.figure() # 画像を生成
ax = fig.add_subplot() # 1行1列の描画領域を宣言. ax.scatter(lx, ly) # 散布図を描画
ax.set_aspect(1) # アスペクト比を1に設定 plt.show() # 画面へ描画
plt.xlim(0, 1) # 表示領域の設定
plt.ylim(0, 1) # 表示領域の設定
