2 added 96 characters in body
source | link

Here is a way to do this in 2d. Essentially you complement the convex hull with a new convex hull including the extra point:

SeedRandom[0]
p = RandomReal[{-1, 1}, {10, 2}];
hullpts = ConvexHullMesh[p]["VertexCoordinates"];
hulledges = ConvexHullMesh[p]["Edges"];
pref = {-1., 0.};
g1 = Graphics[{Point@p, {Red, Point[pref]}, 
   Line[hullpts[[#]]] & /@ hulledges}]

enter image description here

compute a new convex hull including the reference point:

new = ConvexHullMesh[Join[hullpts, {pref}]];
Show[{new, g1}]

enter image description here

find vertices on original hull that have been eliminated

(*find vertices on original hull that have been eliminated*)
dropped = Union@Flatten[Position[hullpts, #] & /@
     Complement[hullpts, new["VertexCoordinates"]]];
(*find the end points *)

find the end points

posref = Position[new["VertexCoordinates"], pref][[1, 1]];
endpoints = 
  Position[hullpts, #][[1, 1]] & /@ (new["VertexCoordinates"][[#]] & /@         
     DeleteCases[Union[Flatten[Select[new["Edges"] ,
         MemberQ[#, posref] &]]] , posref]);
seepoints = Join[ dropped , endpoints ];

find the edges connecting the found points:

seeedges = 
  Select[ hulledges , 
   MemberQ[seepoints, #[[1]]] && MemberQ[seepoints, #[[2]]] & ];
Graphics[{Point@p, {Red, Point[pref]}, 
  Line[hullpts[[#]]] & /@ hulledges,
  {Thick, Red, Line[hullpts[[#]]] & /@ seeedges}}]

enter image description here

the extension to 3d should be straightforward.

Here is a way to do this in 2d. Essentially you complement the convex hull with a new convex hull including the extra point:

SeedRandom[0]
p = RandomReal[{-1, 1}, {10, 2}];
hullpts = ConvexHullMesh[p]["VertexCoordinates"];
hulledges = ConvexHullMesh[p]["Edges"];
pref = {-1., 0.};
g1 = Graphics[{Point@p, {Red, Point[pref]}, 
   Line[hullpts[[#]]] & /@ hulledges}]

enter image description here

new = ConvexHullMesh[Join[hullpts, {pref}]];
Show[{new, g1}]

enter image description here

(*find vertices on original hull that have been eliminated*)
dropped = Union@Flatten[Position[hullpts, #] & /@
     Complement[hullpts, new["VertexCoordinates"]]];
(*find the end points *)
posref = Position[new["VertexCoordinates"], pref][[1, 1]];
endpoints = 
  Position[hullpts, #][[1, 1]] & /@ (new["VertexCoordinates"][[#]] & /@         
     DeleteCases[Union[Flatten[Select[new["Edges"] ,
         MemberQ[#, posref] &]]] , posref]);
seepoints = Join[ dropped , endpoints ];
seeedges = 
  Select[ hulledges , 
   MemberQ[seepoints, #[[1]]] && MemberQ[seepoints, #[[2]]] & ];
Graphics[{Point@p, {Red, Point[pref]}, 
  Line[hullpts[[#]]] & /@ hulledges,
  {Thick, Red, Line[hullpts[[#]]] & /@ seeedges}}]

enter image description here

the extension to 3d should be straightforward.

Here is a way to do this in 2d. Essentially you complement the convex hull with a new convex hull including the extra point:

SeedRandom[0]
p = RandomReal[{-1, 1}, {10, 2}];
hullpts = ConvexHullMesh[p]["VertexCoordinates"];
hulledges = ConvexHullMesh[p]["Edges"];
pref = {-1., 0.};
g1 = Graphics[{Point@p, {Red, Point[pref]}, 
   Line[hullpts[[#]]] & /@ hulledges}]

enter image description here

compute a new convex hull including the reference point:

new = ConvexHullMesh[Join[hullpts, {pref}]];
Show[{new, g1}]

enter image description here

find vertices on original hull that have been eliminated

dropped = Union@Flatten[Position[hullpts, #] & /@
     Complement[hullpts, new["VertexCoordinates"]]];

find the end points

posref = Position[new["VertexCoordinates"], pref][[1, 1]];
endpoints = 
  Position[hullpts, #][[1, 1]] & /@ (new["VertexCoordinates"][[#]] & /@         
     DeleteCases[Union[Flatten[Select[new["Edges"] ,
         MemberQ[#, posref] &]]] , posref]);
seepoints = Join[ dropped , endpoints ];

find the edges connecting the found points:

seeedges = 
  Select[ hulledges , 
   MemberQ[seepoints, #[[1]]] && MemberQ[seepoints, #[[2]]] & ];
Graphics[{Point@p, {Red, Point[pref]}, 
  Line[hullpts[[#]]] & /@ hulledges,
  {Thick, Red, Line[hullpts[[#]]] & /@ seeedges}}]

enter image description here

the extension to 3d should be straightforward.

1
source | link

Here is a way to do this in 2d. Essentially you complement the convex hull with a new convex hull including the extra point:

SeedRandom[0]
p = RandomReal[{-1, 1}, {10, 2}];
hullpts = ConvexHullMesh[p]["VertexCoordinates"];
hulledges = ConvexHullMesh[p]["Edges"];
pref = {-1., 0.};
g1 = Graphics[{Point@p, {Red, Point[pref]}, 
   Line[hullpts[[#]]] & /@ hulledges}]

enter image description here

new = ConvexHullMesh[Join[hullpts, {pref}]];
Show[{new, g1}]

enter image description here

(*find vertices on original hull that have been eliminated*)
dropped = Union@Flatten[Position[hullpts, #] & /@
     Complement[hullpts, new["VertexCoordinates"]]];
(*find the end points *)
posref = Position[new["VertexCoordinates"], pref][[1, 1]];
endpoints = 
  Position[hullpts, #][[1, 1]] & /@ (new["VertexCoordinates"][[#]] & /@         
     DeleteCases[Union[Flatten[Select[new["Edges"] ,
         MemberQ[#, posref] &]]] , posref]);
seepoints = Join[ dropped , endpoints ];
seeedges = 
  Select[ hulledges , 
   MemberQ[seepoints, #[[1]]] && MemberQ[seepoints, #[[2]]] & ];
Graphics[{Point@p, {Red, Point[pref]}, 
  Line[hullpts[[#]]] & /@ hulledges,
  {Thick, Red, Line[hullpts[[#]]] & /@ seeedges}}]

enter image description here

the extension to 3d should be straightforward.