|
191 | 191 | }, |
192 | 192 | { |
193 | 193 | "cell_type": "code", |
194 | | - "execution_count": 43, |
| 194 | + "execution_count": 47, |
195 | 195 | "metadata": {}, |
196 | 196 | "outputs": [ |
197 | 197 | { |
|
243 | 243 | "cat mandel.c" |
244 | 244 | ] |
245 | 245 | }, |
| 246 | + { |
| 247 | + "cell_type": "code", |
| 248 | + "execution_count": 48, |
| 249 | + "metadata": {}, |
| 250 | + "outputs": [ |
| 251 | + { |
| 252 | + "name": "stdout", |
| 253 | + "output_type": "stream", |
| 254 | + "text": [ |
| 255 | + "/* Python\n", |
| 256 | + "def create_fractal(image, width, height, iters):\n", |
| 257 | + " pixel_size_x = 3.0 / width\n", |
| 258 | + " pixel_size_y = 2.0 / height\n", |
| 259 | + " for y in range(height):\n", |
| 260 | + " imag = y * pixel_size_y - 1\n", |
| 261 | + " yy = y*width\n", |
| 262 | + " for x in range(width):\n", |
| 263 | + " real = x * pixel_size_x - 2\n", |
| 264 | + " color = mandel(real, imag, iters)\n", |
| 265 | + " image[yy+x] = color\n", |
| 266 | + "\n", |
| 267 | + "*/\n", |
| 268 | + "\n", |
| 269 | + "int mandel(int x, int y, int max_iters, unsigned char * val);\n", |
| 270 | + "\n", |
| 271 | + "void create_fractal(unsigned char * image, int width, int height, \n", |
| 272 | + " int iters) {\n", |
| 273 | + " float pixel_size_x = 3.0 / width;\n", |
| 274 | + " float pixel_size_y = 2.0 / height;\n", |
| 275 | + " for (int y=0; y<height; y++) {\n", |
| 276 | + " float imag = y * pixel_size_y - 1;\n", |
| 277 | + " int yy = y * width;\n", |
| 278 | + " for (int x=0; x<width; x++) {\n", |
| 279 | + " float real = x * pixel_size_x - 2;\n", |
| 280 | + " unsigned char color;\n", |
| 281 | + " int ret = mandel(real, imag, iters, &color);\n", |
| 282 | + " image[yy + x] = color;\n", |
| 283 | + " }\n", |
| 284 | + " }\n" |
| 285 | + ] |
| 286 | + } |
| 287 | + ], |
| 288 | + "source": [ |
| 289 | + "%%bash \n", |
| 290 | + "cat create_fractal.c" |
| 291 | + ] |
| 292 | + }, |
| 293 | + { |
| 294 | + "cell_type": "code", |
| 295 | + "execution_count": 49, |
| 296 | + "metadata": {}, |
| 297 | + "outputs": [ |
| 298 | + { |
| 299 | + "name": "stdout", |
| 300 | + "output_type": "stream", |
| 301 | + "text": [ |
| 302 | + "#include <stdio.h>\n", |
| 303 | + "#include <pbm.h>\n", |
| 304 | + "\n", |
| 305 | + "int mandel(int x, int y, int max_iters, unsigned char * val);\n", |
| 306 | + "\n", |
| 307 | + "void create_fractal(unsigned char * image, int width, int height, \n", |
| 308 | + " int iters);\n", |
| 309 | + "\n", |
| 310 | + "int main(int argc, const char *argv[], const char * env[])\n", |
| 311 | + "{\n", |
| 312 | + " int width = 1500;\n", |
| 313 | + " int height = 1000;\n", |
| 314 | + " FILE * fid = NULL;\n", |
| 315 | + " unsigned char * image = (unsinged char*)malloc(width*height);\n", |
| 316 | + " if (NULL == image)\n", |
| 317 | + " return -1;\n", |
| 318 | + " fid = fopen(\"c.pbm\", \"wb\");\n", |
| 319 | + " if (NULL == fid)\n", |
| 320 | + " return -2;\n", |
| 321 | + " create_fractal(image, width, height);\n", |
| 322 | + " pbm_writepbminit(fid, width, height, 0);\n", |
| 323 | + " for (int i=0; i<height; i++)\n", |
| 324 | + " pbm_writebpmrow(fid, image + width*i, width, 0);\n", |
| 325 | + " fclose(fid);\n", |
| 326 | + " return 0;\n", |
| 327 | + "}\n" |
| 328 | + ] |
| 329 | + } |
| 330 | + ], |
| 331 | + "source": [ |
| 332 | + "%%bash\n", |
| 333 | + "cat main.c" |
| 334 | + ] |
| 335 | + }, |
| 336 | + { |
| 337 | + "cell_type": "code", |
| 338 | + "execution_count": 54, |
| 339 | + "metadata": {}, |
| 340 | + "outputs": [ |
| 341 | + { |
| 342 | + "name": "stderr", |
| 343 | + "output_type": "stream", |
| 344 | + "text": [ |
| 345 | + "\n", |
| 346 | + "real\t0m0.454s\n", |
| 347 | + "user\t0m0.452s\n", |
| 348 | + "sys\t0m0.000s\n" |
| 349 | + ] |
| 350 | + } |
| 351 | + ], |
| 352 | + "source": [ |
| 353 | + "%%bash\n", |
| 354 | + "gcc -O3 mandel.c create_fractal.c main.c -lnetpbm -o create_fractal\n", |
| 355 | + "time ./create_fractal" |
| 356 | + ] |
| 357 | + }, |
| 358 | + { |
| 359 | + "cell_type": "code", |
| 360 | + "execution_count": 55, |
| 361 | + "metadata": {}, |
| 362 | + "outputs": [ |
| 363 | + { |
| 364 | + "data": { |
| 365 | + "image/png": "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\n", |
| 366 | + "text/plain": [ |
| 367 | + "<matplotlib.figure.Figure at 0x7f3339268b50>" |
| 368 | + ] |
| 369 | + }, |
| 370 | + "metadata": {}, |
| 371 | + "output_type": "display_data" |
| 372 | + } |
| 373 | + ], |
| 374 | + "source": [ |
| 375 | + "img = Image.open('c.pbm')\n", |
| 376 | + "imshow(img); show()" |
| 377 | + ] |
| 378 | + }, |
246 | 379 | { |
247 | 380 | "cell_type": "code", |
248 | 381 | "execution_count": null, |
249 | 382 | "metadata": { |
250 | 383 | "collapsed": true |
251 | 384 | }, |
252 | 385 | "outputs": [], |
253 | | - "source": [ |
254 | | - "%bash cat " |
255 | | - ] |
| 386 | + "source": [] |
256 | 387 | } |
257 | 388 | ], |
258 | 389 | "metadata": { |
|
0 commit comments