7

I ran in the last few days into a problem which I was afraid I couldn't solve: I use a set of 12 points in 3D to define a region and test whether and if how many other points lie inside this region. I used ConvexHull[] on the 12 points to define the region and then simply RegionMember[] for the test.

However, for certain positions of these 12 points the kernel just shut down, without running into RAM problems. Is this a known issue? I use here Mathematica 10.2. Just to be able to test this here is an example code which kills everytime my kernel:

(*8x 12points after a lengthy computation*)
test={{{1.`, 1.`, 5333.333333333333`}, {1.`, 800.`,5333.333333333333`},{600.5`, 400.5`, 0.`}, {600.5`, 400.5`,5333.333333333333`},{1200.`,1.`,5333.333333333333`}, {1200.`, 800.`, 5333.333333333333`},{58042.552333112566`, -38206.400563704345`, 19374.67514613655`},{58334.25743941619`, -38734.91563377405`, 18851.24324830685`}, {58525.314741500944`, -38713.1081147315`, 19545.52131899129`}, {58716.372043585696`, -38691.30059568895`,20239.79938967573`}, {59008.07714988933`, -39219.81566575865`, 19716.36749184603`}, {62483.79825981317`, -35344.65017352293`,18350.38794651614`}},
{{1.`, 1.`,5333.333333333333`}, {1.`, 800.`,5333.333333333333`}, {600.5`,400.5`, 0.`}, {600.5`, 400.5`, 5333.333333333333`}, {1200.`, 1.`,5333.333333333333`}, {1200.`, 800.`, 5333.333333333333`}, {25869.10601275226`,-20033.469429356493`, 10006.45364321929`},{26269.363331591725`, -20404.815082668127`,9423.103418669753`}, {26554.859683382878`, -20246.27216215559`,10065.253304186597`}, {26840.35603517403`, -20087.729241643054`,10707.403189703442`}, {27240.613354013494`, -20459.074894954687`,10124.052965153904`}, {28180.172063134924`, -15530.123404949865`,8178.259660165485`}},
{{1.`, 1.`,-5333.333333333333`}, {1.`, 800.`, -5333.333333333333`}, {600.5`,400.5`, -5333.333333333333`}, {600.5`, 400.5`, 0.`}, {1200.`, 1.`, -5333.333333333333`}, {1200.`, 800.`, -5333.333333333333`}, {62483.79825981317`,-35344.65017352293`, -18350.38794651614`}, {62743.673933721235`,-30067.648628019182`, -19374.67514613655`}, {63347.238653729575`,-30056.261042864524`, -18851.24324830685`}, {63423.809574513405`,-30232.656492513917`, -19545.52131899129`}, {63500.380495297235`,-30409.05194216331`, -20239.79938967573`}, {64103.945215305575`,-30397.664357008656`, -19716.36749184603`}},
{{1.`, 1.`, -5333.333333333333`}, {1.`, 800.`, -5333.333333333333`}, {600.5`, 400.5`, -5333.333333333333`}, {600.5`, 400.5`, 0.`}, {1200.`, 1.`, -5333.333333333333`}, {1200.`,800.`, -5333.333333333333`}, {28180.172063134924`, -15530.123404949865`, -8178.259660165485`}, {30926.38377214352`, -11278.127055695275`, -10006.45364321929`}, {31448.041575476618`, -11439.299794518214`, -9423.10341866975`}, {31453.354516395335`, -11765.820539938006`, -10065.253304186597`}, {31458.66745731405`, -12092.341285357797`, -10707.403189703442`}, {31980.32526064715`, -12253.514024180738`, -10124.052965153904`}}, 
{{1.`, 1.`,5333.333333333333`}, {1.`, 800.`, 5333.333333333333`}, {600.5`, 400.5`, 0.`}, {600.5`, 400.5`, 5333.333333333333`}, {1200.`, 1.`, 5333.333333333333`}, {1200.`, 800.`, 5333.333333333333`}, {62483.79825981317`, -35344.65017352293`, 18350.38794651614`}, {65959.51936973701`, -31469.48468128722`, 16984.40840118625`}, {66251.22447604063`, -31997.999751356918`, 16460.976503356556`}, {66442.2817781254`, -31976.192232314366`, 17155.25457404099`}, {66633.33908021015`, -31954.384713271815`, 17849.532644725427`}, {66925.04418651378`, -32482.89978334152`, 17326.100746895732`}},
{{1.`, 1.`, 5333.333333333333`}, {1.`, 800.`, 5333.333333333333`}, {600.5`, 400.5`, 0.`}, {600.5`, 400.5`,5333.333333333333`}, {1200.`, 1.`, 5333.333333333333`}, {1200.`, 800.`, 5333.333333333333`}, {28180.172063134924`, -15530.123404949865`, 8178.259660165485`}, {29119.730772256356`, -10601.171914945044`, 6232.466355177065`}, {29519.988091095816`, -10972.517568256677`, 5649.116130627529`}, {29805.48444288697`, -10813.97464774414`, 6291.266016144374`}, {30090.980794678122`, -10655.431727231604`, 6933.4159016612175`}, {30491.238113517582`, -11026.777380543239`, 6350.06567711168`}},
{{1.`, 1.`, -5333.333333333333`}, {1.`, 800.`, -5333.333333333333`}, {600.5`,400.5`, -5333.333333333333`}, {600.5`, 400.5`, 0.`}, {1200.`, 1.`, -5333.333333333333`}, {1200.`, 800.`, -5333.333333333333`}, {60863.65130432076`,-40291.635990037204`, -16984.40840118625`}, {61467.21602432911`, -40280.24840488255`, -16460.976503356553`}, {61543.78694511293`, -40456.64385453195`, -17155.254574040995`}, {61620.35786589677`, -40633.039304181344`, -17849.53264472543`}, {62223.9225859051`, -40621.65171902669`, -17326.100746895736`}, {62483.79825981317`, -35344.65017352293`, -18350.38794651614`}},
{{1.`, 1.`, -5333.333333333333`}, {1.`, 800.`, -5333.333333333333`}, {600.5`, 400.5`, -5333.333333333333`}, {600.5`, 400.5`, 0.`}, {1200.`, 1.`, -5333.333333333333`}, {1200.`, 800.`, -5333.333333333333`}, {24380.018865622696`, -18806.73278571899`, -6232.466355177068`}, {24901.6766689558`, -18967.90552454193`, -5649.116130627528`}, {24906.989609874516`, -19294.426269961717`, -6291.266016144374`}, {24912.302550793233`, -19620.947015381513`, -6933.41590166122`}, {25433.96035412633`, -19782.119754204454`, -6350.065677111683`}, {28180.172063134924`, -15530.123404949865`, -8178.259660165485`}}};

