source: spip-zone/_plugins_/adaptive_images/trunk/lib/geometrize/geometrize/shape/RotatedEllipse.class.php @ 115922

Last change on this file since 115922 was 115922, checked in by cedric@…, 6 weeks ago

Optimization de la rapidite de geometrize

File size: 5.2 KB
Line 
1<?php
2
3// Generated by Haxe 3.4.7
4class geometrize_shape_RotatedEllipse implements geometrize_shape_Shape {
5        public $x;
6        public $y;
7        public $rx;
8        public $ry;
9        public $angle;
10        public $xBound;
11        public $yBound;
12        public $color;
13
14        public function __construct($xBound, $yBound){
15                $this->x = mt_rand(0, $xBound-1);
16                $this->y = mt_rand(0, $yBound-1);
17                $this->rx = mt_rand(1, 32);
18                $this->ry = mt_rand(1, 32);
19                $this->angle = mt_rand(0, 359);
20                $this->xBound = $xBound;
21                $this->yBound = $yBound;
22        }
23
24        public function rasterize(){
25                $pointCount = 20;
26                $points = [];
27                $rads = $this->angle*(M_PI/180.0);
28                $c = cos($rads);
29                $s = sin($rads);
30
31                $_g1 = 0;
32                $_g = $pointCount;
33                while ($_g1<$_g){
34                        $_g1 = $_g1+1;
35                        $i = $_g1-1;
36                        $rot = 360.0/$pointCount*$i*(M_PI/180.0);
37                        $crx = $this->rx;
38                        $crx1 = $crx*cos($rot);
39                        $cry = $this->ry;
40                        $cry1 = $cry*sin($rot);
41                        $tx = intval($crx1*$c-$cry1*$s+$this->x);
42                        $ty = intval($crx1*$s+$cry1*$c+$this->y);
43                        $points[] = ["x" => $tx, "y" => $ty];
44                }
45
46                return geometrize_rasterizer_Rasterizer::scanlinesForPolygon($points, $this->xBound, $this->yBound);
47        }
48
49        public function mutate(){
50                $r = mt_rand(0, 3);
51                switch ($r) {
52                        case 0:
53                                {
54                                        $value = $this->x;
55                                        if (!true){
56                                                throw new HException("FAIL: lower <= upper");
57                                        }
58                                        $value1 = $value+mt_rand(-16, +16);
59                                        $max = $this->xBound-1;
60                                        if (!(0<=$max)){
61                                                throw new HException("FAIL: min <= max");
62                                        }
63                                        $tmp = null;
64                                        if ($value1<0){
65                                                $tmp = 0;
66                                        } else {
67                                                if ($value1>$max){
68                                                        $tmp = $max;
69                                                } else {
70                                                        $tmp = $value1;
71                                                }
72                                        }
73                                        $this->x = $tmp;
74                                        $value2 = $this->y;
75                                        if (!true){
76                                                throw new HException("FAIL: lower <= upper");
77                                        }
78                                        $value3 = $value2+mt_rand(-16, +16);
79                                        $max1 = $this->yBound-1;
80                                        if (!(0<=$max1)){
81                                                throw new HException("FAIL: min <= max");
82                                        }
83                                        $tmp1 = null;
84                                        if ($value3<0){
85                                                $tmp1 = 0;
86                                        } else {
87                                                if ($value3>$max1){
88                                                        $tmp1 = $max1;
89                                                } else {
90                                                        $tmp1 = $value3;
91                                                }
92                                        }
93                                        $this->y = $tmp1;
94                                }
95                                break;
96                        case 1:
97                                {
98                                        $value4 = $this->rx;
99                                        if (!true){
100                                                throw new HException("FAIL: lower <= upper");
101                                        }
102                                        $value5 = $value4+mt_rand(-16, +16);
103                                        $max2 = $this->xBound-1;
104                                        if (!(1<=$max2)){
105                                                throw new HException("FAIL: min <= max");
106                                        }
107                                        $tmp2 = null;
108                                        if ($value5<1){
109                                                $tmp2 = 1;
110                                        } else {
111                                                if ($value5>$max2){
112                                                        $tmp2 = $max2;
113                                                } else {
114                                                        $tmp2 = $value5;
115                                                }
116                                        }
117                                        $this->rx = $tmp2;
118                                }
119                                break;
120                        case 2:
121                                {
122                                        $value6 = $this->ry;
123                                        if (!true){
124                                                throw new HException("FAIL: lower <= upper");
125                                        }
126                                        $value7 = $value6+mt_rand(-16, +16);
127                                        $max3 = $this->yBound-1;
128                                        if (!(1<=$max3)){
129                                                throw new HException("FAIL: min <= max");
130                                        }
131                                        $tmp3 = null;
132                                        if ($value7<1){
133                                                $tmp3 = 1;
134                                        } else {
135                                                if ($value7>$max3){
136                                                        $tmp3 = $max3;
137                                                } else {
138                                                        $tmp3 = $value7;
139                                                }
140                                        }
141                                        $this->ry = $tmp3;
142                                }
143                                break;
144                        case 3:
145                                {
146                                        $value8 = $this->angle;
147                                        if (!true){
148                                                throw new HException("FAIL: lower <= upper");
149                                        }
150                                        $value9 = $value8+mt_rand(-4, +4);
151                                        if (!true){
152                                                throw new HException("FAIL: min <= max");
153                                        }
154                                        $tmp4 = null;
155                                        if ($value9<0){
156                                                $tmp4 = 0;
157                                        } else {
158                                                if ($value9>360){
159                                                        $tmp4 = 360;
160                                                } else {
161                                                        $tmp4 = $value9;
162                                                }
163                                        }
164                                        $this->angle = $tmp4;
165                                }
166                                break;
167                }
168        }
169
170        public function rescale($xBound, $yBound){
171                $xScale = ($xBound-1) / ($this->xBound-1);
172                $yScale = ($yBound-1) / ($this->yBound-1);
173                $this->xBound = $xBound;
174                $this->yBound = $yBound;
175                $this->x = intval(round($this->x*$xScale));
176                $this->y = intval(round($this->y*$yScale));
177                $this->rx = intval(round($this->rx*$xScale));
178                $this->ry = intval(round($this->ry*$yScale));
179        }
180
181        public function hclone(){
182                $ellipse = new geometrize_shape_RotatedEllipse($this->xBound, $this->yBound);
183                $ellipse->x = $this->x;
184                $ellipse->y = $this->y;
185                $ellipse->rx = $this->rx;
186                $ellipse->ry = $this->ry;
187                $ellipse->angle = $this->angle;
188                $ellipse->color = $this->color;
189
190                return $ellipse;
191        }
192
193        public function getType(){
194                return geometrize_shape_ShapeTypes::T_ROTATED_ELLIPSE;
195        }
196
197        /**
198         * @return array
199         */
200        public function getRawShapeData(){
201                return [
202                        $this->x,
203                        $this->y,
204                        $this->rx,
205                        $this->ry,
206                        $this->angle
207                ];
208        }
209
210        /**
211         * @return string
212         */
213        public function getSvgShapeData(){
214                $s = "<g transform=\"translate(" . $this->x . " " . $this->y . ") rotate(" . $this->angle . ") scale(" . $this->rx . " " . $this->ry . ")\">";
215                $s .= "<ellipse cx=\"" . 0 . "\" cy=\"" . 0 . "\" rx=\"" . 1 . "\" ry=\"" . 1 . "\" " . geometrize_exporter_SvgExporter::$SVG_STYLE_HOOK . " />";
216                $s .= "</g>";
217                return $s;
218        }
219
220        public function __call($m, $a){
221                if (isset($this->$m) && is_callable($this->$m)){
222                        return call_user_func_array($this->$m, $a);
223                } else {
224                        if (isset($this->__dynamics[$m]) && is_callable($this->__dynamics[$m])){
225                                return call_user_func_array($this->__dynamics[$m], $a);
226                        } else {
227                                if ('toString'==$m){
228                                        return $this->__toString();
229                                } else {
230                                        throw new HException('Unable to call <' . $m . '>');
231                                }
232                        }
233                }
234        }
235
236        function __toString(){
237                return 'geometrize.shape.RotatedEllipse';
238        }
239}
Note: See TracBrowser for help on using the repository browser.