POV-Ray : Newsgroups : povray.newusers : Import of measurement data (ASCII format) in animation Server Time
17 May 2024 23:01:38 EDT (-0400)
  Import of measurement data (ASCII format) in animation (Message 22 to 31 of 34)  
<<< Previous 10 Messages Goto Latest 10 Messages Next 3 Messages >>>
From: Christian Froeschlin
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 3 Mar 2016 18:15:27
Message: <56d8c58f$1@news.povray.org>
On 03.03.2016 3:43, Bald Eagle wrote:

> Is there a way to calculate where the control point needs to be given the
> surface coordinate?   I seem to recall some sort of A-Frame looking diagram,
> though I'll have to go dig that up and see if there's a way to back-calculate.

I think there is not enough degrees of freedom in single patch
to do meaningful interpolation. But you might connect the reference
points in such a way that they are at corners of patches (these should
touch) and calculate inner control points for smooth transitions.

See e.g. http://www.joshuarenglish.com/cyclopedia/patches.html


Post a reply to this message

From: Christian Froeschlin
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 3 Mar 2016 18:59:51
Message: <56d8cff7@news.povray.org>
> The "prism" function seemed to me a good way of modelling the plate, due to the
> given conditions in my case (1D vibration). For the animation I chose the linear
> spline curve, since I managed to make it work in other animations I tried
> before.

All you transformation does is calculate a point B from point A. It
will not affect any geometry. For that you must actually use the value
B inside the geometry instead of the literal <-2,-3> (and of course
reverse the order, calculate B before the prism).

Note using splines for that only makes sense if you need to
interpolate between measurements. If you want to render one frame
per measurement just use data point n for frame n.

Also I think you may be misinterpreting the prism. It extrudes
a 1d spline in a second dimension. It will not work if what you
have are corners + edge midpoints of a flat rectangle like this

X------X------X
|      |      |
|      |      |
X------X------X

As most simple linear geometry you could model this
with 4 triangles (or preferable a mesh2 object), as I
think you already did earlier. For a curved representation
use 2 bicubic patches that share the "middle" control points
at their corners but that is a bit more involved:

http://www.joshuarenglish.com/cyclopedia/patches.html


Post a reply to this message

From: Bald Eagle
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 3 Mar 2016 19:00:00
Message: <web.56d8cfb7a405651b5e7df57c0@news.povray.org>
Christian Froeschlin <chr### [at] chrfrde> wrote:
> See e.g. http://www.joshuarenglish.com/cyclopedia/patches.html

I saw that, along with some of Mr. English's posts here on the forum, but I
haven't been able to do anything meaningful with it.

I might be able to get somewhere with:
https://web.archive.org/web/20131225210855/http://people.sc.fsu.edu/~jburkardt/html/bezier_interpolation.html

Got some good looking stuff coded up.   Just need to be able to have the data
points be coincident with the actual patch, and then I can put together
something that draws it all together.


Post a reply to this message

From: Bald Eagle
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 4 Mar 2016 12:25:00
Message: <web.56d9c427a405651b5e7df57c0@news.povray.org>
OK, so due to the extreme difficulty of employing bicubic_patch objects for
this,

{issues I've run into are
- the sometimes extreme disparity between control points and patch surface
coordinates,
- Somehow trace does not hit the edge of the patch when a ray is shot straight
down at the patch in the y direction from far above a control point
- inability to get accurate min and max extent
- extremely difficult to determine control points from data points on the curve
}

I've reimagined this whole thing, and of course the first stumbling block I got
to was:

If I read all the data in from the file, then render the first frame,
what will happen is that upon rendering the 2nd frame, the data gets read in
AGAIN, over and over and over.

Any ideas for fixes for this?
This looks like the ole' Persistence of Data across frames problem.
"POV needs POD!"


Post a reply to this message

From: clipka
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 4 Mar 2016 13:09:51
Message: <56d9cf6f$1@news.povray.org>
Am 04.03.2016 um 18:21 schrieb Bald Eagle:

