Bonjour,
j'ai un petit problème je m'explique, j'effectue actuellement une application android ou j'effectue une simulation grace à l'algorithme suivant :
Cet algorithme me permet de parcourir l'ensemble de mon plan et d'attribuer une puissance qui est liée à une couleur et donc colorer pixel par pixel, l'ensemble des pixels de mon plan. Le calcul de la puissance s'effectue en fonction du placement de ma source sur le plan et des différents obstacles. Cette algorithme marche parfaitement mais le calcul n'est pas très rapide.Code:
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 pixelsSquare = 4; for (b = getPosY_Zone(); b < getHeight_Zone()-1; b = b + pixelsSquare) { for (a = getPosX_Zone(); a < getPosX_Zone() + getWidth_Zone()-1; a = a + pixelsSquare) { bestpower = -100; power = 0; for (Source s : sources) { if (s.isONSource()) { power = s.powerAtPosition( (int) (a,b) - getTotalAttenuation( s, (int) (a ,b)); if (power > bestpower) bestpower = power; } } for (int j = b; j < b + pixelsSquare; j++) { for (int i = a; i < a + pixelsSquare; i++) { simu.setPixel(i - getPosX_Zone(), j - getPosY_Zone(), PowerScale .getPowerFromValue(bestpower).getColor()); } } }
Afin d'aller plus vite j'ai décidé d'utiliser l'algorithme de Bresenham, qui va me permettre de colorer les pixels du quadrillage de mon plan en traçant des lignes de ma source jusqu'au pixel se trouvant au extrémité de mon plan. j'arrive à tracer mes différentes lignes avec le code suivant :
Seulement mon problème c'est que pour le moment je met en parametre power, j'aimerai pouvoir faire modifier power a chaque fois que je trace un pixel (rectangle dans mon cas) car pour le moment ma ligne se trace mais elle est toujours de la même couleur, normal. Je ne vois pas trop comment résoudre ce problèmeCode:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public void BresenhamAlgorithm(int x1, int y1, int x2, int y2, double power) { int x, y; int dx, dy; int xincr, yincr; int erreur; int i; int coordX, coordY; int sizePixel = 7; Canvas c = new Canvas(simu); Paint paint = new Paint(); paint.setColor(PowerScale.getPowerFromValue(power).getColor()); dx = Math.abs(x2 - x1); dy = Math.abs(y2 - y1); if (x1 < x2) { xincr = 1; } else { xincr = -1; } if (y1 < y2) { yincr = 1; } else { yincr = -1; } x = x1; y = y1; if (dx > dy) { erreur = dx / 2; for (i = 0; i < dx; i++) { x = x + xincr; erreur = erreur + dy; if (erreur > dx) { erreur = erreur - dx; y = y + yincr; } paint.setColor(PowerScale.getPowerFromValue(power).getColor()); c.drawRect(x, y, (int) (x + sizePixel), (int) (y + sizePixel), paint); } } else { erreur = dy / 2; for (i = 0; i < dy; i++) { y = y + yincr; erreur = erreur + dx; if (erreur > dy) { erreur = erreur - dy; x = x + xincr; } paint.setColor(PowerScale.getPowerFromValue(power).getColor()); c.drawRect(x, y, (int) (x + sizePixel), (int) (y + sizePixel), paint); } } }
Je vous remercie