Now if I do

ConvexHullMesh/@test

it kills my kernel. If I do it indiviually I found out that it is the third array which seems to kill the kernel, the rest is calced just fine:

ConvexHullMesh[test[[3]]]

After isolating the problem I finally found the solution: Michael E2 mentioned in this post: see answer by Michael E2 that the ConvexHull is basically the BoundaryMesh of the DelaunayMesh of the points. So if I do

BoundaryMesh[DelaunayMesh[test[[3]]]]

or this

BoundaryMesh[DelaunayMesh[#]] & /@ test

it works and I can test for RegionMember, e.g. by

 RegionMember[#, {1.`, 800.`, -5333.333333333333`}] & /@ regs

I am positive that this behaviour of ConvexHullMesh is not intended.

J. M.'s missing motivation
  • 124,525
  • 11
  • 401
  • 574
Quit007
  • 1,255
  • 8
  • 15
  • I can confirm that the third element of test will crash my kernel. If you run Point@test[[3]] // Graphics3D it seems likely that the issue is that it's so long and narrow. Maybe the algorithm gets trapped trying to find solutions. – b3m2a1 Apr 10 '18 at 01:52
  • I'll let you off the hook for this, since I have confirmed it, but next time, please don't jump the gun and use the [tag:bugs] tag until other people have confirmed it. – J. M.'s missing motivation Apr 10 '18 at 01:55
  • This happens also in version 11.3. Curiously, it works when I scale test[[3]] by 1/10 before calling ConvexHullMesh... – Henrik Schumacher Apr 10 '18 at 07:22
  • 1
    Filed as [CASE:4042640]. – Henrik Schumacher Apr 10 '18 at 07:42
  • @J.M. so, how do I go about about posting a question when I think it is not a bug? Simply not use the bug-tag? – Quit007 Apr 10 '18 at 08:41
  • 1
    Yes, just ask the question like you would normally do, and let someone else add the [tag:bugs] tag on your behalf after confirmation. This is all discussed here and other meta threads. – J. M.'s missing motivation Apr 10 '18 at 08:45

1 Answers1

4

First I supposed that it had to be an uncatched error in the TetGen library for the kernel quits without warning. However, using TetGenLink directly seems to work and may serve as a workaround until ConvexHullMesh is fixed.

Needs["TetGenLink`"];
myConvexHullMesh[args__] := Module[{pts, triangles},
  {pts, triangles} = TetGenConvexHull[args];
  BoundaryMeshRegion[pts, Triangle[triangles]]
  ]

This is also a bit faster than BoundaryMesh@*DelaunayMesh since it skips the tetrahedralization.

Henrik Schumacher
  • 106,770
  • 7
  • 179
  • 309