Kshitij Kulshreshtha kshitij at math.upb.de
Tue Sep 23 10:02:38 EDT 2014

Dear Philipp,

Use the following code as a template for fun(x,y)

fun(x,y) {
for(int i = 0; i< num_segments; i++)
distvals[i] = segment[i].distance(x,y);
minindex = 0;
for(curindex = 0; curindex < num_segments; curindex++)
condassign(minindex,
distvals[minindex] > distvals[curindex], curindex);
dist = distvals[minindex];
return dist;
}

This will work as long as num_segments is a constant, i.e. the
iteration count in fun() remains the same for all values of x and y.

Warm regards
Kshitij

On 2014-09-23 15:37, Philipp Bender wrote:
> Dear list,
>
> as always when learning a new tool ... as soon as one issue seems
> solved, the next one shows up, so this is my second question today
> ...
>
> I have a function which can be considered as piecewise. It's a
> polygonal line strip, and the function returns the shortest
> distance to one of the strips, but with some interpolation tricks
> to circumvent discontinuities and so on. So contrary to "usual"
> piecewise definitions, I cannot simply look at the parameters to
> see which definition I have to use at this particular point.
>
> Basically, I do this (Pseudocode):
>
> fun(x, y): dist = big number iterate over all segments of the line
> strip: dist'  = segment.distance(x, y) dist = min(dist, dist')
>
> return dist
>
> and somewhere else:
>
> trace_on(0) fun(...) trace_off()
>
> Now, I think I cannot simply declare this to be a template and
> stop thinking. I assume that now *every* segment's operation stack
> gets recorded in the tape, and I end up with something wrong.
>
> My idea was to first have a dry run with doubles (not adoubles),
> just to obtain the correct index. Then, with adoubles x and y,
> call segment[index].distance(x, y). So with N segments, I need N+1
> calls (instead of N). Not that this would be a problem, I mention
> it only to explain what I mean.
>
> Is there an error in my thinking, do I miss something here?
>
> Best regards, Philipp
>
>

--
Dr. Kshitij Kulshreshtha

Institut für Mathematik,