I've been trying to understand some of the basic principles of filter design lately, and here is a result of my modest first attempts in that field. It's a patch demonstrating the effect of different pole and zero locations by (graphically) calculating the corresponding frequency responses.
To avoid confusion, I should probably say some things about how the patch actually works ...
Most importantly, I decided to only use complex filters and to arrange them in conjugate pairs to get real valued outputs at every stage within the cascade of elementary filters. Shortcuts as used in [vcf~] (a one-pole complex filter) aren't possible in this kind of implementation. To get the result corresponding to its left outlet (= real output), you would have to place a (real) zero right in the middle between the two (complex conjugate) poles etc.
The patch allows to use up to six (pairs of) poles or zeros, which may be either real or complex. If less poles or zeros are used, the coefficients of the unused filters are simply set to zero (just as the conjugate poles or zeros are set to zero for the real elementary filters).
By the way: In an earlier version of the patch, I also graphed the phase response of the filter, but I dropped that very soon because I thought this wouldn't be too helpful anyway.
Now for the use: The key control options are explained in the patch itself. Apart from that, you can click and drag the poles and zeros or specify each of its five parameters using the number boxes (values are rounded according to the graphic resolution of one hundredth).
The radii of all poles an zeros are clipped to guarantee stability.
Well, that's about it, I guess.
Bug reports or hints at unexpected behaviour are, as always, very welcome!