コード例 #1
0
void generateData () {

	int k;
	int sx;
	int sy;
	Complex z, w, *c;
	if (fracData == NULL) allocData ();
	int *fracPoint = fracData;
	for (sx = 0; sx < n1; ++sx) {
		for (sy = 0; sy < n2; ++sy, ++fracPoint) {
			screenToComplex (sx, sy, &w);
			z = w;
			if (mode == 1) c = &w;
			else c = &julia;
			for (k = 0; k < MAX_ITERATIONS; ++k) {
				z = cmultComplex (&z, &z);
//				z = cmultComplex (&z, &z);
				z = addComplex (&z, c);
//				z = sinComplex (&z);
//				z = cmultComplex (c, &z);
//				z.real = c->imaginary + z.real;
//				z.imaginary = c->real - z.imaginary;
//				z = cmultComplex (c, &z);
				if (z.real * z.real + z.imaginary * z.imaginary > ESCAPE_RADIUS) break;
			}
			*fracPoint = k;
		}
	}
}
コード例 #2
0
inline void screenToComplex (int sx, int sy, Complex *z) {

	double complexHeight = INIT_COMPLEX_DOMAIN_WIDTH * (double)n2 / (double)n1;
	Complex sub = newComplex (INIT_COMPLEX_DOMAIN_WIDTH / 2, complexHeight / 2);
	*z = newComplex (INIT_COMPLEX_DOMAIN_WIDTH * (double)(sx) / (double)(n1), complexHeight * (double)(sy) / (double)(n2));
	*z = minusComplex (z, &sub);
	*z = rmultComplex (zoom, z);
	*z = addComplex (z, &trans);
}
コード例 #3
0
ファイル: main.c プロジェクト: Chuvi-w/cpp
int main() {
  Comp a = {1, 0};
  Comp b = {2, 1};
  Comp c = addComplex(a, b);

  show(a);
  show(b);
  show(c);

  return 0;
}
コード例 #4
0
void mouse (int button, int state, int x, int y) {

	static int clickx;
	static int clicky;
	switch (button) {
		case GLUT_LEFT_BUTTON:
			if (state == GLUT_DOWN) {
				Complex c;
				screenToComplex (x, (n2 - y - 1), &c);
				if (glutGetModifiers () == GLUT_ACTIVE_SHIFT) {
					if (mode == 1) {
						mode = 0;
						julia = c;
					}
					else {
						mode = 1;
					}
					trans = newComplex (0, 0);
					zoom = 2;
				}
				else {
					trans = c;
					if (glutGetModifiers () == GLUT_ACTIVE_CTRL) zoom /= 0.7;
					else zoom *= 0.7;
				}
				generateData ();
				glutPostRedisplay ();
			}
			break;
		case GLUT_RIGHT_BUTTON:
			if (state == GLUT_DOWN) {
				clickx = x;
				clicky = y;
			}
			else {
				Complex c;
				Complex r;
				screenToComplex (clickx, (n2 - clicky - 1), &c);
				screenToComplex (x, (n2 - y - 1), &r);
				trans = addComplex (&trans, &c);
				trans = minusComplex (&trans, &r);
				generateData ();
				glutPostRedisplay ();
			}
		default:
			break;
	}
}
コード例 #5
0
ファイル: fft.c プロジェクト: SproutOrc/MSP430F149ILI9325
//input sample array, # of points
void FFT(Complex *data, Complex const *factor, int num, int series)
{
    //temporary storage variables 
    Complex topData;
    Complex lowData;
    Complex dataIndex;
    //difference between top/lower leg
    int leg_diff;
    int lower_leg;
    //index/step through twiddle constant 
    int index = 0;
    //step between values
    int step = 1;
    //difference between upper & lower legs
    leg_diff = num / 2;
    
    imagSetToZero(data, num);
    
    //for N-point FFT
    for (int i = 0; i < series; i++)                   
    {
        index = 0;
        for (int j = 0; j < leg_diff; j++) {
            for (int upper_leg = j; upper_leg < num; upper_leg += (2 * leg_diff)) {
                lower_leg = upper_leg + leg_diff;

                addComplex(&topData, (data + upper_leg), (data + lower_leg));
                subComplex(&lowData, (data + upper_leg), (data + lower_leg));
                dataIndex.real = (factor + index)->real;
                dataIndex.imag = (factor + index)->imag;
                mulComplex((data + lower_leg), &lowData, &dataIndex);
                (data + upper_leg)->real = topData.real;
                (data + upper_leg)->imag = topData.imag;
            }
            index += step;
        }

        leg_diff >>= 1;
        step *= 2;
    }
    inReverse(data, num);
}