PDA

View Full Version : problem with ray in an array of points


tomtom2p
03-09-2005, 10:50 AM
See in the script below.
So if I change the lattice (see dir2d), and i.e. y is 0.5 or -0.5 instead of 1 and -1, ray will jump previous point B and new point A will not coincide, and I have tried but I cannot figure out how to change point A values (I guess there is the problem) to solve this stuff that is causing me headaches
If I change the random coordinates dir2d to 1 unit interval everything works, if one of the 4 position in dir2d is i.e 0.5 when the spline is traced a gap is shown.

I was told that multiplying dir for a constant i.e. v=0.5 I could change pos in the ray, I have tried in different vays but it did not work and is crucial that dir2d can have not just 1 unit jump.
Please help me I have to solve this for my uni project!
Thanks a lot Tim.
------------------------
ClearListener()
-- fns
fn drawLineBetweenTwoPoints pointA pointB col=
(
ss = SplineShape pos:pointA renderable:true thickness:0.05 wirecolor:col
addNewSpline ss
addKnot ss 1 #corner #line PointA
addKnot ss 1 #corner #line PointB
updateShape ss
--ss
)


function new2DDir=
(
dirArr=#(
[0.5,0,0],
[0,1,0],
[-0.5,0,0],
[0,-1,0]
)
return dirArr[random 1 dirArr.count]
)


--function new2DDir=
--(
--dirArr=#(
--[1,0,0],
--[0,1,0],
--[-1,0,0],
--[0,-1,0]
--)
--return dirArr[random 1 dirArr.count]
--) THIS IS THE ONE THAT EVENTUALLY WORKS


function plot steps trace:false drawMode:1=
(
-- utility
if trace then clearlistener()
delete objects
--vars
r=ray [0,0,0] [1,0,0]
rayArr=#(r)

-- code
for i = 1 to steps do
(
-- feedback
local pc=((i as float/steps)*100) as integer
displaytempprompt ("Processing: " + pc as string +"% done") 1

-- color
local c=(i as float/steps)*255
col=color c c c 255

-- new ray
dir= new2DDir()
--v= ( if abs dir.x == 0.5 then 0.5 else 1) -- I mean IT SHOULD BE SOMETHING LIKE THAT!
pointA= rayArr[rayArr.count].pos + (rayArr[rayArr.count].dir)--*v)
pointB= pointA+dir
r= ray pointA dir

-- test that this ray / dir hasn't been used yet
-- one of two modes:
-- 1: don't use same space and direction
-- 2: don't use same space
draw=true
if drawMode==1 then
(
for test in rayArr do if (r.pos==test.pos AND r.dir==test.dir) then (draw=false;continue)
)
else
(
for test in rayArr do if (r.pos+r.dir==test.pos) then (draw=false;continue)
)


-- draw the line
if draw then
(
drawLineBetweenTwoPoints pointA pointB col
append rayArr r
)
-- trace result
if trace then format "% %\n" pointA pointB

)
-- zoom
max zoomext sel all
messagebox("Number of splines" + rayArr.count as String) beep:false
)


-- code
plot 200 drawMode:0
print rayArr

CGTalk Moderation
03-09-2005, 10:50 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.