# Understanding NegativelyOrientedPoints and PositivelyOrientedPoints

Clear["Global*"];
SeedRandom[2];
p1 = RandomPolygon[{"Convex", 5}];
polypts = PolygonCoordinates@p1;
chmpts = (ConvexHullMesh[p1] // MeshPrimitives[#, 0] &) /.
Point :> Sequence;

g1 = MapThread[Text[#1, #2] &, {Range@Length@polypts, polypts}] //
Graphics;
g2 = MapThread[Text[#1, #2] &, {Range@Length@chmpts, chmpts}] //
Graphics;
Grid[{{Framed@g1, Spacer[10], Framed@g2}}]


The following inputs are returned unevaluated:

Through[{NegativelyOrientedPoints, PositivelyOrientedPoints}[polypts]]
Through[{NegativelyOrientedPoints, PositivelyOrientedPoints}[chmpts]]


Question

Aren't the chmpts (picture to the right above) oriented CCW i.e., positively oriented?

Observation (Few moments later)

where d is the dimension.

• If I correctly understand the documentation, in two dimensions NegativelyOrientedPoints/PositivelyOrientedPoints can be applied only to three points. For example, PositivelyOrientedPoints[chmpts[[1 ;; 3]]] produces True. Dec 7, 2023 at 15:46
• This is not as advertised.
– Syed
Dec 7, 2023 at 15:50
• Read Details: "In d dimensions, d+1 points p1,p2,…,pd+1 are negatively oriented if the determinant of the matrix {p2-p1,…,pd+1-p1} is negative". Of course, the documentation leaves much to be desired. Dec 7, 2023 at 15:53

If I correctly understand the documentation, in two dimensions NegativelyOrientedPoints/PositivelyOrientedPoints can be applied only to three points. For example, PositivelyOrientedPoints[chmpts[[1 ;; 3]]] produces True. You can consequently consider PositivelyOrientedPoints[chmpts[[2 ;; 4]]] and so on.
• Thanks. Partition[chmpts, 3, 1, 1] // Map[PositivelyOrientedPoints] returns {True, True, True, True, True} whereas Partition[polypts, 3, 1, 1] // Map[PositivelyOrientedPoints] does not.
• @Syed: In fact, these are PositveOrientedVectors/NegativeOrientedVectors. Dec 7, 2023 at 16:06
• Is PositiveOrientedVectors` a command in newer versions? I am running v12.2.0 on Win7-x64.