From 7b44722056730d7e7f520b40000dd87eb4caf26b Mon Sep 17 00:00:00 2001 From: xdward <78007088+xdward@users.noreply.github.com> Date: Mon, 16 Jan 2023 18:58:31 -0500 Subject: [PATCH] Added generator for orthogonal projections (#417) --- mathgenerator/_gen_list.py | 1 + mathgenerator/algebra.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/mathgenerator/_gen_list.py b/mathgenerator/_gen_list.py index 6f0f36b..8d2b18a 100644 --- a/mathgenerator/_gen_list.py +++ b/mathgenerator/_gen_list.py @@ -127,4 +127,5 @@ gen_list = [ ("complementary_and_supplementary_angle", "geometry"), ("simplify_square_root", "basic_math"), ("line_equation_from_2_points", "algebra"), + ("orthogonal_projection", "algebra"), ] diff --git a/mathgenerator/algebra.py b/mathgenerator/algebra.py index 0133d0a..5120ee7 100644 --- a/mathgenerator/algebra.py +++ b/mathgenerator/algebra.py @@ -765,3 +765,27 @@ def vector_dot(min_val=-20, max_val=20): problem = rf'${a}\cdot{b}=$' solution = f'${c}$' return problem, solution + + +def orthogonal_projection(min_val=-10, max_val=10): + r"""Orthogonal Projection + + | Ex. Problem | Ex. Solution | + | --- | --- | + | Find the orthogonal projection of $[2, 3]$ onto $[4, -7]$ | $[\frac{-4}{5}, \frac{7}{5}]$ | + """ + v = [random.randint(min_val, max_val) for _ in range(2)] + u = [random.randint(min_val, max_val) for _ in range(2)] + dot_t = v[0] * u[0] + v[1] * u[1] + dot_b = u[0] * u[0] + u[1] * u[1] + frac = fractions.Fraction(dot_t, dot_b).limit_denominator() + y = [frac * u[0], frac * u[1]] + + if y[0].denominator != 1: + y[0] = rf'\frac{{{y[0].numerator}}}{{{y[0].denominator}}}' + if y[1].denominator != 1: + y[1] = rf'\frac{{{y[1].numerator}}}{{{y[1].denominator}}}' + + problem = f'Find the orthogonal projection of ${v}$ onto ${u}$' + solution = f'$[{y[0]}, {y[1]}]$' + return problem, solution