/****************************************************************************/ /* (C) Copyright 1993 Universidade Estadual de Campinas (UNICAMP) */ /* Campinas, SP, Brazil */ /* */ /* This file can be freely distributed, modified, and used for any */ /* non-commercial purpose, provided that this copyright and authorship */ /* notice be included in any copy or derived version of this file. */ /* */ /* DISCLAIMER: This software is offered ``as is'', without any guarantee */ /* as to fitness for any particular purpose. Neither the copyright */ /* holder nor the authors or their employers can be held responsible for */ /* any damages that may result from its use. */ /****************************************************************************/ char *aat_ftag = "f8"; char *aat_fname = "f(x,y) = sum_i q_i / dist((x,y), (x_i, y_i))"; #define x1 (+0.500) #define y1 (+0.500) #define q1 (+1.000) #define x2 (-0.500) #define y2 (+0.250) #define q2 (-0.875) #define x3 (+0.500) #define y3 (-0.125) #define q3 (-0.750) #define x4 (-0.500) #define y4 (-0.375) #define q4 (+0.625) Float aat_d_flt (Float x, Float y, Float x0, Float y0); Interval aat_d_ia (Interval x, Interval y, Float x0, Float y0); AAP aat_d_aa (AAP x, AAP y, Float x0, Float y0); Float aat_d_flt (Float x, Float y, Float x0, Float y0) { ROUND_NEAR; { Float dx = x - x0; Float dy = y - y0; Float d = sqrt(dx*dx + dy*dy); return(d); } } Float aat_f_flt (Float x, Float y) { ROUND_NEAR; { Float p1 = q1 / aat_d_flt (x, y, x1, y1); Float p2 = q2 / aat_d_flt (x, y, x2, y2); Float p3 = q3 / aat_d_flt (x, y, x3, y3); Float p4 = q4 / aat_d_flt (x, y, x4, y4); Float res = p1 + p2 + p3 + p4; return (res); } } Interval aat_d_ia (Interval x, Interval y, Float x0, Float y0) { Interval dx = ia_shift(x, -x0); Interval dy = ia_shift(y, -y0); Interval d = ia_sqrt(ia_add(ia_sqr(dx), ia_sqr(dy))); return(d); } Interval aat_f_ia (Interval x, Interval y) { Interval p1 = ia_div(ia_const(q1, Zero), aat_d_ia (x, y, x1, y1)); Interval p2 = ia_div(ia_const(q2, Zero), aat_d_ia (x, y, x2, y2)); Interval p3 = ia_div(ia_const(q3, Zero), aat_d_ia (x, y, x3, y3)); Interval p4 = ia_div(ia_const(q4, Zero), aat_d_ia (x, y, x4, y4)); Interval res = ia_add(ia_add(p1, p2), ia_add(p3, p4)); return (res); } AAP aat_d_aa (AAP x, AAP y, Float x0, Float y0) { AAP dx = aa_shift(x, -x0); AAP dy = aa_shift(y, -y0); AAP d = aa_sqrt(aa_add(aa_sqr(dx), aa_sqr(dy))); return(d); } AAP aat_f_aa (AAP x, AAP y) { MemP frame = aa_top(); AAP p1 = aa_div(aa_const(q1, Zero), aat_d_aa (x, y, x1, y1)); AAP p2 = aa_div(aa_const(q2, Zero), aat_d_aa (x, y, x2, y2)); AAP p3 = aa_div(aa_const(q3, Zero), aat_d_aa (x, y, x3, y3)); AAP p4 = aa_div(aa_const(q4, Zero), aat_d_aa (x, y, x4, y4)); AAP res = aa_add(aa_add(p1, p2), aa_add(p3, p4)); return (aa_return(frame, res)); } Interval aat_fxd = {-Two, Two}; Interval aat_fyd = {-Two, Two}; int aat_fn = 64;