From 705f8dee50e2073a3aba60b03e5c9b86672abd4c Mon Sep 17 00:00:00 2001 From: "B. Bogart" Date: Tue, 30 Sep 2003 16:04:40 +0000 Subject: Opps - forgot to add the files that did not exist in chaosI! svn path=/trunk/externals/bbogart/chaos/; revision=1052 --- unity.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 unity.c (limited to 'unity.c') diff --git a/unity.c b/unity.c new file mode 100644 index 0000000..21ecc6f --- /dev/null +++ b/unity.c @@ -0,0 +1,102 @@ +/* unity Attractor PD External */ +/* Copyright Michael McGonagle, from ??????, 2003 */ +/* This program is distributed under the params of the GNU Public License */ + +/////////////////////////////////////////////////////////////////////////////////// +/* This file is part of Chaos PD Externals. */ +/* */ +/* Chaos PD Externals are free software; you can redistribute them and/or modify */ +/* them under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation; either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* Chaos PD Externals are distributed in the hope that they will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with the Chaos PD Externals; if not, write to the Free Software */ +/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include "m_pd.h" + + + +#define M_x 0 +#define M_y 1 + +#define M_param_count 0 +#define M_var_count 2 +#define M_search_count 0 +#define M_failure_limit 1000 + +static char *version = "unity v0.0, by Michael McGonagle, from ??????, 2003"; + +t_class *unity_class; + +typedef struct unity_struct { + t_object x_obj; + + double vars[M_var_count]; + double vars_init[M_var_count]; + + t_outlet *outlets[M_var_count - 1]; +} unity_struct; + +static void calc(unity_struct *unity, double *vars) { + double k, x_0, y_0; + k=(vars[M_x]*vars[M_x])+(vars[M_y]*vars[M_y]); + x_0 =(2-k)*vars[M_y]; + y_0 =(2-k)*vars[M_x]; + vars[M_x] = x_0; + vars[M_y] = y_0; +} // end calc + +static void calculate(unity_struct *unity) { + calc(unity, unity -> vars); + outlet_float(unity -> x_obj.ob_outlet, unity -> vars[M_x]); + outlet_float(unity -> outlets[M_y - 1], unity -> vars[M_y]); +} // end calculate + +static void reset(unity_struct *unity, t_symbol *s, int argc, t_atom *argv) { + if (argc == M_var_count) { + unity -> vars[M_x] = (double) atom_getfloatarg(M_x, argc, argv); + unity -> vars[M_y] = (double) atom_getfloatarg(M_y, argc, argv); + } else { + unity -> vars[M_x] = unity -> vars_init[M_x]; + unity -> vars[M_y] = unity -> vars_init[M_y]; + } // end if +} // end reset + +void *unity_new(t_symbol *s, int argc, t_atom *argv) { + unity_struct *unity = (unity_struct *) pd_new(unity_class); + if (unity != NULL) { + outlet_new(&unity -> x_obj, &s_float); + unity -> outlets[0] = outlet_new(&unity -> x_obj, &s_float); + if (argc == M_param_count + M_var_count) { + unity -> vars_init[M_x] = unity -> vars[M_x] = (double) atom_getfloatarg(0, argc, argv); + unity -> vars_init[M_y] = unity -> vars[M_y] = (double) atom_getfloatarg(1, argc, argv); + } else { + if (argc != 0 && argc != M_param_count + M_var_count) { + post("Incorrect number of arguments for unity fractal. Expecting 2 arguments."); + } + unity -> vars_init[M_x] = 0; + unity -> vars_init[M_y] = 0; + } + } + return (void *)unity; +} + +void unity_setup(void) { + unity_class = class_new(gensym("unity"), (t_newmethod) unity_new, 0, sizeof(unity_struct), 0, A_GIMME, 0); + class_addbang(unity_class, (t_method) calculate); + class_addmethod(unity_class, (t_method) reset, gensym("reset"), A_GIMME, 0); + class_sethelpsymbol(unity_class, gensym("help-unity.pd")); +} + -- cgit v1.2.1