From b88d5558eac084f406d0eb7bcfe81f0c27bd961a Mon Sep 17 00:00:00 2001 From: Yukti Khosla <44090430+Yukti-09@users.noreply.github.com> Date: Sat, 15 Aug 2020 16:33:25 +0530 Subject: [PATCH 1/4] Create Transformations2D.py --- linear_algebra/src/Transformations2D.py | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 linear_algebra/src/Transformations2D.py diff --git a/linear_algebra/src/Transformations2D.py b/linear_algebra/src/Transformations2D.py new file mode 100644 index 000000000000..792431ba2b61 --- /dev/null +++ b/linear_algebra/src/Transformations2D.py @@ -0,0 +1,41 @@ +#2D matrices used for linear transformation in linear algebra + +import numpy as np +import math + +class Transformations: + + def scaling(self,scaling_factor): + return(scaling_factor*(np.identity(2))) #This returns a scaling matrix + + def rotation(self,angle): + arr = np.empty([2, 2]) + + arr[0][0] = math.cos(angle) + arr[0][1] = -math.sin(angle) + arr[1][0] = math.sin(angle) + arr[1][1] = math.cos(angle) + + return arr #This returns a rotation matrix + + + def projection(self,angle): + arr = np.empty([2, 2]) + + arr[0][0] = math.cos(angle)*math.cos(angle) + arr[0][1] = math.sin(angle)*math.cos(angle) + arr[1][0] = math.sin(angle)*math.cos(angle) + arr[1][1] = math.sin(angle)*math.sin(angle) + + return arr #This returns a rotation matrix + + + def reflection(self,angle): + arr = np.empty([2, 2]) + + arr[0][0] = (2*math.cos(angle)) -1 + arr[0][1] = 2*math.sin(angle)*math.cos(angle) + arr[1][0] = 2*math.sin(angle)*math.cos(angle) + arr[1][1] = (2*math.sin(angle)) -1 + + return arr #This returns a reflection matrix From dea2a398f2cadd057314678b8cabde0fc1c74270 Mon Sep 17 00:00:00 2001 From: Yukti Khosla <44090430+Yukti-09@users.noreply.github.com> Date: Sat, 15 Aug 2020 17:43:51 +0530 Subject: [PATCH 2/4] Update Transformations2D.py --- linear_algebra/src/Transformations2D.py | 52 ++++++++++++------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/linear_algebra/src/Transformations2D.py b/linear_algebra/src/Transformations2D.py index 792431ba2b61..618603861f68 100644 --- a/linear_algebra/src/Transformations2D.py +++ b/linear_algebra/src/Transformations2D.py @@ -1,41 +1,41 @@ -#2D matrices used for linear transformation in linear algebra +#2D Transformations are regularly used in Linear Algebra. + +#I have added the codes for reflection, projection, scaling and rotation matrices. import numpy as np import math -class Transformations: +def scaling(scaling_factor): + return(scaling_factor*(np.identity(2))) #This returns a scaling matrix - def scaling(self,scaling_factor): - return(scaling_factor*(np.identity(2))) #This returns a scaling matrix +def rotation(angle): + arr = np.empty([2, 2]) - def rotation(self,angle): - arr = np.empty([2, 2]) + arr[0][0] = math.cos(angle) + arr[0][1] = -math.sin(angle) + arr[1][0] = math.sin(angle) + arr[1][1] = math.cos(angle) - arr[0][0] = math.cos(angle) - arr[0][1] = -math.sin(angle) - arr[1][0] = math.sin(angle) - arr[1][1] = math.cos(angle) + return arr #This returns a rotation matrix - return arr #This returns a rotation matrix - - def projection(self,angle): - arr = np.empty([2, 2]) +def projection(angle): + arr = np.empty([2, 2]) - arr[0][0] = math.cos(angle)*math.cos(angle) - arr[0][1] = math.sin(angle)*math.cos(angle) - arr[1][0] = math.sin(angle)*math.cos(angle) - arr[1][1] = math.sin(angle)*math.sin(angle) + arr[0][0] = math.cos(angle)*math.cos(angle) + arr[0][1] = math.sin(angle)*math.cos(angle) + arr[1][0] = math.sin(angle)*math.cos(angle) + arr[1][1] = math.sin(angle)*math.sin(angle) - return arr #This returns a rotation matrix + return arr #This returns a rotation matrix - def reflection(self,angle): - arr = np.empty([2, 2]) +def reflection(angle): + arr = np.empty([2, 2]) - arr[0][0] = (2*math.cos(angle)) -1 - arr[0][1] = 2*math.sin(angle)*math.cos(angle) - arr[1][0] = 2*math.sin(angle)*math.cos(angle) - arr[1][1] = (2*math.sin(angle)) -1 + arr[0][0] = (2*math.cos(angle)) -1 + arr[0][1] = 2*math.sin(angle)*math.cos(angle) + arr[1][0] = 2*math.sin(angle)*math.cos(angle) + arr[1][1] = (2*math.sin(angle)) -1 - return arr #This returns a reflection matrix + return arr #This returns a reflection matrix From e6aa3dccc0724ee835dc33d9a65e1d11ca6cad3d Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sat, 15 Aug 2020 18:10:45 +0200 Subject: [PATCH 3/4] Drop numpy and add type hints and doctests --- linear_algebra/src/Transformations2D.py | 103 ++++++++++++++---------- 1 file changed, 62 insertions(+), 41 deletions(-) diff --git a/linear_algebra/src/Transformations2D.py b/linear_algebra/src/Transformations2D.py index 618603861f68..9ee238fd7999 100644 --- a/linear_algebra/src/Transformations2D.py +++ b/linear_algebra/src/Transformations2D.py @@ -1,41 +1,62 @@ -#2D Transformations are regularly used in Linear Algebra. - -#I have added the codes for reflection, projection, scaling and rotation matrices. - -import numpy as np -import math - -def scaling(scaling_factor): - return(scaling_factor*(np.identity(2))) #This returns a scaling matrix - -def rotation(angle): - arr = np.empty([2, 2]) - - arr[0][0] = math.cos(angle) - arr[0][1] = -math.sin(angle) - arr[1][0] = math.sin(angle) - arr[1][1] = math.cos(angle) - - return arr #This returns a rotation matrix - - -def projection(angle): - arr = np.empty([2, 2]) - - arr[0][0] = math.cos(angle)*math.cos(angle) - arr[0][1] = math.sin(angle)*math.cos(angle) - arr[1][0] = math.sin(angle)*math.cos(angle) - arr[1][1] = math.sin(angle)*math.sin(angle) - - return arr #This returns a rotation matrix - - -def reflection(angle): - arr = np.empty([2, 2]) - - arr[0][0] = (2*math.cos(angle)) -1 - arr[0][1] = 2*math.sin(angle)*math.cos(angle) - arr[1][0] = 2*math.sin(angle)*math.cos(angle) - arr[1][1] = (2*math.sin(angle)) -1 - - return arr #This returns a reflection matrix +""" +2D Transformations are regularly used in Linear Algebra. + +I have added the codes for reflection, projection, scaling and rotation 2D matrices. + + scaling(5) = [[5.0, 0.0], [0.0, 5.0]] + rotation(45) = [[0.5253219888177297, -0.8509035245341184], + [0.8509035245341184, 0.5253219888177297]] +projection(45) = [[0.27596319193541496, 0.446998331800279], + [0.446998331800279, 0.7240368080645851]] +reflection(45) = [[0.05064397763545947, 0.893996663600558], + [0.893996663600558, 0.7018070490682369]] +""" +from math import cos, sin +from typing import List + + +def scaling(scaling_factor: float) -> List[List[float]]: + """ + >>> scaling(5) + [[5.0, 0.0], [0.0, 5.0]] + """ + scaling_factor = float(scaling_factor) + return [[scaling_factor * int(x == y) for x in range(2)] for y in range(2)] + + +def rotation(angle: float) -> List[List[float]]: + """ + >>> rotation(45) # doctest: +NORMALIZE_WHITESPACE + [[0.5253219888177297, -0.8509035245341184], + [0.8509035245341184, 0.5253219888177297]] + """ + c, s = cos(angle), sin(angle) + return [[c, -s], [s, c]] + + +def projection(angle: float) -> List[List[float]]: + """ + >>> projection(45) # doctest: +NORMALIZE_WHITESPACE + [[0.27596319193541496, 0.446998331800279], + [0.446998331800279, 0.7240368080645851]] + """ + c, s = cos(angle), sin(angle) + cs = c * s + return [[c * c, cs], [cs, s * s]] + + +def reflection(angle: float) -> List[List[float]]: + """ + >>> reflection(45) # doctest: +NORMALIZE_WHITESPACE + [[0.05064397763545947, 0.893996663600558], + [0.893996663600558, 0.7018070490682369]] + """ + c, s = cos(angle), sin(angle) + cs = c * s + return [[2 * c - 1, 2 * cs], [2 * cs, 2 * s - 1]] + + +print(f" {scaling(5) = }") +print(f" {rotation(45) = }") +print(f"{projection(45) = }") +print(f"{reflection(45) = }") From 391455eb4fe1c9483e0df06b453cf4bedc08822c Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sat, 15 Aug 2020 18:11:42 +0200 Subject: [PATCH 4/4] Rename Transformations2D.py to transformations_2d.py --- .../src/{Transformations2D.py => transformations_2d.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename linear_algebra/src/{Transformations2D.py => transformations_2d.py} (100%) diff --git a/linear_algebra/src/Transformations2D.py b/linear_algebra/src/transformations_2d.py similarity index 100% rename from linear_algebra/src/Transformations2D.py rename to linear_algebra/src/transformations_2d.py