vaja 3 predvecer
This commit is contained in:
3
vaja3/Makefile
Normal file
3
vaja3/Makefile
Normal file
@@ -0,0 +1,3 @@
|
||||
julia:
|
||||
cc -lm julia.c cplxlib.c knjiznica/bitmap.c -o julia
|
||||
|
||||
36
vaja3/cplxlib.c
Normal file
36
vaja3/cplxlib.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#include <stdio.h>
|
||||
|
||||
typedef struct {double re, im;} cplx;
|
||||
|
||||
cplx csum (cplx a, cplx b) // Complex sum
|
||||
{
|
||||
cplx sum;
|
||||
sum.re = a.re + b.re;
|
||||
sum.im = a.im + b.im;
|
||||
return sum;
|
||||
}
|
||||
|
||||
cplx cdif (cplx a, cplx b) // Complex difference
|
||||
{
|
||||
cplx difference;
|
||||
difference.re = a.re - b.re;
|
||||
difference.im = a.im - b.im;
|
||||
return difference;
|
||||
}
|
||||
|
||||
cplx cprod (cplx a, cplx b) // Complex product
|
||||
{
|
||||
cplx product;
|
||||
product.re = (a.re * b.re) - (a.im * b.im);
|
||||
product.im = (a.im * b.re) + (a.re * b.im);
|
||||
return product;
|
||||
}
|
||||
|
||||
cplx cquo (cplx a, cplx b) // Complex quotient
|
||||
{
|
||||
cplx quotient;
|
||||
quotient.re = ((a.re * b.re)+(a.im * b.im)) / ((b.re*b.re)+(b.im*b.im));
|
||||
quotient.im = ((a.im * b.re)-(a.re * b.im)) / ((b.re*b.re)+(b.im*b.im));
|
||||
return quotient;
|
||||
}
|
||||
|
||||
5
vaja3/cplxlib.h
Normal file
5
vaja3/cplxlib.h
Normal file
@@ -0,0 +1,5 @@
|
||||
typedef struct {double re, im;} cplx;
|
||||
cplx csum (cplx a, cplx b); // Complex sum
|
||||
cplx cdif (cplx a, cplx b); // Complex difference
|
||||
cplx cprod (cplx a, cplx b); // Complex product
|
||||
cplx cquo (cplx a, cplx b); // Complex quotient
|
||||
BIN
vaja3/julia
Executable file
BIN
vaja3/julia
Executable file
Binary file not shown.
BIN
vaja3/julia.bmp
Normal file
BIN
vaja3/julia.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 MiB |
47
vaja3/julia.c
Normal file
47
vaja3/julia.c
Normal file
@@ -0,0 +1,47 @@
|
||||
#include "knjiznica/bitmap.h"
|
||||
#include "cplxlib.h"
|
||||
#include "stdio.h"
|
||||
#include "math.h"
|
||||
|
||||
#define resolution 3400
|
||||
const double dimension = 1.7;
|
||||
const double orbit = 2.0;
|
||||
|
||||
unsigned char canvas[resolution][resolution]; // platno za risanje
|
||||
|
||||
unsigned char iteratePolynomial(cplx z0, cplx c)
|
||||
{
|
||||
cplx z = z0;
|
||||
for (unsigned i = 0; i<255; i++)
|
||||
{
|
||||
z = cprod(z, z);
|
||||
z = csum(z, c);
|
||||
if (sqrt((z.re*z.re)+(z.im*z.im)) > orbit) return i+1;
|
||||
}
|
||||
return 255;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
cplx c;
|
||||
double a,b;
|
||||
printf("Vnesi adicijsko konstanto polinoma: ");
|
||||
scanf("%lf%lfi", &a, &b);
|
||||
puts("Iteriram:");
|
||||
c.re = a;
|
||||
c.im = b;
|
||||
for(unsigned p = 0; p < resolution; p++)
|
||||
{
|
||||
printf(".");
|
||||
for(unsigned q = 0; q < resolution; q++)
|
||||
{
|
||||
cplx z0;
|
||||
z0.re = ((dimension/resolution) * p * 2) - dimension;
|
||||
z0.im = -(((dimension/resolution) * q * 2) - dimension);
|
||||
canvas[p][q] = iteratePolynomial(z0, c);
|
||||
}
|
||||
}
|
||||
shraniBMP(canvas, resolution, resolution, "julia.bmp");
|
||||
printf("\n\n Končano. Slika shranjena\n");
|
||||
}
|
||||
|
||||
12
vaja3/knjiznica/README.txt
Executable file
12
vaja3/knjiznica/README.txt
Executable file
@@ -0,0 +1,12 @@
|
||||
Knji¾nica za pretvorbo 2D arraya v BMP datoteko (slika).
|
||||
Deluje na platformah Windows, Linux, Mac.
|
||||
|
||||
CodeBlocks:
|
||||
1. Knji¾nico bitmap.c in header datoteko bitmap.h skopiraj v mapo svojega projekta.
|
||||
2. bitmap.cpp vkljuèi v svoj projekt. (desni klik na ime projekta -> Add files -> izberete datoteke -> Open files -> v oknu Multiple Decision izberete OK)
|
||||
3. Na vrhu svojega projekta to knji¾nico tudi vkljuèi z vrstico #include "bitmap.h"
|
||||
4. Uporabljaj funkcijo na naèin:
|
||||
|
||||
shraniBMP(ime_dvodimenzionalnega_arraya_s_podatki_tipa_unsigned_char, DIMx, DIMy, "imeslike.bmp");
|
||||
|
||||
Datoteka .bmp se shrani v mapo projekta. Èe je ni, poglejte ¹e pod mapo Debug.
|
||||
122
vaja3/knjiznica/bitmap.c
Executable file
122
vaja3/knjiznica/bitmap.c
Executable file
@@ -0,0 +1,122 @@
|
||||
#include "bitmap.h"
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
//#include <windows.h>
|
||||
|
||||
//#ifndef WIN32
|
||||
#pragma pack(push, bmp_packing, 1)
|
||||
|
||||
typedef uint8_t BYTE; // 8 nit unsigned
|
||||
typedef int32_t LONG; // 32 bit signed
|
||||
typedef uint16_t WORD; // 16 bit unsigned
|
||||
typedef char* LPCTSTR;
|
||||
typedef uint32_t DWORD; // 32 bit unsigned
|
||||
typedef uint16_t WCHAR; // 16 bit unicode char
|
||||
|
||||
typedef struct tagRGBQUAD {
|
||||
BYTE rgbBlue;
|
||||
BYTE rgbGreen;
|
||||
BYTE rgbRed;
|
||||
BYTE rgbReserved;
|
||||
} RGBQUAD;
|
||||
|
||||
typedef struct tagBITMAPINFOHEADER {
|
||||
DWORD biSize;
|
||||
LONG biWidth;
|
||||
LONG biHeight;
|
||||
WORD biPlanes;
|
||||
WORD biBitCount;
|
||||
DWORD biCompression;
|
||||
DWORD biSizeImage;
|
||||
LONG biXPelsPerMeter;
|
||||
LONG biYPelsPerMeter;
|
||||
DWORD biClrUsed;
|
||||
DWORD biClrImportant;
|
||||
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
|
||||
|
||||
typedef struct tagBITMAPFILEHEADER {
|
||||
WORD bfType;
|
||||
DWORD bfSize;
|
||||
WORD bfReserved1;
|
||||
WORD bfReserved2;
|
||||
DWORD bfOffBits;
|
||||
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
|
||||
|
||||
#pragma pack(pop, bmp_packing)
|
||||
//#endif
|
||||
|
||||
// Return 0 on failure
|
||||
int SaveBitmapToFile(void* data, unsigned int lWidth, unsigned int lHeight, unsigned int wBitsPerPixel, const char *fileName) {
|
||||
RGBQUAD palette[256];
|
||||
FILE *f;
|
||||
BITMAPINFOHEADER bmpInfoHeader = {0};
|
||||
BITMAPFILEHEADER bfh = {0};
|
||||
unsigned char *pBitmapBits=(unsigned char *)data;
|
||||
unsigned int i;
|
||||
char emptySpace[] = {0, 0, 0, 0};
|
||||
|
||||
for(i = 0; i < 256; ++i)
|
||||
{
|
||||
palette[i].rgbBlue = i;
|
||||
palette[i].rgbGreen = (i * 2) % 256;
|
||||
palette[i].rgbRed = (i * 3) % 256;
|
||||
}
|
||||
|
||||
// Set the size
|
||||
bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
// Bit count
|
||||
bmpInfoHeader.biBitCount = wBitsPerPixel;
|
||||
// Use all colors
|
||||
bmpInfoHeader.biClrImportant = 0;
|
||||
// Use as many colors according to bits per pixel
|
||||
bmpInfoHeader.biClrUsed = 0;
|
||||
// Store as un Compressed
|
||||
bmpInfoHeader.biCompression = 0; // BI_RGB;
|
||||
// Set the height in pixels
|
||||
bmpInfoHeader.biHeight = lHeight;
|
||||
// Width of the Image in pixels
|
||||
bmpInfoHeader.biWidth = lWidth;
|
||||
// Default number of planes
|
||||
bmpInfoHeader.biPlanes = 1;
|
||||
// Calculate the image size in bytes
|
||||
bmpInfoHeader.biSizeImage = lWidth* lHeight * (wBitsPerPixel/8);
|
||||
|
||||
// This value should be values of BM letters i.e 0x4D42
|
||||
// 0x4D = M 0×42 = B storing in reverse order to match with endian
|
||||
bfh.bfType = 'B'+('M' << 8);
|
||||
// <<8 used to shift ‘M’ to end
|
||||
// Offset to the RGBQUAD
|
||||
bfh.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER) + sizeof(RGBQUAD) * 256;
|
||||
// Total size of image including size of headers
|
||||
bfh.bfSize = bfh.bfOffBits + bmpInfoHeader.biSizeImage;
|
||||
|
||||
// Create the file in disk to write
|
||||
f=fopen(fileName, "wb");
|
||||
if (!f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Write the File header
|
||||
fwrite(&bfh, sizeof(bfh), 1, f);
|
||||
// Write the bitmap info header
|
||||
fwrite(&bmpInfoHeader, sizeof(bmpInfoHeader), 1, f);
|
||||
// Write the palette
|
||||
fwrite(&palette[0], sizeof(RGBQUAD), 256, f);
|
||||
// Write the RGB Data
|
||||
if(lWidth%4 == 0) {
|
||||
fwrite(pBitmapBits, bmpInfoHeader.biSizeImage, 1, f);
|
||||
} else {
|
||||
for(i = 0; i < lHeight; ++i) {
|
||||
fwrite(&pBitmapBits[i * lWidth], lWidth, 1, f);
|
||||
fwrite(emptySpace, 4 - lWidth % 4, 1, f);
|
||||
}
|
||||
}
|
||||
// Close the file handle
|
||||
fclose(f);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int shraniBMP(void *slika, unsigned int w, unsigned int l, const char *f) {
|
||||
return SaveBitmapToFile(slika, w, l, 8, f);
|
||||
}
|
||||
7
vaja3/knjiznica/bitmap.h
Executable file
7
vaja3/knjiznica/bitmap.h
Executable file
@@ -0,0 +1,7 @@
|
||||
#ifndef BITMAP_H
|
||||
#define BITMAP_H
|
||||
|
||||
int SaveBitmapToFile(void* data, unsigned int lWidth, unsigned int lHeight, unsigned int wBitsPerPixel, const char *fileName);
|
||||
int shraniBMP(void *slika, unsigned int w, unsigned int l, const char *f);
|
||||
|
||||
#endif //BITMAP_H
|
||||
Reference in New Issue
Block a user