I'm currently using a GJK implementation (supported by EPA for penetration) and I'm trying to optimise the calculation times of distance calculations. One of the biggest hits is trying to solve for distance between a simple 3D shape (ie a cylinder) and a curved line in the shape of a helix (https://en.wikipedia.org/wiki/Helix).

I'm just brute forcing them by chopping the helix into a lot of smaller straight lines and solving each one against the 3D shape.

Is there a better way to do this?

The image below shows the relative shape of the objects and how they can come into contact (the red disk is the moving object). In this screenshot its contacting an end point of the curve, but it will commonly contact anywhere between the end points of the helix.


  • 1
    \$\begingroup\$ Is the helix you speak of the path of a particle in world space? \$\endgroup\$
    – Ian Young
    Apr 1 '19 at 7:55
  • \$\begingroup\$ We had a past Q&A about intersection with helices (in the context of landing on an orbiting planet) that might have some inspirations in terms of narrowing the upper & lower bounds of the helix that might be relevant to search. \$\endgroup\$
    – DMGregory
    Apr 1 '19 at 11:47
  • \$\begingroup\$ No in this scenario it is an actual helix (basically a spring) that is stationary and the cylinder is the object in motion. Also the spring is big enough that the cylinder can fit between the 'loop's so to speak so i can't just take the endpoints of the spring and make an estimation. \$\endgroup\$
    – John Hill
    Apr 1 '19 at 23:01

GJK only works between 2 convex objects. So you can do a simplified collision where you converted the helix to a cylinder and then partition the helix based on the result of GJK.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.