> If I read all the data in from the file, then render the first frame,
> what will happen is that upon rendering the 2nd frame, the data gets read in
> AGAIN, over and over and over.
> 
> Any ideas for fixes for this?
> This looks like the ole' Persistence of Data across frames problem.
> "POV needs POD!"

UberPOV has an experimental feature to carry over data from one frame to
the next (or, actually more to the point, from one render to the next,
regardless of whether those are two frames in an animation or entirely
independent renders), using "#persistent" instead of "#declare".


Post a reply to this message

From: Stephen
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 4 Mar 2016 13:44:51
Message: <56d9d7a3$1@news.povray.org>
On 3/4/2016 5:21 PM, Bald Eagle wrote:
> OK, so due to the extreme difficulty of employing bicubic_patch objects for
> this,
>
> {issues I've run into are
> - the sometimes extreme disparity between control points and patch surface
> coordinates,
> - Somehow trace does not hit the edge of the patch when a ray is shot straight
> down at the patch in the y direction from far above a control point
> - inability to get accurate min and max extent
> - extremely difficult to determine control points from data points on the curve
> }
>

One of the problems might be that we do not have calibration data for 
the sensors.
I rendered it as triangles in a mesh. The points are not planer. You 
could use a statistical formula to make them sit on a plane.



> I've reimagined this whole thing, and of course the first stumbling block I got
> to was:
>
> If I read all the data in from the file, then render the first frame,
> what will happen is that upon rendering the 2nd frame, the data gets read in
> AGAIN, over and over and over.
>
> Any ideas for fixes for this?
> This looks like the ole' Persistence of Data across frames problem.
> "POV needs POD!"
>
>

You step through the data using the clock or frame_number variables.

Talking about the data. I don't understand the time stamp. Five second 
intervals, that's quite slow, is it not? And what are the units of the 
sensors?

The long time interval makes me think that using splines is not the way 
to go.



-- 

Regards
     Stephen


Post a reply to this message

From: Bald Eagle
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 4 Mar 2016 16:25:00
Message: <web.56d9fc6ba405651b5e7df57c0@news.povray.org>
Stephen <mca### [at] aolcom> wrote:

> One of the problems might be that we do not have calibration data for
> the sensors.

I think it's just a matter of displaying the data that's available.

> I rendered it as triangles in a mesh. The points are not planer. You
> could use a statistical formula to make them sit on a plane.

I think it's all Y data - the X and z coordinates I derived from the diagram
that was provided.  I just connected the perimeter points to get a few
triangles, and it looks _OK_ - it would be better with smooth triangles, but I'm
unsure exactly how to calculate the corner normals.

> You step through the data using the clock or frame_number variables.

I used frame number - worked fine
http://news.povray.org/povray.binaries.animations/thread/%3Cweb.56d9fbdd155fef445e7df57c0%40news.povray.org%3E/

> Talking about the data. I don't understand the time stamp. Five second
> intervals, that's quite slow, is it not? And what are the units of the
> sensors?

Maybe it's a geologic plate ...  ;)
Could be they meant milliseconds or something.

> The long time interval makes me think that using splines is not the way
> to go.

Just normalize the time stamp to the interval 0-1 by dividing them all by 490,
although I don't think the spline is limited by the numbers.


Post a reply to this message

From: Alain
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 4 Mar 2016 18:32:48
Message: <56da1b20@news.povray.org>

> Stephen <mca### [at] aolcom> wrote:
>
>> One of the problems might be that we do not have calibration data for
>> the sensors.
>
> I think it's just a matter of displaying the data that's available.
>
>> I rendered it as triangles in a mesh. The points are not planer. You
>> could use a statistical formula to make them sit on a plane.
>
> I think it's all Y data - the X and z coordinates I derived from the diagram
> that was provided.  I just connected the perimeter points to get a few
> triangles, and it looks _OK_ - it would be better with smooth triangles, but I'm
> unsure exactly how to calculate the corner normals.
>
>> You step through the data using the clock or frame_number variables.
>
> I used frame number - worked fine
>
http://news.povray.org/povray.binaries.animations/thread/%3Cweb.56d9fbdd155fef445e7df57c0%40news.povray.org%3E/
>
>> Talking about the data. I don't understand the time stamp. Five second
>> intervals, that's quite slow, is it not? And what are the units of the
>> sensors?

