Difference between revisions of "Reference:Torus"
Jholsenback (talk | contribs) m (1 revision: Reference Migration Initial Load) |
(added spindle torus section) |
||
| Line 10: | Line 10: | ||
TORUS: | TORUS: | ||
torus { | torus { | ||
| − | Major, Minor | + | Major, Minor [SPINDLE_MODE] |
[TORUS_MODIFIER...] | [TORUS_MODIFIER...] | ||
} | } | ||
TORUS_MODIFIER: | TORUS_MODIFIER: | ||
sturm | OBJECT_MODIFIER | sturm | OBJECT_MODIFIER | ||
| + | SPINDLE_MODE: | ||
| + | difference | intersection | merge | union | ||
</pre> | </pre> | ||
| Line 20: | Line 22: | ||
<p>Torus default values:</p> | <p>Torus default values:</p> | ||
<pre> | <pre> | ||
| + | union | ||
sturm : off | sturm : off | ||
</pre> | </pre> | ||
| Line 49: | Line 52: | ||
bounding cylinder is hit. Thus a lot of slow root solving calculations are | bounding cylinder is hit. Thus a lot of slow root solving calculations are | ||
avoided.</p> | avoided.</p> | ||
| + | |||
| + | {{#indexentry:keyword, difference, torus}} | ||
| + | {{#indexentry:keyword, intersection, torus}} | ||
| + | {{#indexentry:keyword, merge, torus}} | ||
| + | {{#indexentry:keyword, union, torus}} | ||
| + | ===Spindle Torus=== | ||
| + | <p>{{New.3.7.1}} A torus with a minor radius greater than the major radius | ||
| + | (aka <em>spindle torus</em>) will self-intersect in a spindle-shaped region. | ||
| + | The behaviour with respect to the spindle can be controlled by specifying | ||
| + | either of the <code>difference</code>, <code>intersection</code>, | ||
| + | <code>merge</code> or <code>union</code> keywords, which act similar to the | ||
| + | corresponding CSG operations:</p> | ||
| + | <ul> | ||
| + | <li>Using the <code>difference</code> keyword, the self-intersecting portion | ||
| + | is cut away from the torus, so that the spindle volume is considered | ||
| + | <em>outside</em> the primitive; the spindle surface is visible (provided you | ||
| + | cut open the torus, or make it semi-transparent).</li> | ||
| + | <li>Using the <code>intersection</code> keyword, the resulting shape consists | ||
| + | of <em>only</em> the self-intersecting portion, so that only the spindle volume | ||
| + | is considered inside the primitive, and only the spindle surface is visible.</li> | ||
| + | <li>Using the <code>merge</code> keyword, the surface within the self-intersecting | ||
| + | portion is hidden, so that the spindle surface is <em>not</em> visible; the | ||
| + | spindle volume is considered inside the primitive.</li> | ||
| + | <li>Using the <code>union</code> keyword, the entire torus surface remains | ||
| + | visible and the spindle volume is considered inside the primitive (this is | ||
| + | the default).</li> | ||
| + | </ul> | ||
| + | <p>In a non-spindle torus, the <code>intersection</code> keyword will cause a | ||
| + | "possible parse error" warning and make the torus invisible, while the other | ||
| + | spindle mode keywords will have no effect whatsoever.</p> | ||
| + | <p class="Note"><strong>Node:</strong> The <code>difference</code> spindle mode | ||
| + | does <em>not</em> affect the behaviour with respect to the | ||
| + | <code>[[Reference:Interior_Texture|interior_texture]]</code> keyword. An | ||
| + | <code>interior_texture</code> will always be applied to the side of the spindle | ||
| + | surface facing the spindle volume.</p> | ||
| + | |||
| + | <table class="centered" width="420px" cellpadding="0" cellspacing="10"> | ||
| + | <tr> | ||
| + | <td>[[Image:SpindleTorusDifference.png|center|200px<!--centered--->]]</td> | ||
| + | <td>[[Image:SpindleTorusIntersection.png|center|200px<!--centered--->]]</td> | ||
| + | <td>[[Image:SpindleTorusMerge.png|center|200px<!--centered--->]]</td> | ||
| + | <td>[[Image:SpindleTorusUnion.png|center|200px<!--centered--->]]</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td colspan="4"><p class="caption">cutaway view of spindle torus using the <code>difference</code>, <code>intersection</code>, <code>merge</code> and <code>union</code> mode, respectively</p></td> | ||
| + | </tr> | ||
| + | </table> | ||
{{#indexentry:sturm, torus}} | {{#indexentry:sturm, torus}} | ||
{{#indexentry:keyword, sturm}} | {{#indexentry:keyword, sturm}} | ||
| + | ===Sturm=== | ||
<p>Calculations for all higher order polynomials must be very accurate. If the | <p>Calculations for all higher order polynomials must be very accurate. If the | ||
torus renders improperly you may add the keyword <code>sturm</code> to use | torus renders improperly you may add the keyword <code>sturm</code> to use | ||
POV-Ray's slower-yet-more-accurate Sturmian root solver.</p> | POV-Ray's slower-yet-more-accurate Sturmian root solver.</p> | ||
Revision as of 23:47, 4 May 2016
A torus is a 4th order quartic polynomial shape that looks
like a donut or inner tube. Because this shape is so useful and quartics are
difficult to define, POV-Ray lets you take a short-cut and define a torus
by:
TORUS:
torus {
Major, Minor [SPINDLE_MODE]
[TORUS_MODIFIER...]
}
TORUS_MODIFIER:
sturm | OBJECT_MODIFIER
SPINDLE_MODE:
difference | intersection | merge | union
Torus default values:
union sturm : off
where Major is a float value giving the major radius
and Minor is a float specifying the minor radius. The
major radius extends from the center of the hole to the mid-line of the rim
while the minor radius is the radius of the cross-section of the rim. The
torus is centered at the origin and lies in the x-z-plane with the y-axis
sticking through the hole.
|
Major and minor radius of a torus. |
The torus is internally bounded by two cylinders and two rings forming a thick cylinder. With this bounding cylinder the performance of the torus intersection test is vastly increased. The test for a valid torus intersection, i.e. solving a 4th order polynomial, is only performed if the bounding cylinder is hit. Thus a lot of slow root solving calculations are avoided.
Spindle Torus
Template:New.3.7.1 A torus with a minor radius greater than the major radius
(aka spindle torus) will self-intersect in a spindle-shaped region.
The behaviour with respect to the spindle can be controlled by specifying
either of the difference, intersection,
merge or union keywords, which act similar to the
corresponding CSG operations:
- Using the
differencekeyword, the self-intersecting portion is cut away from the torus, so that the spindle volume is considered outside the primitive; the spindle surface is visible (provided you cut open the torus, or make it semi-transparent). - Using the
intersectionkeyword, the resulting shape consists of only the self-intersecting portion, so that only the spindle volume is considered inside the primitive, and only the spindle surface is visible. - Using the
mergekeyword, the surface within the self-intersecting portion is hidden, so that the spindle surface is not visible; the spindle volume is considered inside the primitive. - Using the
unionkeyword, the entire torus surface remains visible and the spindle volume is considered inside the primitive (this is the default).
In a non-spindle torus, the intersection keyword will cause a
"possible parse error" warning and make the torus invisible, while the other
spindle mode keywords will have no effect whatsoever.
Node: The difference spindle mode
does not affect the behaviour with respect to the
interior_texture keyword. An
interior_texture will always be applied to the side of the spindle
surface facing the spindle volume.
cutaway view of spindle torus using the |
|||
Sturm
Calculations for all higher order polynomials must be very accurate. If the
torus renders improperly you may add the keyword sturm to use
POV-Ray's slower-yet-more-accurate Sturmian root solver.




