Re: Mathematica bug in Graphics3D ??
- To: mathgroup at smc.vnet.net
- Subject: [mg22249] Re: Mathematica bug in Graphics3D ??
- From: Martin Kraus <Martin.Kraus at informatik.uni-stuttgart.de>
- Date: Sat, 19 Feb 2000 01:33:51 -0500 (EST)
- Organization: Institut fuer Informatik, Universitaet Stuttgart
- References: <88juec$9o3@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Axel Kowald wrote:
>
> Hello,
>
> I'm using Mathematica 4.0.1.0 under NT4 and when I try:
>
> Show[Graphics3D[Polygon[{{2.5, Sqrt[3]/2, 0}, {3.5, Sqrt[3]/2, 0},
> {4, Sqrt[3], 0}, {3, 2*Sqrt[3], 0}, {2, 2*Sqrt[3], 0},
> {3, Sqrt[3], 0}} ]], Axes -> True]
>
> Mathematica draws a polygon with only 5 corners where the last point
> {3,Sqrt[3],0} is missing. Am I doing something wrong here or what is
> going on ?
>
> Many thanks
>
> Axel
>
Hi Axel,
your polygon is non-convex (check it by replacing Polygon by Line)
which is a problem for three-dimensional graphics in Mathematica.
As explained in the book "Mathematica Graphics -
Techniques & Applications" by Tom Wickham-Jones in section 9.3
(Polygon Triangulation) on page 155:
"Since there are several methods [to triangulate polygons],
Mathematica chooses one that is simple and easy to understand. It joins
the first vertex to successive pairs of vertices around the edge."
I do not want to discuss this decision. However, it should be noted
that this method works consistently for non-flat polygons.
Unfortunately, this method does not produce the result you
expected for your polygon. In order to get the expected result you
should project the polygon into 2d, compute a standard triangulation
of the projected polygon and use this triangulation for the 3d points.
Tom Wickham-Jones presents some code to do this in his book (included
in the ExtendGraphics package in MathSource).
Another source of code to do this is my PolygonTriangulation
package:
http://library.wolfram.com/packages/polygontriangulation/
After installing the package it works like this:
<< PolygonTriangulation`SimplePolygonTriangulation`
Show[TriangulateSimplePolygons3D[
Graphics3D[
Polygon[{{2.5, Sqrt[3]/2, 0}, {3.5, Sqrt[3]/2, 0}, {4, Sqrt[3],
0}, {3,
2*Sqrt[3], 0}, {2, 2*Sqrt[3], 0}, {3, Sqrt[3], 0}}]]],
Axes -> True]
This will show what you are probably expecting.
Greetings
Martin Kraus