The units used can be totaly arbitrary. They can be in thousanth of an 
inch, micrometer, dust grains, mili-picas,... They only need to be self 
concistent. All we meed to have, is the possibility to assume that the 
data are linear.

>
> Maybe it's a geologic plate ...  ;)
> Could be they meant milliseconds or something.

That would be my guess also. Mili- or microsecond.

>
>> The long time interval makes me think that using splines is not the way
>> to go.
>
> Just normalize the time stamp to the interval 0-1 by dividing them all by 490,
> although I don't think the spline is limited by the numbers.
>
>
>

Splines are not limited to any range of values. Those can be negative or 
positive and range in the millions if wanted or needed.

In this case, you can multiply clock by 490, or whatever, to get the 
same result.


Post a reply to this message

From: Bald Eagle
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 4 Mar 2016 20:45:01
Message: <web.56da38fca405651b5e7df57c0@news.povray.org>
"Bald Eagle" <cre### [at] netscapenet> wrote:

> Is there a way to calculate where the control point needs to be given the
> surface coordinate?


Not sure if this gets us anywhere...

https://etd.ohiolink.edu/rws_etd/document/get/wright1190032099/inline
From Page 67:

% determine the size scalar fo
u2size = size(u2,1);
v2size = size(v2,1);
% generate the matrices U and V for the ps
U2 = [u2.^3 u2.^2 u2
V2 = [v2.^3 v2.^2 v2
% control point matrix indices
cmri = j1*4;
cmci = i1*4;
%%%%%%% psuedo-inverse transform
%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
Pxc(cmri-3:cmri,cmci-3
((inv(B)*pinv(U))*Px*(pinv(V)'*inv(B)
Pyc(cmri-3:cmri,cmci-3:cmci) =
((inv(B)*pinv(U))*Py*(pinv(V)'*inv(B)'));
Pzc(cmri-3:cmr
((inv(B)*pinv(U))*Pz*(pinv(V)'*i
%%%%%


Post a reply to this message

From: Bald Eagle
Subject: Re: Import of measurement data (ASCII format) in animation
Date: 6 Mar 2016 01:20:04
Message: <web.56db1a00a405651b5e7df57c0@news.povray.org>
I just spent a lot of time getting all the array loops to work without error,
and now POV complains
Parse Error: Expected 'RValue to declare', End of File found instead
or if I comment out the #end where it chokes, then I get "end of file reached,
but #end expected.

As far as I can see, all my #locals have a ; and all my #fors have an #end

Hoping someone can help me spot where in the chain it's all going wrong.
I'll keep hunting backward

(This is fourth time I'm posting this - seems to be a problem getting it to
"take" via the web interface in p.b.scene files)

===============================================================


#version 3.7;
global_settings { assumed_gamma 1.0 }

//------------------------------------------
// SDL for making a Bezier spline - given 4 data points, compute control points
p1 and p2
// Bill Walker - 2016
// Adapted code to POV-Ray from :
// https://www.particleincell.com/2012/bezier-splines/
// https://www.particleincell.com/wp-content/uploads/2012/06/circles.svg
// replace var with #declare or #local, function with #macro, edit #for() #end
syntax, array[] syntax
//------------------------------------------

#include "colors.inc"
#include "debug.inc"
 Set_Debug (true)
#include "math.inc"

light_source { <0, 50, -50>  color rgb <1, 1, 1>}


#declare Camera_Front =
camera {
location  <0, 90, -1>
 //right    x*image_width/image_height
look_at   <0, 0, 0>}


camera {Camera_Front}

// bezier-spline.js

// computes cubic bezier coefficients to generate a smooth
// line through specified points. couples with SVG graphics
// for interactive processing.

// For more info see:
// http://www.particleincell.com/2012/bezier-splines/

// Lubos Brieda, Particle In Cell Consulting LLC, 2012
// you may freely use this algorithm in your codes however where feasible
// please include a link/reference to the source article


//#declare svg=document.documentElement //svg object
#declare S = array[4];     //splines
#declare V = array[4];     //vertices
//#declare C       //current object
//#declare x0,y0     //svg offset
#declare K = array[4];


#macro init()
//##################################################################################
//saves elements as global variables
 //create splines
 //#declare S[0] = createPath("blue");
 //#declare S[1] = createPath("red");
 //#declare S[2] = createPath("green");
 //#declare S[3] = createPath("brown");

 //create control points
 #declare V[0] = <60,60,0>;
 createKnot(V[0])
 #declare V[1] = <220,300,0>;
 createKnot(V[1])
 #declare V[2] = <420,300,0>;
 createKnot(V[2])
 #declare V[3] = <700,240,0>;
 createKnot(V[3])

 updateSplines()
#end // end macro init
//##################################################################################


#macro createPath(Color, Width)
//##################################################################################
//creates and adds an SVG path without defining the nodes
 //width = (typeof width == 'undefined' ? "8" : width);
 //#declare P=document.createElementNS("http://www.w3.org/2000/svg","path")
 //P.setAttributeNS(null,"fill","none")
 //P.setAttributeNS(null,"stroke",color)
 //P.setAttributeNS(null,"stroke-width",width)
 //svg.appendChild(P)
 //return P

#end
//##################################################################################


#macro createKnot(V)
//##################################################################################
//creates and adds an SVG circle to represent knots
sphere { V 22 pigment {Yellow}}

  //#declare C=document.createElementNS("http://www.w3.org/2000/svg","circle")
  //C.setAttributeNS(null,"r",22)
  //C.setAttributeNS(null,"cx",x)
  //C.setAttributeNS(null,"cy",y)
  //C.setAttributeNS(null,"fill","gold")
  //C.setAttributeNS(null,"stroke","black")
  //C.setAttributeNS(null,"stroke-width","6")
  //C.setAttributeNS(null,"onmousedown","startMove(evt)")
  //svg.appendChild(C)
  //return C

#end // end macro createKnot
//##################################################################################






// Maybe set up java mouse movement as clock-linked animation
//from http://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html
/* #macro startMove(evt)

  SVG positions are relative to the element but mouse positions are relative to
the window, get offset
  x0 = getOffset(svg).left;
  y0 = getOffset(svg).top;

  C=evt.target
  svg.setAttribute("onmousemove","move(evt)")
  svg.setAttribute("onmouseup","drop()")
 #end // end macro startMove

 //called on mouse move, updates dragged circle and recomputes splines
 #macro move(evt)

  x = evt.clientX-x0;
  y = evt.clientY-y0;

  move the current handle
  C.setAttributeNS(null,"cx",x)
  C.setAttributeNS(null,"cy",y)
  updateSplines();
 #end // end macro move

 //called on mouse up event
 #macro drop()

  svg  = document.getElementsByTagName('svg')[0];
  svg.setAttributeNS(null, "onmousemove",null)
 #end // end macro drop
*/



#macro updateSplines()
//##################################################################################
//computes spline control points
 //grab (x,y) coordinates of the control points
 #local X = array[4];
 #local Y = array[4];
 #for (i, 0, 3)     //for (i=0;i<4;i++)
  //use parseInt to convert string to int
  #local X[i] = V[i];   //parseInt(V[i].getAttributeNS(null,"cx"))
  #local Y[i] = V[i];   //parseInt(V[i].getAttributeNS(null,"cy"))
 #end
 //computes control points p1 and p2 for x and y direction
 #local px = computeControlPoints(X);
 #local py = computeControlPoints(Y);

 //updates path settings, the browser will draw the new spline
 #for (i, 0, 2)     //for (i=0;i<3;i++)
  //S[i].setAttributeNS(null,"d",
path(x[i],y[i],px.p1[i],py.p1[i],px.p2[i],py.p2[i],x[i+1],y[i+1]));
  //#debug concat( "(Draw SVG path subroutine)   i = ", str(i, 3, 1), "\n")
 #end
#end // end macro updateSplines           ^^^^ call path macro
//##################################################################################



#macro path(x1,y1,px1,py1,px2,py2,x2,y2)
//##################################################################################
//creates formated path string for SVG cubic path element

 //return "M "+x1+" "+y1+" C "+px1+" "+py1+" "+px2+" "+py2+" "+x2+" "+y2;
#end // end macro paths
//##################################################################################



#macro computeControlPoints(K)
//##################################################################################
//computes control points given knots K, this is the brain of the operation
 #local p1 = array[4];
 #local p2 = array[4];
 #local n = dimension_size (K, 1) - 1;  //K.length-1;

  //rhs vector
  #local a = array[n];
  #local b = array[n];
  #local c = array[n];
  #local r = array[n];

  //left most segment
  #local a[0] = 0;
  #local b[0] = 2;
  #local c[0] = 1;
  #local r[0] = K[0] + 2 * K[1];

  //internal segments
  #for (i, 0, n-2)     //(i = 1; i < n - 1; i++)
   #local a[i] = 1;
   #local b[i] = 4;
   #local c[i] = 1;
   #local r[i] = 4 * K[i] + 2 * K[i+1];
  #end

  //right segment
  #local a[n-1] = 2;
  #local b[n-1] = 7;
  #local c[n-1] = 0;
  #local r[n-1] = 8 * K[n-1] + K[n];

  //solves Ax=b with the Thomas algorithm (from Wikipedia)
  #for (i, 1, n-1)     //#for (i = 1; i < n; i++)
   #local m = a[i]/b[i-1];
   #local b[i] = b[i] - m * c[i - 1];
   #local r[i] = r[i] - m*r[i-1];
  #end

  #local p1[n-1] = r[n-1]/b[n-1]; //#local p1[n-1] = r[n-1]/b[n-1];
  // {Be sure to include debug.inc file!}
  //#debug concat( "Defining p1.   n-1 = ", str((n-1), 3, 1), "\n")


  #for (i, n-2, 0, -1)     //#for (i = n - 2; i >= 0; --i)
   #local p1[i] = (r[i] - c[i] * p1[i+1]) / b[i];
   //#debug concat( "Defining p1.   i = ", str(i, 3, 1), "  Defining p1.   i+1 =
", str((i+1), 3, 1),"\n")
  #end

  //we have p1, now compute p2
  #for (i, 0, n-2)     //#for (i=0;i<n-1;i++)
   //#debug concat( "Defining p2   i = ", str(i, 3, 1), "  i+1 = ", str((i+1),
3, 1),"\n")
   #local p2[i] = 2 * K[i+1] - p1[i+1];
  #end

  #local p2[n-1] = 0.5 * (K[n] + p1[n-1]);

  //return {p1:p1, p2:p2};
#end // end macro computeControlPoints
//##################################################################################

//code from
http://stackoverflow.com/questions/442404/dynamically-retrieve-html-element-x-y-position-with-javascript
//#macro getOffset( el )

//    #declare _x = 0;
//   #declare _y = 0;
//    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
//        _x += el.offsetLeft - el.scrollLeft;
//        _y += el.offsetTop - el.scrollTop;
//        el = el.offsetParent;
//
//    return { top: _y, left: _x };

//call macros
init ()


Post a reply to this message

<<< Previous 10 Messages Goto Latest 10 Messages Next 3 Messages >>>

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.