-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNaturalTangent.pde
47 lines (46 loc) · 1.49 KB
/
NaturalTangent.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
RPoint NaturalTangent(RPoint sourcePoint){
//
// largeur de la zone de sensibilité
float AREA_SIZE = NATURAL_TANGENT_AREA_SIZE;
//
//ellipse(sourcePoint.x,sourcePoint.y,AREA_SIZE*2,AREA_SIZE*2);
//
RPoint tangentMedium = new RPoint();
//
for(float c=0; c<1; c+=.005){
// récupère les points de la shape ici chaque 0.5%
//
RPoint p = typo.getPoint(c);
// calcule la distance entre la souris et le point
float dist = sourcePoint.dist(p);
//
// si le point est dans la zone de sensibilité
if(dist<AREA_SIZE){
// je récupère sa tangente
RPoint t = typo.getTangent(c);
// je lui applique une puissance pour filtrer sa distance proche/loin
t.scale(pow((AREA_SIZE-dist)/AREA_SIZE,2));
// variante avec mouse pressed
if(!mousePressed){
// le cas normal donc, je fait pointer les tangeante, vers le bas
if(t.y<0){
//t.rotate(PI);
}
}
// j'ajoute la tengeante à la moyenne
// add est ici une fontion géométrique (voir RPoint->add)
tangentMedium.add(t);
//
// j'affiche les tangeantes locales
//line(p.x,p.y,p.x+t.x,p.y+t.y);
}
}
//
if(tangentMedium.dist(o)>AREA_SIZE){
// si la tengeante est trop grande, je la normalise
tangentMedium.normalize();
tangentMedium.scale(AREA_SIZE);
}
//line(sourcePoint.x-tangentMedium.x,sourcePoint.y-tangentMedium.y,sourcePoint.x+tangentMedium.x,sourcePoint.y+tangentMedium.y);
return tangentMedium;
}