April Fool’s Day, and the Pythagorean Theorem
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Not everyone is a math person, but nearly everyone remembers the Pythagorean Theorem.
Well, not everyone. The Scarecrow got it wrong in the 1939 movie, “The Wizard of Oz”. It is arguable whether the writers accidentally or deliberately got it wrong, or whether the actor Ray Bolger flubbed the line. (See also Singh, “The Simpsons and Their Mathematical Secrets”, pp. 119-121.)
So here is a little Pythagorean Theorem problem. In the following right triangle, calculate C. A2 + B2 = C2, and then take the square root of C. How hard can it be?
Of course you have to know if A = (√-1), then A2 = (√-1)2 = -1, but that seems reasonable.
But does something seem wrong with the resulting value of C?
I plotted the triangle in a complex number plane, not a real number plane. (√-1) is not a “real” number, and perhaps it should be thought of as a non-real number. (I am intentionally avoiding the dreaded “i” word.) Perhaps what is happening is that in the complex plane, the hypotenuse C is really a line segment of magnitude zero, and hence a point? No, not “really”.
So April Fool’s. You calculated a hypotenuse of a right triangle and concluded it has length zero.
A better answer is that a point (x, y) in the complex plane is represented as x + yi, and the Euclidean distance between two complex points (x, y) and (u, v) equals √( (u – x)2 + (v – y)2 ) which here is the expected √2.
Here is the R code for the plot, followed by the Python code for the plot. Note that in R, the shading is done with geom_polygon, while in Python it is done with plt.fill_between:
library(ggplot2) # Define the vertices of the triangle triangle_data <- data.frame( x = c(0, 0, 1), # x-coordinates of vertices y = c(0, 1, 0) # y-coordinates of vertices ) ggplot(data = NULL) + geom_polygon(data = triangle_data, aes(x = x, y = y), fill = "#9B111E", color = "black") + geom_segment(aes(x = 0, y = 0, xend = 1, yend = 0), color = "black", size = 2) + geom_segment(aes(x = 0, y = 0, xend = 0, yend = 1), color = "black", size = 2) + geom_segment(aes(x = 0, y = 1, xend = 1, yend = 0), color = "black", size = 2) + ggtitle("Use the Pythagorean Theorem to calculate C") + xlab(expression(bold(A == sqrt(-1)))) + # Square root symbol for x-axis label ylab("B = 1") + # Label for y-axis geom_text(aes(x = 0.55, y = 0.55, label = "C = ?"), fontface = "bold", size = 6) + theme_classic() + theme( legend.position = "none", axis.line = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title.x = element_text(size = 20, face = "bold"), axis.title.y = element_text(size = 20, face = "bold"), plot.title = element_text(size = 20, face = "bold") )
import numpy as np import matplotlib.pyplot as plt # Create figure and axes fig, ax = plt.subplots() ax.set_title('Use the Pythagorean Theorem to calculate C', fontsize=15, fontweight='bold') # Define the points for the line x = [0, 1] y = [1, 0] # Plot the horizontal and vertical lines ax.axhline(y=0, color='black') # x-axis ax.axvline(x=0, color='black') # y-axis # Plot the diagonal line ax.plot(x, y, color='black', linewidth=1.5) # Fill the region enclosed by the axes and the line plt.fill_between(x, y, 0, color='#9B111E', alpha=0.5) # Add axis labels with bold and enlarged fonts ax.text(0.5, -0.05, r"$\mathbf{A = \sqrt{-1}}$", ha='center', va='center', fontsize=14, transform=ax.transAxes) ax.text(-0.05, 0.5, r"$\mathbf{B = 1}$", ha='center', va='center', fontsize=14, rotation=90, transform=ax.transAxes) # Add diagonal line label with bold text, enlarged font, and moved farther off the line ax.text(.6, .5, r"$\mathbf{C}$", ha='center', va='center', fontsize=14, color='black') # Turn off the axes' tick marks and spines ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') ax.spines['bottom'].set_color('none') ax.spines['left'].set_color('none') ax.tick_params(left=False, bottom=False, labelleft=False, labelbottom=False) # Display the plot plt.show()# end
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.