SipeedのLongan nanoには160x80のフルカラーLCDがついてるので、少し遊んでみます。
マンデルブロの前にすこしだけ、懐かしいものを。
#ランダム四角塗りつぶし
ランダムで四角を書いて、ランダムで色を塗っていきます。
#include "lcd/lcd.h"
#include <string.h>
#include <stdlib.h>
int main(void)
{
Lcd_Init();
LCD_Clear(BLACK);
BACK_COLOR=BLACK;
while(1)
{
LCD_Fill(rand()%160,rand()%80,rand()%160,rand()%80,rand()%65536);
}
}
BadApple!!のmain.cを書き換えると楽です。
Longan nano でランダムFill pic.twitter.com/9I3iShHKFT
— 大沼 功(Shigezoneテンインサンジャナイ 求職中なのよ) (@myston) November 24, 2019
昔懐かしい感じ。
PC-8001とか、PC-8801とかのBASICでよくやりましたよね。
これ眺めてるだけでも結構楽しいです。
ちなみに、LCD_FILLのところを
LCD_DrawPoint(rand()%160,rand()%80,rand()%65536);
にすると、ランダムにランダムな色な点が打たれますので、ちょっと気持ち悪いかもしれませんw
#マンデルブロ描画
フラクタルで有名なマンデルブロは、なかなか目を引きますので題材としてはいいかなと思いました。
よくわからないので、下記を参考にしています。
これをLongan nano用にします。
そんなに変わりません。
#include "lcd/lcd.h"
#include <string.h>
#include <stdlib.h>
int main(void)
{
Lcd_Init();
LCD_Clear(BLACK);
BACK_COLOR=BLACK;
int pixel,size,k;
float i,j,x,y,a,b,_a,_b;
size = 4;
pixel = 120;
for (i = 0; i < pixel; i++) {
x = i * size/pixel -size/2;
for(j = 0; j < pixel;j++) {
y = j *size/pixel - size/2;
a = 0;
b = 0;
for(k = 0;k < 500;k++){
_a = a * a - b * b + x;
_b = 2 * a * b + y;
a = _a;
b = _b;
if(a * a + b * b > 4.0) {
LCD_DrawPoint(i,j,WHITE);
break;
}
}
}
}
}
実行結果がこちら。
Longan nanoでマンデルブロ描画 pic.twitter.com/kCxp30ahRb
— 大沼 功(Shigezoneテンインサンジャナイ 求職中なのよ) (@myston) November 26, 2019
120x120で各点最大500回の計算です。
10秒かからないくらいですかね。
ドットはWHITEで打ってるので、条件で色を変えるようにすると、きれいなマンデルブロ集合が描画されるはずです。