Normal Cone

Author

Eric W. Weisstein
August 13, 2026

This notebook downloaded from https://mathworld.wolfram.com/notebooks/Optimization/NormalCone.nb.

For more information, see Eric's MathWorld entry https://mathworld.wolfram.com/NormalCone.html.

\[Copyright]2026 Wolfram Research, Inc. except for portions noted otherwise

Illustration

At a vertex x of a convex polygon C, the normal cone is generated by the outward normals to the two incident edges.

Module[{coneColor, neutral, normal1, normal2, point, polygon, radius, setColor},
	polygon = {{-2, -1.3}, {1.2, -1.3}, {1.8, 0.2}, {0.6, 1.5}, {-1.6, 1.0}};
	point = polygon[[3]];
	normal1 = Normalize[{1.5, -0.6}];
	normal2 = Normalize[{1.3, 1.2}];
	radius = 1.55;
	neutral = LightDarkSwitched[Black, White];
	setColor = Blue;
	coneColor = Red;
	Graphics[{
		{Directive[coneColor, Opacity[0.16]], Disk[point, radius, {ArcTan @@ normal1, ArcTan @@ normal2}]},
		{Directive[setColor, Opacity[0.1]], Polygon[polygon]},
		{Directive[setColor, AbsoluteThickness[2]], Line[Append[polygon, First[polygon]]]},
		{Directive[coneColor, AbsoluteThickness[2.5]], Arrow[{point, point + 1.8 normal1}], Arrow[{point, point + 1.8 normal2}]},
		{Directive[neutral, PointSize[0.018]], Point[point]},
		Text[Style[TraditionalForm[C], 17, setColor, FontFamily -> "Times", FontSlant -> "Italic"], {-0.5, 0}],
		Text[Style[TraditionalForm[x], 17, neutral, FontFamily -> "Times", FontSlant -> "Italic", Background -> LightDarkSwitched[White]], point + {-0.14, -0.22}],
		Text[Style[TraditionalForm[Subscript[v, 1]], 16, coneColor, FontFamily -> "Times", Background -> LightDarkSwitched[White]], point + 1.44 normal1 + {0.08, -0.1}],
		Text[Style[TraditionalForm[Subscript[v, 2]], 16, coneColor, FontFamily -> "Times", Background -> LightDarkSwitched[White]], point + 1.44 normal2 + {0.04, 0.1}],
		Text[Style[TraditionalForm[Subscript[N, C][x]], 17, coneColor, FontFamily -> "Times", Background -> LightDarkSwitched[White]], point + {0.88, 0.08}]
	}]
]