CALC.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:
Windows编程
开发平台:
Visual C++
- /****************************************************************************
- Microsoft RPC Version 2.0
- Copyright Microsoft Corp. 1992, 1993, 1994- 1996
- mandel Example
- FILE: calc.c
- PURPOSE: Server side of the RPC distributed application Mandel
- FUNCTIONS: MandelCalc() - Do the calculations for the Windows
- Mandelbrot Set distributed drawing program.
- ****************************************************************************/
- #include <stdlib.h>
- #include <stdio.h>
- #include <windows.h>
- #ifdef RPC
- #include "mdlrpc.h"
- #endif
- #include "mandel.h"
- short calcmand(double, double, short);
- void MandelCalc(PCPOINT pcptLL,
- PLONGRECT prcDraw,
- double precision,
- DWORD ulThreshold,
- LINEBUF * pbBuf)
- {
- DWORD h, height, width;
- double dreal, dimag, dimag2;
- short maxit = 0;
- short * pbPtr;
- pbPtr = *pbBuf; // LINEBUF is an array of shorts
- dreal = pcptLL->real + ((double)prcDraw->xLeft * precision);
- dimag = pcptLL->imag + ((double)prcDraw->yBottom * precision);
- maxit = (short) ulThreshold;
- height = (prcDraw->yTop - prcDraw->yBottom) + 1;
- width = (prcDraw->xRight - prcDraw->xLeft) + 1;
- for ( ; width > 0; --width, dreal += precision) {
- for (dimag2 = dimag, h = height; h > 0; --h, dimag2 += precision) {
- if ((dreal > 4.0) || (dreal < -4.0) ||
- (dimag2 > 4.0) || (dimag2 < -4.0))
- *(pbPtr++) = 0;
- else
- *(pbPtr++) = calcmand(dreal, dimag2, maxit);
- }
- }
- }
- /* C version of the assembly language program */
- short calcmand(double dreal,
- double dimag,
- short maxit)
- {
- double x, y, xsq, ysq;
- short k;
- k = maxit;
- x = dreal;
- y = dimag;
- while (1) {
- xsq = x * x;
- ysq = y * y;
- y = 2.0 * x * y + dimag;
- x = (xsq - ysq) + dreal;
- if (--k == 0)
- return((short) (maxit - k));
- if ((xsq + ysq) > 4.0)
- return((short) (maxit - k));
- }
- }