#include <math.h>
#include "svg.h"

const char* nextStr(void) {
    static const char *str[] = {
        "&#x2669;",
        "香",
        "&#x266a;",
        "川", 
        "&#x266b;",
        "大", 
        "&#x266c;",
        "学",
        "&#x266d;",
        "工", 
        "&#x266e;",
        "学",
        "&#x266f;",
        "部",
    };
    static const int numStr = sizeof(str)/sizeof(char*);
    static int k = 0;
    const char* ret = str[k++];
    if (k >= numStr) {
        k=0;
    }
    return ret;
}

/* ここの定数を変えると形が変わる */
#define A 7
#define B 5
#define X PHYLLOTAXIS

double fx(double t) {  /* -1 〜 1 の範囲 */
    return cos(2*A*PI*t);
}

double fy(double t) {  /* -1 〜 1 の範囲 */
    return sin(2*B*PI*t+X);
}

double dx(double t) {  /* fx の微分 */
    return -2*A*PI*sin(2*A*PI*t);
}

double dy(double t) {  /* fy の微分 */
    return 2*B*PI*cos(2*B*PI*t+X);
}

int main(void) {
    double x0 = centerX(), y0 = centerY();
    double fontSize = 10;                                    /* フォントサイズ */
    int num = 256;                                           /* 描く文字の総数 */
    int i;
    double radius = 70;
        
    start();
    rulers();
    textFont("Arial", fontSize);             
    for (i=0; i<num; i++) {
        double t = (double)i / num; 
        double x = radius*fx(t), y = radius*fy(t);
        double angle = atan2(dy(t), dx(t));
        fill(hsb1(i/24.0*PHI, 1, 1));
        pushMatrix();
        translate(x0+x, y0+y);
        rotate(angle);
        translate(-fontSize/2, fontSize/2);
        text(nextStr(), 0, 0);
        popMatrix(); 
    }
    finish();
    return 0;
}

