This is LorenzController.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "LorenzController.h" #import <appkit/appkit.h> #import <musickit/musickit.h> #import "ChaosPlot.h" #define SXM 25.0 #define SXm (-25.0) #define BXM 60.0 #define BXm (-60.0) #define SYM 30.0 #define SYm (-30.0) #define BYM 80.0 #define BYm (-80.0) #define SZM 60.0 #define SZm 0.0 #define BZM 300.0 #define BZm 0.0 #define sSXM "25" #define sSXm "-25" #define sBXM "60" #define sBXm "-60" #define sSYM "30" #define sSYm "-30" #define sBYM "80" #define sBYm "-80" #define sSZM "60" #define sSZm "0" #define sBZM "300" #define sBZm "0" @implementation LorenzController - initWithPlot:plotter withConductor:conductor { [super init]; [NXApp loadNibSection:"LorenzControl.nib" owner:self withNames:NO]; [thePanel makeKeyAndOrderFront:self]; cPlot = plotter; cConductor = conductor; [self changePlotMode:sPlotButton]; return self; } - closeUp { [thePanel close]; return self; } - changePlotMode:sender { char *xM, *xl, *xm, *yM, *yl, *ym; [Conductor lockPerformance]; [cConductor emptyQueue]; [Conductor unlockPerformance]; switch ([sender selectedTag]) { case 0: case 1: case 2: plotMode = [sender selectedTag]; break; case 3: zoomMode = SMALL; break; case 4: zoomMode = LARGE; break; } switch (plotMode) { case XY: if (zoomMode == SMALL) { xM=sSXM; xm=sSXm; yM=sSYM; ym=sSYm; } else { xM=sBXM; xm=sBXm; yM=sBYM; ym=sBYm; } xl="X"; yl="Y"; break; case YZ: if (zoomMode == SMALL) { xM=sSYM; xm=sSYm; yM=sSZM; ym=sSZm; } else { xM=sBYM; xm=sBYm; yM=sBZM; ym=sBZm; } xl="Y"; yl="Z"; break; case XZ: if (zoomMode == SMALL) { xM=sSXM; xm=sSXm; yM=sSZM; ym=sSZm; } else { xM=sBXM; xm=sBXm; yM=sBZM; ym=sBZm; } xl="X"; yl="Z"; break; } [cPlot display]; [cPlot labelPlot:"Lorenz System" Titlefont:[Font newFont:"Helvetica-Oblique" size:18] Xmax:xM Xlabel:xl Xmin:xm Ymax:yM Ylabel:yl Ymin:ym axisFont:[Font newFont:"Helvetica" size:18]]; return self; } - setUp { X = [sInitValueFields doubleValueAt:0]; Y = [sInitValueFields doubleValueAt:1]; Z = [sInitValueFields doubleValueAt:2]; speed = [sSpeedField floatValue]; duration = [sDurationField floatValue]; S = [sSField doubleValue]; R = [sRField doubleValue]; B = [sBField doubleValue]; [self setSoundMode:DSP]; axisMode = [sAxisButtons selectedTag]; plotMode = XY; delta_T = .01 * (25.0 / R); return self; } - setSoundMode:(int)mode { switch (soundMode = mode) { case DSP: [[sFreqBox setTitle:"Frequency (Hz)"] display]; [sFreqRangeSlider setMinValue:0.0]; [sFreqRangeSlider setMaxValue:4000.0]; [sFreqRangeSlider setFloatValue:500.0]; [sFreqRangeField setFloatValue:500.0]; [sFreqCenterSlider setMinValue:0.0]; [sFreqCenterSlider setMaxValue:4000.0]; [sFreqCenterSlider setFloatValue:500.0]; [sFreqCenterField setFloatValue:500.0]; freqRange = [sFreqRangeField floatValue]; freqCenter = [sFreqCenterField floatValue]; [[sAmpBox setTitle:"Amplitude (dB)"] display]; [sAmpRangeSlider setMinValue:0.0]; [sAmpRangeSlider setMaxValue:60.0]; [sAmpRangeSlider setFloatValue:30.0]; [sAmpRangeField setFloatValue:30.0]; [sAmpCenterSlider setMinValue:-60.0]; [sAmpCenterSlider setMaxValue:0.0]; [sAmpCenterSlider setFloatValue:-20.0]; [sAmpCenterField setFloatValue:-20.0]; ampRange = [sAmpRangeField floatValue]; ampCenter = [sAmpCenterField floatValue]; break; case MIDI: [[sFreqBox setTitle:"Key"] display]; [sFreqRangeSlider setMinValue:0.0]; [sFreqRangeSlider setMaxValue:127.0]; [sFreqRangeSlider setFloatValue:64.0]; [sFreqRangeField setFloatValue:64.0]; [sFreqCenterSlider setMinValue:0.0]; [sFreqCenterSlider setMaxValue:127.0]; [sFreqCenterSlider setFloatValue:64.0]; [sFreqCenterField setFloatValue:64.0]; freqRange = [sFreqRangeField floatValue]; freqCenter = [sFreqCenterField floatValue]; [[sAmpBox setTitle:"Velocity"] display]; [sAmpRangeSlider setMinValue:0.0]; [sAmpRangeSlider setMaxValue:127.0]; [sAmpRangeSlider setFloatValue:64.0]; [sAmpRangeField setFloatValue:64.0]; [sAmpCenterSlider setMinValue:0.0]; [sAmpCenterSlider setMaxValue:127.0]; [sAmpCenterSlider setFloatValue:64.0]; [sAmpCenterField setFloatValue:64.0]; ampRange = [sAmpRangeField floatValue]; ampCenter = [sAmpCenterField floatValue]; break; default: break; } return self; } - changeInitValue:sender { X = [sender doubleValueAt:0]; Y = [sender doubleValueAt:1]; Z = [sender doubleValueAt:2]; return self; } - changeDurationField:sender { duration = [sender floatValue]; [sDurationSlider setFloatValue:duration]; return self; } - changeSpeedField:sender { speed = [sender floatValue]; if (speed < 0.01) { speed = 0.01; [sender setFloatValue:speed]; } [sSpeedSlider setFloatValue:speed]; return self; } - changeFreqCenterField:sender { freqCenter = [sender floatValue]; [sFreqCenterSlider setFloatValue:freqCenter]; return self; } - changeSSlider:sender { S = [sender doubleValue]; [sSField setDoubleValue:S]; return self; } - changeRSlider:sender { R = [sender doubleValue]; [sRField setDoubleValue:R]; delta_T = .01 * (25.0 / R); return self; } - changeBSlider:sender { B = [sender doubleValue]; [sBField setDoubleValue:B]; return self; } - changeFreqRangeField:sender { freqRange = [sender floatValue]; [sFreqRangeSlider setFloatValue:freqRange]; return self; } - changeAmpCenterField:sender { ampCenter = [sender floatValue]; [sAmpCenterSlider setFloatValue:ampCenter]; return self; } - changeRField:sender { R = [sender doubleValue]; [sRSlider setDoubleValue:R]; delta_T = .01 * (25.0 / R); return self; } - changeSField:sender { S = [sender doubleValue]; [sSSlider setDoubleValue:S]; return self; } - changeBField:sender { B = [sender doubleValue]; [sBSlider setDoubleValue:B]; return self; } - changeAmpRangeField:sender { ampRange = [sender floatValue]; [sAmpRangeSlider setFloatValue:ampRange]; return self; } - changeAmpRangeSlider:sender { ampRange = [sender floatValue]; [sAmpRangeField setFloatValue:ampRange]; return self; } - changeFreqRangeSlider:sender { freqRange = [sender floatValue]; [sFreqRangeField setFloatValue:freqRange]; return self; } - changeAmpCenterSlider:sender { ampCenter = [sender floatValue]; [sAmpCenterField setIntValue:ampCenter]; return self; } - changeSpeedSlider:sender { speed = [sender floatValue]; [sSpeedField setFloatValue:speed]; return self; } - changeDurationSlider:sender { duration = [sender floatValue]; [sDurationField setFloatValue:duration]; return self; } - changeFreqCenterSlider:sender { freqCenter = [sender floatValue]; [sFreqCenterField setFloatValue:freqCenter]; return self; } - changeAxis:sender { axisMode = [sender selectedTag]; return self; } - iterateFreq:(float *)freq Amp:(float *)amp Dur:(float *)dur Next:(float *)next X:(float *)xpos Y:(float *)ypos { double xdot, ydot, zdot; switch (plotMode) { case XY: if (zoomMode == SMALL) { *xpos = (X-SXm)/(SXM-SXm); *ypos = (Y-SYm)/(SYM-SYm); } else { *xpos = (X-BXm)/(BXM-BXm); *ypos = (Y-BYm)/(BYM-BYm); } break; case YZ: if (zoomMode == SMALL) { *xpos = (Y-SYm)/(SYM-SYm); *ypos = (Z-SZm)/(SZM-SZm); } else { *xpos = (Y-BYm)/(BYM-BYm); *ypos = (Z-BZm)/(BZM-BZm); } break; case XZ: if (zoomMode == SMALL) { *xpos = (X-SXm)/(SXM-SXm); *ypos = (Z-SZm)/(SZM-SZm); } else { *xpos = (X-BXm)/(BXM-BXm); *ypos = (Z-BZm)/(BZM-BZm); } break; } switch (axisMode) { case XYZ: if (zoomMode == SMALL) *freq = (X-SXm)/(SXM-SXm); else *freq = (X-BXm)/(BXM-BXm); if (zoomMode == SMALL) *amp = (Y-SYm)/(SYM-SYm); else *amp = (Y-BYm)/(BYM-BYm); if (zoomMode == SMALL) *next = (Z-SZm)/(SZM-SZm); else *next = (Z-BZm)/(BZM-BZm); break; case YXZ: if (zoomMode == SMALL) *freq = (Y-SYm)/(SYM-SYm); else *freq = (Y-BYm)/(BYM-BYm); if (zoomMode == SMALL) *amp = (X-SXm)/(SXM-SXm); else *amp = (X-BXm)/(BXM-BXm); if (zoomMode == SMALL) *next = (Z-SZm)/(SZM-SZm); else *next = (Z-BZm)/(BZM-BZm); break; case ZYX: if (zoomMode == SMALL) *freq = (Z-SZm)/(SZM-SZm); else *freq = (Z-BZm)/(BZM-BZm); if (zoomMode == SMALL) *amp = (Y-SYm)/(SYM-SYm); else *amp = (Y-BYm)/(BYM-BYm); if (zoomMode == SMALL) *next = (X-SXm)/(SXM-SXm); else *next = (X-BXm)/(BXM-BXm); break; case YZX: if (zoomMode == SMALL) *freq = (Y-SYm)/(SYM-SYm); else *freq = (Y-BYm)/(BYM-BYm); if (zoomMode == SMALL) *amp = (Z-SZm)/(SZM-SZm); else *amp = (Z-BZm)/(BZM-BZm); if (zoomMode == SMALL) *next = (X-SXm)/(SXM-SXm); else *next = (X-BXm)/(BXM-BXm); break; case ZXY: if (zoomMode == SMALL) *freq = (Z-SZm)/(SZM-SZm); else *freq = (Z-BZm)/(BZM-BZm); if (zoomMode == SMALL) *amp = (X-SXm)/(SXM-SXm); else *amp = (X-BXm)/(BXM-BXm); if (zoomMode == SMALL) *next = (Y-SYm)/(SYM-SYm); else *next = (Y-BYm)/(BYM-BYm); break; case XZY: if (zoomMode == SMALL) *freq = (X-SXm)/(SXM-SXm); else *freq = (X-BXm)/(BXM-BXm); if (zoomMode == SMALL) *amp = (Z-SZm)/(SZM-SZm); else *amp = (Z-BZm)/(BZM-BZm); if (zoomMode == SMALL) *next = (Y-SYm)/(SYM-SYm); else *next = (Y-BYm)/(BYM-BYm); break; } *freq *= freqRange; *freq += freqCenter; *amp *= ampRange; *amp += ampCenter; *next *= speed; *dur = duration; xdot = S * (Y - X); ydot = (R * X) - Y - (X * Z); zdot = (X * Y) - (B * Z); X += xdot * delta_T; Y += ydot * delta_T; Z += zdot * delta_T; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.