Number of normals to a parabola from a given point

6.2k Views Asked by At

I know that from any point a maximum of three normals could be drawn to a parabola because the equation of normal is cubic. But I want to know the condition on the point for the number of normals

3

There are 3 best solutions below

6
On

Only two perpendicular tangents can be drawn from a point P on a parabola directrix ( standard result, need not be again proved). Taking this as given we complete the rectangle by drawing parallels to arrive at a unique opposite point inside point Q ... from which we conclude accordingly only 2 unique normals can be drawn from an arbitrary but inside point like Q.

enter image description here

4
On

If $(p_x,p_y)$ are the coordinates of a point off the parabola and we'd like the line from $(p_x,p_y)$ to the point $(x,x^2)$ on the parabola to be normal to the parabola, then we need:

$$ \begin{pmatrix}p_x \\ p_y\end{pmatrix} = \begin{pmatrix}x \\ x^2\end{pmatrix} + t \begin{pmatrix}-2x \\ 1\end{pmatrix}. $$

This defines a pair of equation from which we can eliminate $x$ to obtain a cubic in $t$:

$$ 0 = 4t^3 - 4(p_y+1)t^2 + (4 p_y+1) t + p_x^2 - p_y = 0 $$

The discriminant of a cubic equation tells how many roots there are:

$$ 0 = ax^3+bx^2+cx+d\\ \Delta=18abcd-4b^{3}d+b^{2}c^{2}-4ac^{3}-27a^{2}d^{2} $$

Then $\Delta > 0$ corresponds to 3 real roots, $\Delta < 0$ to 1 real root and 2 complex roots, and $\Delta = 0$ to multiple root with all roots real.

I don't know for the case $\Delta = 0$ whether there are two distinct roots (one with multiplicity 2) or one root with multiplicity 3. Maybe both could occur.

I plotted the sign of the discriminant, with the parabola and a grid of unit size overlayed. The grey regions correspond to positive discriminant (3 real roots), white regions to negative discriminant (1 real root).

parabola normal count

Here is the GLSL source code, for use with Fragmentarium:

#include "Progressive2D.frag"

vec3 color(vec2 p)
{
  float s = length(vec4(dFdx(p), dFdy(p)));
  if (p.y - s < p.x * p.x && p.x * p.x < p.y + s) return vec3(0.0);
  if (abs(mod(p.x + 0.5, 1.0) -0.5) < 0.5 * s) return vec3(0.5);
  if (abs(mod(p.y + 0.5, 1.0) -0.5) < 0.5 * s) return vec3(0.5);
  if ((abs(p.x) - s) * (abs(p.x) - s) < p.y &&
      p.y < (abs(p.x) + s) * (abs(p.x) + s)) return vec3(0.0);
  float a = 4.0;
  float b = -4.0 * (p.y + 1.0);
  float c = 4.0 * p.y + 1.0;
  float d = p.x * p.x - p.y;
  float discriminant
    = 18.0 * a * b * c * d
    - 4.0 * b * b * b * d
    + b * b * c * c
    - 4.0 * a * c * c * c
    - 27.0 * a * a * d * d;
  if (discriminant > 0.0) return vec3(0.7);
  if (discriminant < 0.0) return vec3(1.0);
                          return vec3(0.2);
}
2
On

Claude's technique can be extended slightly to find the the points and normal lines given a particular point off of the parabola. Using this, I obtained an animation of some of the normals.

enter image description here