Grasshopper

algorithmic modeling for Rhino

Polyhedron Perpendicularity Solver (reverse 3D Voronoi problem)

Hello! I need some help!

I have a polyhedron that is subdivided into smaller polyhedrons. Each small polyhedron has a white and a black point. The white points are on the outer faces of the large polyhedron, and their positions are fixed (specifically pre-determined, and cannot move). The black points can be moved. What would be the best way to modify the positions of the black points, such that:

  1. In each small polyhedron: line drawn from the black point, to the white point is perpendicular to the face that the white point lies on.
  2. When a line is drawn from a black point to the neighboring black point, the line is perpendicular (or normal) to the face that it passes through (the lines with the same color in the above image would all become one, continuous line).
  3. The black point does not necessarily need to be inside the small polyhedron, so long as the perpendicularities are satisfied.

This is analogous to a reverse 3D Voronoi problem, where the solid cells are already defined, and the points need to be found (instead of providing 3D point cloud and boundary). Also relevant to a 3D version of drawing dual/reciprocal graphs.

I tried the optimization method where I minimized the distance between the end points of the discontinuous lines of the same color, so that they effectively become one continuous line. However, this would quickly become too intensive with many more polyhedrons. Maybe, pre-connecting the black nodes then "relaxing" towards an angle tolerance criteria would be a possibility? Or possibly some sort of iterative solving method? 

Any ideas or suggestions would be greatly appreciated! Thanks in advance!

Views: 643

Attachments:

Replies to This Discussion

Well ...

1. Get a start white point

2. Define a black (variable : the red pipe is for visual purposes)

3. Define the projection

4. Using a plane from pts 1, 2, 3 find the intersection ("extended" line from next white VS "extended" line from pts 2,3): Pt 4

5. Repeat.

the file with the hints (goal is to vary the pt in 2 until a match [ when using the rest 3 white points] is found - not certain in all conditions).

Attachments:

Thanks for your response, Peter!

I think the manual way to find a solution (there are many possible solutions for this particular problem)... is to use spheres (like how circles are used for Delaunay Triangulation in 2D). If I create four spheres using the corner points of each of the smaller polyhedron, and connect the centers of the spheres, the resulting plane or polyline, should be perpendicular to the intersecting polyhedron faces. This plane then could be placed anywhere to "cut" the original four lines, and finish the form.

What I am trying to figure out, is how to automate this, and how to solve this when there are non-polyhedral solids (like tetrahedrons that necessarily wouldn't generate a enclosing sphere). I was hoping someone with more coding expertise could offer some advice! 

RSS

About

Translate

Search

Photos

  • Add Photos
  • View All

Videos

  • Add Videos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service