We usually think of quadrilaterals as squares, rectangles, parallelograms, trapezoids, rhombuses, or kites. (I was impressed that my four year-old granddaughter knew the last one, although she called it a diamond!) It could also be irregularly shaped with no name.
However, a polygon may intersect itself. A five-sided star is one example, where the sides are connected to alternating vertices.
A quarilateral may also intersect itself. In the following diagram, the original quadrilateral has points A (0,0), B (4,0), C (3,3), D (1,4). The self-intersecting quadrilateral is formed from the original quadrilateral by shifting point D from (1,4) to (2, -2), so side CD crosses AB).
This self-intersecting quadrilateral is still four-sided and closed, so it is no less a quadrilateral than the original.
Here is some R code:
# Self-intersecting quadrilateral
library(ggplot2)
# Define coordinates for original quadrilateral
original_quad <- data.frame(
x1 = c(0, 4, 3, 1),
y1 = c(0, 0, 3, 4),
x2 = c(4, 3, 1, 0),
y2 = c(0, 3, 4, 0),
group = c("AB", "BC", "CD", "DA"),
labels = c("A", "B", "C", "D")
)
# Define coordinates for self-intersecting quadrilateral
# Shift point D from (1,4) to (2, -2), so side CD crosses AB)
stretched_quad <- data.frame(
x1 = c(0, 4, 3, 2),
y1 = c(0, 0, 3, -2),
x2 = c(4, 3, 2, 0),
y2 = c(0, 3, -2, 0),
group = c("AB", "BC", "CD", "DA"),
labels = c("A", "B", "C", "D")
)
# Define colors for each side
color_map <- c("AB" = "red", "BC" = "blue", "CD" = "green", "DA" = "purple")
# Function to plot the quadrilateral
plot_quad <- function(data, title, x_lim, y_lim) {
ggplot(data) +
geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, color = group), size = 1.5) + # Draw each side
geom_point(aes(x = x1, y = y1), size = 3, color = "black") + # Show points
geom_text(aes(x = x1, y = y1, label = labels), vjust = -1, hjust = -0.5, size = 6, fontface = "bold") + # Label A, B, C, D
scale_color_manual(values = color_map) +
coord_fixed() +
xlim(x_lim[1], x_lim[2]) +
ylim(y_lim[1], y_lim[2]) +
theme_minimal() +
ggtitle(title)
}
# Expanded limits for full visibility
x_range <- c(-1, 7)
y_range <- c(-3, 7)
# Plot the original quadrilateral
p1 <- plot_quad(original_quad, "Original Quadrilateral", x_range, y_range)
# Plot the self-intersecting quadrilateral
p2 <- plot_quad(stretched_quad, "Self-Intersecting Quadrilateral", x_range, y_range)
# Display both plots
library(gridExtra)
grid.arrange(p1, p2, ncol = 2)
End