Vainzou — 2013-05-06 11:59:04

Bonjour,
je commençais a regarder comment fonctionnais les arc(); (en vue de dataviz) quand est venue un petit problème.
je n'arrive pas a avoir des extrémités qui se joignent parfaitement même en utilisant les variables PI, HALF_PI etc...
voila le code

import processing.pdf.*;
//
float p = 250; //centre des arc
float f = 240; // variante pour couleur du stroke
void setup() {
  size(500, 500);
  beginRecord(PDF, "line.pdf"); 
  background(255, 255);
  noFill();
  smooth();
  strokeCap(SQUARE);
  strokeWeight(50);
  for ( float av = 0; av< TWO_PI; av+=QUARTER_PI) {
    stroke(f, 10, 10);
    f-=20;
    arc(p, p, 350, 350, 0+av, QUARTER_PI+av);
  }
  endRecord();
}

L'idée étant d'arriver a des choses comme ceci,
http://i.stack.imgur.com/BAx7u.jpg
Aussi il y a peut être une méthode plus simple ou autre(dessiner la forme et pas utiliser Stroke?)?
C'est surment trés simple mais je ne trouve pas.
Merci d'avance
++

Mushussu — 2013-05-06 15:15:18

Bonjour,

Dans l'algorithme de calcul des arcs, il doit y avoir une approximation. Tu peux "tricher" :

// import processing.pdf.*;

float p = 250; //centre des arc
int f = 240; // variante pour couleur du stroke

void setup() {
  size(500, 500);
  smooth();
  noLoop();
}

void draw() {
  // beginRecord(PDF, "line.pdf"); 
  background(255, 255);
  noFill();
  smooth();
  strokeCap(SQUARE);
  strokeWeight(50);
  for ( int i = 0; i< 8; i++) {
    stroke(f, 10, 10);
    f -= 20;
    arc(p, p, 350, 350, i * QUARTER_PI - 0.003, QUARTER_PI +  i * QUARTER_PI+ 0.003);
  }
  // endRecord();
}
Vainzou — 2013-05-07 09:56:52

Oui c'est une solution.:)
sachant que plus le diamètre est grand plus la valeur d'ajustement sera grande :s
(le rendue png est différent du rendue pdf/vectorie d'ailleurs)
je vais me débrouiller avec ça en attendant une correction/meilleur solution.