T.R | Title | User | Personal Name | Date | Lines |
---|
1726.1 | | CSC32::D_DERAMO | Dan D'Eramo, Customer Support Center | Wed Mar 10 1993 13:46 | 34 |
| > It's difficult to explain but it look like a
> cylinder with no inside and no outside ; this is
> a surface with one side only !!!.
This sounds like the "Klein bottle". If you take a
rectangle
e f g
a|----------------------------|c
| |
b| |b
| |
c|----------------------------|a
g f e
and connect the opposite vertical sides so that
a connects to a, b to b, and c to c, that gives a
Moebius strip. I think for a Klein bottle you
do that as well as connect the opposite horizontal
sides at e-e, f-f, g-g. It exists in four dimensional
space without self-intersection, but it only exists
in three-dimensional space with self-intersection.
A Klein bottle has no inside and outside, just one side,
much like a Moebius strip has only one side.
> This formula is welcome in the form:
>
> formula = 0.
I take it you want formula to be some function of
three-dimensional coordinates x,y,z rather than a
formula embedding it in four dimensional space? :-)
Dan
|
1726.2 | Cross reference | CADSYS::COOPER | Topher Cooper | Wed Mar 10 1993 15:45 | 3 |
| See note 1468.*
Topher
|
1726.3 | re : .1 You are absolutely right! | BACHUS::BURTON | | Thu Mar 11 1993 02:10 | 15 |
| Dan,
your description is much more better compared to the
original note and this is what I need.
The final product should be like a ring composed of the
rectangle connected as you described.
Function of 3D coord. XYZ is exactly the way is it
implemented in the raytracer that I'm using.
Can you help me?
Bernard
|
1726.4 | | 3D::ROTH | Geometry is the real life! | Thu Mar 11 1993 08:57 | 22 |
| I think an implicit formula is in Francois Apery's book on models of
the real projective plane (along with formulas for Boy's surface,
roman surfaces, and other neat objects.) I have it at home and can
bring it in if you want that formula.
You can implicitize the parameterized form in my program (posted earlier)
by eliminating the trig functions from the equations for x, y,
and z, but my program shows the Klein bottle in a somewhat different
form than the usual inside out Klein bottle (though it is topologically
correct.)
For ray tracing, why not just use the parametric form to tessellate
the surface into triangles and trace those? You can include normals
with the triangles, so the shading will be smooth appearing.
Most ray tracers can efficiently trace large collections of facets.
Also, the implcit form will still require some range checking to
eliminate imaginary solutions (I think the Klein bottle will be at
least a quartic equation...)
- Jim
|
1726.5 | Ok as posted in 1468.* for Klein bottle | BACHUS::BURTON | | Mon Mar 15 1993 02:06 | 24 |
| Jim,
the raytracer I'm using is Persistence of
Vision 1.0. He is able to render effectively a large
amount of triangles.
I was just requesting the implicit form because
it also include the feature of encoding quadric or
quartic formula and the result is much better compared
with the rendering of triangle.
I had a look on your Klein bottle program.
I can certainly use a formula as it appears in your
program in the create_bottle (x,y,z,lintab) subroutine
to calculate triangles.
Many thanks,
Bernard.
|
1726.6 | Here is moebius! | BACHUS::BURTON | | Tue Mar 16 1993 04:23 | 57 |
| Jim,
I've extrapolated the Moebius spiral from a torus
formula and I've included it in your program.
Find below the new routine.
Bye, Bernard.
-------------------------------------------------------------
create_moebius(float x[],
float y[],
float z[],
long lintab[][2])
{
float a, c, s, d, t, u;
float wx1, wy1, wx2, wy2;
int i, j, i1, i2, j1, j2;
float tfract, wfract;
float radius;
tfract = 1.0; /* fraction of turn to construct */
wfract = 1.0; /* fraction of width to construct */
radius = 0.3; /* ring radius */
npts = 0;
for (i = 0; i <= nrad; i++) {
u = tfract*twopi*(float)i/(float)nrad;
for (j = 0; j < nwid; j++) {
t = ((float)j-.5*(float)nwid)/(.5*(float)nwid);
t *= wfract*PI;
z[npts] =sin(u);
x[npts] = (sin(u/2)*cos(t))+sin(u);
y[npts] = (cos(u/2)*cos(t))+cos(u);
x[npts] *= radius;
y[npts] *= radius;
z[npts] *= radius;
npts++;
}
}
nlines = 0;
for (i1 = 0; i1 <= nrad; i1++) {
i2 = i1+1;
if (i2 > nrad) i2--;
for (j1 = 0; j1 < nwid; j1++) {
j2 = j1+1;
if (j2 == nwid) j2--;
lintab[nlines][0] = nwid*i1+j1;
lintab[nlines++][1] = nwid*i1+j2;
lintab[nlines][0] = nwid*i1+j1;
lintab[nlines++][1] = nwid*i2+j1;
}
}
}
|