"프로그램으로 고사리 그리기"를 Dart로 그리기
프로그램으로 고사리 그리기 - 강한 불로 진행
그래서 Processing에서 고사리를 그렸기 때문에 같은 것을 Dart로 써 보았습니다.
Chrome에서 수행한 결과를 먼저 보여주면 이렇게 됩니다.
아름다운.
코드는 다음과 같습니다.
pubspec.yaml
name: shida
dependencies:
browser: any
shida.html
<!-- Google の HTML Style Guide 的な省略方法 -->
<!DOCTYPE html>
<title>シダ</title>
<canvas id="canvas" width="500px" height="500px"></canvas>
<script type="application/dart" src="shida.dart"></script>
<script src="packages/browser/dart.js"></script>
shida.dart
import 'dart:math';
import 'dart:html';
CanvasRenderingContext2D ctx;
const int width = 500;
const int height = 500;
int N = 20;
num xm = 0;
num ym = 0.5;
num h = 0.6;
Random random = new Random();
num W1x(num x, num y) {
return 0.836 * x + 0.044 * y;
}
num W1y(num x, num y) {
return -0.044 * x + 0.836 * y + 0.169;
}
num W2x(num x, num y) {
return -0.141 * x + 0.302 * y;
}
num W2y(num x, num y) {
return 0.302 * x + 0.141 * y + 0.127;
}
num W3x(num x, num y) {
return 0.141 * x - 0.302 * y;
}
num W3y(num x, num y) {
return 0.302 * x + 0.141 * y + 0.169;
}
num W4x(num x, num y) {
return 0;
}
num W4y(num x, num y) {
return 0.175337 * y;
}
void f(int k, num x, num y) {
if (0 < k) {
f(k - 1, W1x(x, y), W1y(x, y));
if (random.nextDouble() < 0.3) f(k - 1, W2x(x, y), W2y(x, y));
if (random.nextDouble() < 0.3) f(k - 1, W3x(x, y), W3y(x, y));
if (random.nextDouble() < 0.3) f(k - 1, W4x(x, y), W4y(x, y));
} else {
num s = 409;
point(x * s + width * 0.5, height - y * s);
}
}
void point(num x, num y) {
ctx.fillRect(x, y, 1, 1);
}
main() {
CanvasElement canvas = document.query('#canvas');
ctx = canvas.getContext('2d');
ctx.fillStyle = 'rgb(0, 128, 0)';
f(N, 0, 0);
}
Reference
이 문제에 관하여("프로그램으로 고사리 그리기"를 Dart로 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mozukichi/items/08b72c9934d3c0c09936텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)