comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » 3D heart
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
3D heart [message #42477] Wed, 09 February 2005 09:30
rensheu is currently offline  rensheu
Messages: 3
Registered: February 2005
Junior Member
Dear all,

Here goes a funny stuff you might be interested. There is a 3D heart
object could be used for the coming Valentine's day.

Cheers,
R.D.
------------------------------------------------------------

Pro HeartShape
forward_function oHeart

oHeart = Heart3D()

oModel = obj_new('IDLgrModel')
;oModel -> Rotate, [0,0,1], 20
;oModel -> Rotate, [1,0,0], -30

oText = obj_new('IDLgrText', 'Happy Valentine''s Day!! ', $
COLOR=[255,250,250], location=[-1.5,-1.3, 0.8],
char_dim=[0.26,0.26], $
updir=[0,0,1], baseline=[1,0, -0.5])

oGreeting = obj_new('IDLgrText', 'Dear All,', $
COLOR=[255,250,250], location=[-1.5, 1.3, 0.8],
char_dim=[0.26,0.26], $
updir=[0,0,1], baseline=[1,0, -0.5])
oName = obj_new('IDLgrText', 'R.D.', $
COLOR=[255,250,250], location=[0.5, -1.3, -1.2],
char_dim=[0.26,0.26], $
updir=[0,0,1], baseline=[1,0, -0.5])

oModel -> Add, oHeart
oModel -> Add, oText
oModel -> Add, oGreeting
oModel -> Add, oName


xobjview, oModel, background=[255, 170, 170], $
Title='Happy Valentine''s Day!! <:o)', scale=0.72

for i=0, 50 do $
XOBJVIEW_ROTATE, [1,0,-0.5], -1 ;, /PREMULTIPLY

return
End

Function Heart3D
; This heart shape curve is referring to the following URL:
; http://www.mathematische-basteleien.de/heart.htm
; Threedimensional curve, source: Gabriel Taubin [for example
MathWorld]
; (X^2+(9./4.)*Y^2+Z^2-1.)^3 - X^2*Z^3 - (9./80.)*Y^2*Z^3 = 0.


NX = 250 ;resolution
NY = 8

For j=0, NY do begin
Y = 2./3.*1.1*(-1+ 1./NY*j)
for i=0, NX do begin
X = -1.5 + 3.0/NX*i
a = 1.0
b = (X^2+9./80.*Y^2)^(1./3.)
c = (X^2+9.*Y^2/4.-1.0)
det = b^2 - 4.*a*c
if(det ge 0.0) then $
if(N_ELEMENTS(rVert1) le 1) then $
rVert1 = [X, -(-b+sqrt(det))/(2.*a), Y ] $
else begin
rVert1 = [[rVert1], [X, -(-b+sqrt(det))/(2.*a), Y]]
rVert1 = [[X, -(-b-sqrt(det))/(2.*a), Y], [rVert1]]
endelse
Endfor
if (N_ELEMENTS(rVert1) ge 3) then begin
if (N_ELEMENTS(oROI) eq 0) then $
oROI = obj_new('IDLgrROI', rVert1) $
else $
oROI = [oROI, obj_new('IDLgrROI', rVert1)]
endif
rVert1 = 0
endfor

oROIGROUP = obj_new('IDLgrROIGroup')
oROIGROUP -> Add, oROI

result = oROIGROUP -> Computemesh(rVert, rConn, capped=2)

obj_destroy, oROI
obj_destroy, oROIGROUP

rVert1 = rVert
rVert1[2,*] = abs(rVert1[2,*])

result = mesh_merge(rVert, rConn, rVert1, rConn)
oObj = obj_new('IDLgrPolygon', rVert, Style=2, COLOR=[255,0,0],
POLYGON=rConn, shading=1)

return, oObj

End
[Message index]
 
Read Message
Previous Topic: write data to an excell file
Next Topic: Re: Dynamically resizing arrays

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 19:10:08 PDT 2025

Total time taken to generate the page: 0.00566 seconds