mandelbrot demo

This commit is contained in:
Sebastien Bourdeauducq 2020-03-30 22:47:45 +08:00
parent 1eac097706
commit a351f6279a
4 changed files with 101 additions and 3 deletions

25
demo.c Normal file
View File

@ -0,0 +1,25 @@
// gcc -Wall -o demo demo.c test.o
#include <stdio.h>
#include <string.h>
int output(int x) {
static char chars[] = " .,-:;i+hHM$*#@ ";
if(x < 0) {
putchar('\n');
} else {
if(x < strlen(chars)) {
putchar(chars[x]);
} else {
printf("ERROR\n");
}
}
return 0;
}
extern int run();
int main() {
run();
return 0;
}

44
mandelbrot.py Normal file
View File

@ -0,0 +1,44 @@
from numpy import int32, float64
import sys
def run() -> int32:
minX = -2.0
maxX = 1.0
width = 78
height = 36
aspectRatio = 2.0
yScale = float64(maxX-minX)*(float64(height)/float64(width))*aspectRatio
y = 0
while y < height:
x = 0
while x < width:
c_r = minX+float64(x)*(maxX-minX)/float64(width)
c_i = float64(y)*yScale/float64(height)-yScale/2.0
z_r = c_r
z_i = c_i
i = 0
while i < 16:
if z_r*z_r + z_i*z_i > 4.0:
break
new_z_r = (z_r*z_r)-(z_i*z_i) + c_r
z_i = 2.0*z_r*z_i + c_i
z_r = new_z_r
i = i + 1
output(i)
x = x + 1
output(-1)
y = y + 1
return 0
def output(i):
if i >= 0:
sys.stdout.write(" .,-:;i+hHM$*#@ "[i])
else:
print("")
run()

View File

@ -561,7 +561,8 @@ impl<'ctx> CodeGen<'ctx> {
} }
fn output(&self) { fn output(&self) {
let triple = TargetTriple::create("riscv32-none-linux-gnu"); //let triple = TargetTriple::create("riscv32-none-linux-gnu");
let triple = TargetMachine::get_default_triple();
let target = Target::from_triple(&triple) let target = Target::from_triple(&triple)
.expect("couldn't create target from target triple"); .expect("couldn't create target from target triple");

32
test.py
View File

@ -1,2 +1,30 @@
def foo(x: int32, y: int32) -> int32: def run() -> int32:
return x + y minX = -2.0
maxX = 1.0
width = 78
height = 36
aspectRatio = 2.0
yScale = float64(maxX-minX)*(float64(height)/float64(width))*aspectRatio
y = 0
while y < height:
x = 0
while x < width:
c_r = minX+float64(x)*(maxX-minX)/float64(width)
c_i = float64(y)*yScale/float64(height)-yScale/2.0
z_r = c_r
z_i = c_i
i = 0
while i < 16:
if z_r*z_r + z_i*z_i > 4.0:
break
new_z_r = (z_r*z_r)-(z_i*z_i) + c_r
z_i = 2.0*z_r*z_i + c_i
z_r = new_z_r
i = i + 1
output(i)
x = x + 1
output(-1)
y = y + 1
return 0