Dear DDJ,
The article "Algorithms for Stereoscopic Imaging" (DDJ, April 1993) was well-written and informative. And I'm glad to see Lenny Lipton's and Stereographics "Crystal Eyes" get some long overdue coverage. I don't believe Tektronix manufactures the polarizing panels. I understand Lipton/Stereographics holds the patents and Tektronix buys them from him. Tektronix does manufacture a stereo monitor that uses the panel.
Contrary to popular opinion, you can show stereo on your 8088 XT without special hardware, except for a viewer you can easily make.
At Visonics Labs, we've been using stereoscopic imaging of 3-D mathematical curves and surfaces for some years. I've included some Basic code snippets (see Example 1) to show how. The two images are presented side-by-side. For your viewer, purchase a large Fresnel lens from Edmund Scientific and cut 2x2-inch squares from it from the outside edge (you're looking for a prism effect) and mount it in a frame.
For information on how to build a display to show live, real-time, electronic holoform images that you can see in stereo without any viewer and look around simply by moving, see my book The 3D Oscilloscope (Prentice-Hall, 1987). The book also gives a history of 3-D displays.
Homer B. Tilton
Tucson, Arizona
Dear DDJ,
Ken Hamilton's article "Direct Memory Access From PC Fortrans" (DDJ, May, 1993) solves a problem I had with Microsoft Fortran Powerstation. However, in the case of SVS Fortran (Version 2.8.2) the functions PEEK86 and POKE86 (included in the "Interactive Library" supplied with the compiler) provide essentially the same functionality as his subroutine CRTPUT.
The PEEK86 and POKE86 functions seem to be relatively fast. Transferring a 320x200 byte array from host memory to display memory as a block (Example 2) provides a frame rate of about 42.8 frames per second on a Tri-Star 486 33Mhz EISA with a Diamond SpeedStar HC graphics adapter. Curiously, passing the same array by column ("commented out" code in Example 3) provides a slightly greater frame rate (43.3 fps).
Terry Hendricks
Encinitas, California
Dear DDJ,
I've recently taken an interest in high-precision arithmetic and have been unable to find a good reference. I believe work has been done in this area before, under the name "arbitrary precision," "variable precision," and "unlimited precision." However, I haven't run across any code libraries addressing this issue. What's a fellow to do when 40 decimals of accuracy isn't enough. I'd appreciate hearing from any other readers who might have relevant information.
Mike Neighbors
Huntsville, Alabama
DDJ responds: For starters, take a look at Fred Motteler's article "Arbitrary Precision Floating-point Arithmetic" in this issue. Also, you might refer to "Multiple Precision Arithmetic in C" by Burt Kaliski (DDJ, August 1992) as well as Burt's "The Z18080 and Big Number Arithmetic" in this issue. If any readers have further recommendations, we'll publish the references.
Dear DDJ,
In his March 1993, "Programming Paradigms" Michael Swaine discusses a product called Serius Workshop. He also mentions that Serius is the name of the dog in a classic novel by the British philosopher/author, Olaf Stapleton. This is an error. The dog in question is named Sirius, after the star, in the constellation Canis Major, also known as the Dog Star, one of the brighter stars in the sky.
Olaf Stapleton is not very well read in this country and I was exposed to his works as a child growing up in England. He also wrote an excellent story called "Last and First Men," the history of Mankind as written by the last remaining human at some very distant time in the future.
Robert Hutchins
Rancho Palos Verdes, California
Dear DDJ,
The article "Object-oriented Finite Element Software" (DDJ, June 1993), Al Vermeulen states that a bicycle wheel will not even begin to undergo buckling failure until over 25,000 pounds of force have been applied. A bicycle wheel will not sustain a load of this magnitude. It will fail catastrophically long before the load reaches 25,000 pounds.
Assume for the moment that bicycle spokes are fabricated from SAE 1095 steel, or a steel of similar strength, which has a yield strength of 97,000 pounds per square inch (97 ksi) and an ultimate strength of 109 ksi. The area of the spoke is given in this article as 0.0031 square inches. Simple tensile stress can be obtained from the equation: S= P/A, where S is stress in pounds per square inch, P is the tension load in pounds, and A is the cross-sectional area. If we rearrange this expression to solve for the load that will result in a stress of 97 ksi in our bicycle spoke we get a load of 300.7 pounds. If for the sake of simplicity, we assume that two-thirds of the spokes are uniformly loaded in tension (an extremely optimistic loading pattern), we get a total load of 7217 pounds. That's well below Al's buckling failure load.
Al also states that the initial strain in the spokes is 0.003 in/in. If we solve for the equivalent stress using Young's Modulus, we get a stress of 90 ksi. The spokes are under an initial tension of 279 pounds! The spokes will be at the yield point after an additional load of 521 pounds has been added using the aforementioned loading pattern.
The more likely failure modes are the spoke retainer pulling through the aluminum rim when the rim suffers localized shear failure or the edge of the rim crushing due to bearing stress.
Also, there aren't enough spokes on the wheel. Figure 7 in his article states that the rim radius is 27 inches. The spoke length is given as 12 inches. I think it's more likely that it's the rim diameter that has a value of 27 inches.
Thirty-six spokes have a spacing of 2.356 inches on a wheel with a 13.5 inch radius. This number of spokes simplifies the model, but perhaps he should have used an equivalent spoke that would approximate two spokes with twice the area of a real spoke. Seventy-two spokes would give a spacing of about 1.18 inches, which seems about right. The equivalent spoke would have an initial loading of 558 pounds (same strain) and the wheel would need a load of 1042 pounds, using my assumed loading pattern, to take the spokes to the yield point. Even this is well below 25,000 pounds.
Nor are spokes pinned at the rim once the deflection of the wheel has reduced the tension in the spokes near the point where the external load is applied to zero. Once this has happened, the rim end of the spoke is free and it is no longer contributing to the structural integrity of the wheel.
Just for fun, I calculated what load would have to be applied to a thin aluminum ring subjected to diametrically opposed point loads to give a maximum deflection of --1.4 inches. Since the ring is free to deflect any way it wants to using this case, the calculated bending moment will be a minimum for the applied deflection. I obtained a value of 1288 pounds.
Then I used this load to calculate the maximum bending moment. This turned out to be 3252 inch-pounds. Finally, I calculated the maximum bending stress in the ring using the classic equation: S= Mz/I, where S is the stress, M is the bending moment, I is the moment of inertia of the section of the ring with respect to its neural axis and z is the distance from the neutral axis to the point where the stress is to be calculated. Since I have no idea what the maximum value for z is for the rim in question, I assumed that the rim is made of a high strength aluminum alloy with a yield strength of 72 ksi and solved for the distance which turned out to be 0.055 inches. I don't believe that bicycle rims are that thin.
Buckling failures occur at elastic stresses and have proved to my satisfaction using simplistic approximations of the actual situation that for the rim to behave in the manner described.
I have been a computer programmer for 15 years, before that I spent ten years in the aerospace industry working as a structural engineer.
Daniel L. Curtis
Cincinnati, Ohio
Al responds: I agree with you Dan that the wheel model I used is physically unrealistic for moderate to large deflections. The most crucial flaw is that it is a two-dimensional model: An actual wheel will deform in three dimensions once the spokes begin to unload. I deliberately chose to use a vastly oversimplified model in order to draw attention to the point of the article: the application of object-oriented methodology to the spline finite element method. I think the model served this purpose well.
10 'This is PLOT_XYZ.BAS by Homer TiltonJune 1990. 20 'Use in conjunction with PLOT_XYZ.BAT 30 'X,Y,Z are spaceform coords. X is horiz, Y is vert, Z is depth. 40 'SX,SY are screen coords. SX is horiz, SY is vert. ... 250 '-------------------Your parameters------------------------- 260 INPUT "Enter max x,y,z value (default is c):",E 270 IF E=- THEN E=3.14 280 PRINT290 INPUT "Enter max t value (default is same as x,y,z value):",H 300 IF H=0 THEN H=E 310 GOSUB 1220 'Load defined functions 320 S1=0 'Roll (Euler angles in degrees) 330 S2=-30 'Yaw 340 S3=25 'Pitch 350 M=3.5 'Magnification 360 DP=-1 'Depth position in inches 370 '-------------------- Definitions ------------------------------ 380 R1=S1*PI/180:R2=S2*PI/180:R3=S3*PI/180 'Angles in radians 390 D=M*50 'Scale of data 400 ZM=100*DP 'Depth position in hundredths of an inch 410 A=1200 'Observer distance in hundredths of an inch ... 970 '---------------------------- 980 '---------------------- SUBROUTINES AND DATA ----------------- 990 '--- Stereo-scenographic linear transformations --- 1000 X=D*X:Y=D*Z:Z=D*Z 1010 XA=CR1*X-SR1*Y ' Rotation 1 1020 YA=SR1*X+CR1*Y 1030 X=CR2*XA+SR2*Z ' Rotation 2 1040 ZA=CR2*Z-SR2*XA 1050 YB=CR3*YA-SR3*ZA 1060 ZB=SR3*YA+CR3*ZA+ZM ' Rotation 3 1070 IF TOG=0 THEN XB=XB+ZB/20 'LH view 1080 IF TOG=1 THEN XB=XB-ZB/20 'RH view 1090 P=1/(1-ZB/A) 'Perspective transformation 1100 SX=XB*P:SY=YB*P 'Screen image 1110 RETURN ....
Copyright © 1993, Dr. Dobb's Journal