import numpy as np import matplotlib.pyplot as plt import random def vector_3d(ax, s_p, vec, color = "red",arrow_length_ratio=0.05): ax.quiver(s_p[0], s_p[1], s_p[2], vec[0], vec[1], vec[2], color = color, length = 1, arrow_length_ratio=arrow_length_ratio) def descartes_3d(ax, ran_x, ran_y, ran_z, ax_title, x_label = "x", y_label = "y", z_label="z"): ax.set_xlabel(x_label, fontsize = 12) ax.set_ylabel(y_label, fontsize = 12) ax.set_zlabel(z_label, fontsize = 12) ax.set_xlim(ran_x[0], ran_x[1]) ax.set_ylim(ran_y[0], ran_y[1]) ax.set_zlim(ran_z[0], ran_z[1]) ax.set_title(ax_title, fontsize = 16) ax.grid() fig = plt.figure(figsize = (7, 7)) ax = fig.add_subplot(111, projection='3d') title1 = "Touhoku University 2023 Math qu.4 NO1" descartes_3d(ax, [-0.5, 1], [-0.5, 2.7], [-0.5, 0.7], title1) point_O = np.array([0, 0, 0]) point_A = np.array([2, 0, 0]) point_B = np.array([1,1,1]) point_C = np.array([1,2,3]) point_H = np.array([4/3,2/3,2/3]) point_Q = np.array([3/2,-1,1]) ax.text(-0.07,0,0,"O",fontsize="xx-large") ax.text(1,1,1,"B",fontsize="xx-large") ax.text(4/3,2/3,2/3,"H",fontsize="xx-large") ax.text(3/2+0.07,-1,1,"Q",fontsize="xx-large") vector_3d(ax, point_O, point_B, "red",0.05) vector_3d(ax, point_O, point_H, "red",0.05) vector_3d(ax, point_B, point_H+(-1*point_B), "red",0.05) for s in np.linspace(0,1,20): for t in np.linspace(0,1,20): if s+t <= 1: point_S=1/3*t*point_A+(2/3*t+s)*point_B r=random.random() g=random.random() b=random.random() vector_3d(ax,point_Q,point_S+(-1*point_Q),color=(r,g,b)) plt.show()