Revision da36b97e
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/objects/FactorySticker.java | ||
---|---|---|
34 | 34 |
class FactorySticker |
35 | 35 |
{ |
36 | 36 |
private static final float SQ2 = (float)Math.sqrt(2); |
37 |
private static final float SQ3 = (float)Math.sqrt(3); |
|
38 |
|
|
37 |
private static final float REX_X,REX_R,REX_B,REX_A, REX_P, REX_T, REX_C, REX_S; |
|
39 | 38 |
private static FactorySticker mThis; |
40 | 39 |
|
40 |
static |
|
41 |
{ |
|
42 |
float F = REX_D*SQ2; |
|
43 |
float G = (1-REX_D)*SQ2/2; |
|
44 |
|
|
45 |
REX_X = (0.5f-REX_D*REX_D)/(2*REX_D); |
|
46 |
REX_R = (float)Math.sqrt(2*REX_X*REX_X+0.5f); |
|
47 |
REX_B = (float) ((180/Math.PI)*(2*Math.asin( Math.sqrt(REX_D*REX_D-REX_D+0.5f) / (2*REX_R) ))); |
|
48 |
REX_A = (float) ((180/Math.PI)*Math.acos(REX_X/REX_R)) - 45; |
|
49 |
REX_P = 45 + REX_B/2 + REX_A; |
|
50 |
REX_T = (float) ( Math.tan( (Math.PI/180)*(45-REX_P/2) ) ); |
|
51 |
REX_C = (float)(REX_R/Math.cos((Math.PI/180)*REX_B/2) ); |
|
52 |
REX_S = (float)(1/Math.sqrt(1+4*G*G/(F*F))); |
|
53 |
} |
|
54 |
|
|
41 | 55 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
42 | 56 |
|
43 | 57 |
private FactorySticker() |
... | ... | |
246 | 260 |
|
247 | 261 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
248 | 262 |
|
249 |
void drawRexCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius) |
|
263 |
void drawRexCornerSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius1, float radius2)
|
|
250 | 264 |
{ |
251 | 265 |
paint.setColor(color); |
252 | 266 |
paint.setStyle(Paint.Style.FILL); |
... | ... | |
256 | 270 |
paint.setStyle(Paint.Style.STROKE); |
257 | 271 |
paint.setStrokeWidth(stroke*TEXTURE_HEIGHT); |
258 | 272 |
|
259 |
float F = (0.5f-REX_D)*SQ2*(SQ3-1); |
|
260 |
float H1 = F*(1.0f + 2*SQ3/3); |
|
261 |
float H2 = F*(0.5f + SQ3/6); |
|
262 |
float D = H2*SQ3; |
|
263 |
|
|
264 |
float cx1 = left+ TEXTURE_HEIGHT*0.5f; |
|
265 |
float cy1 = top + TEXTURE_HEIGHT*(0.5f+H1); |
|
266 |
float cx2 = left+ TEXTURE_HEIGHT*(0.5f-D); |
|
267 |
float cy2 = top + TEXTURE_HEIGHT*(0.5f+H2); |
|
268 |
float cx3 = left+ TEXTURE_HEIGHT*(0.5f+D); |
|
269 |
float cy3 = top + TEXTURE_HEIGHT*(0.5f+H2); |
|
270 |
|
|
271 |
float R1= TEXTURE_HEIGHT*(1-2*REX_D); |
|
272 |
|
|
273 |
canvas.drawArc( cx1-R1, cy1-R1, cx1+R1, cy1+R1, 255, 30, false ,paint); |
|
274 |
canvas.drawArc( cx2-R1, cy2-R1, cx2+R1, cy2+R1, 315, 30, false ,paint); |
|
275 |
canvas.drawArc( cx3-R1, cy3-R1, cx3+R1, cy3+R1, 195, 30, false ,paint); |
|
276 |
|
|
277 |
float cx = left+ TEXTURE_HEIGHT*0.5f; |
|
278 |
float cy = top + TEXTURE_HEIGHT*0.5f; |
|
279 |
float R2 = radius*TEXTURE_HEIGHT; |
|
280 |
float dist = ( (SQ3/3)*F - SQ2*radius )*TEXTURE_HEIGHT; |
|
281 |
float dist2= 1.0f*(SQ3/3)*F*TEXTURE_HEIGHT; |
|
282 |
float tmp = SQ2*radius*TEXTURE_HEIGHT; |
|
283 |
float distX= (SQ3/2)*dist2 - 1.05f*tmp; |
|
284 |
float distY= (0.5f )*dist2 - 0.90f*tmp; |
|
285 |
|
|
286 |
canvas.drawArc( cx -R2, cy-dist -R2, cx +R2, cy-dist +R2, 225, 90, false ,paint); |
|
287 |
canvas.drawArc( cx-distX-R2, cy+distY-R2, cx-distX+R2, cy+distY+R2, 75,120, false ,paint); |
|
288 |
canvas.drawArc( cx+distX-R2, cy+distY-R2, cx+distX+R2, cy+distY+R2, 345,120, false ,paint); |
|
289 |
} |
|
273 |
float F = REX_D*SQ2; |
|
274 |
float G = (1-REX_D)*SQ2/2; |
|
290 | 275 |
|
291 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
276 |
float cx1 = left + (0.5f-F/2)*TEXTURE_HEIGHT; |
|
277 |
float cx2 = left + (0.5f+F/2)*TEXTURE_HEIGHT; |
|
278 |
float cy = top + (0.5f+G/3)*TEXTURE_HEIGHT; |
|
292 | 279 |
|
293 |
void drawRexFaceSticker(Canvas canvas, Paint paint, int left, int top, int color, float stroke, float radius) |
|
294 |
{ |
|
295 |
paint.setColor(color); |
|
296 |
paint.setStyle(Paint.Style.FILL); |
|
297 |
canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint); |
|
280 |
canvas.drawLine(cx1, cy, cx2, cy, paint); |
|
298 | 281 |
|
299 |
paint.setColor(COLOR_BLACK); |
|
300 |
paint.setStyle(Paint.Style.STROKE); |
|
301 |
paint.setStrokeWidth(stroke*TEXTURE_HEIGHT); |
|
282 |
float X = REX_C-F/2; |
|
283 |
float R1 = TEXTURE_HEIGHT*(REX_R + 0.5f*stroke); |
|
284 |
float cx3 = left + (0.5f-X)*TEXTURE_HEIGHT; |
|
285 |
float cx4 = left + (0.5f+X)*TEXTURE_HEIGHT; |
|
302 | 286 |
|
303 |
float cx1 = left+ TEXTURE_HEIGHT*REX_D; |
|
304 |
float cy1 = top + TEXTURE_HEIGHT*(1-REX_D); |
|
305 |
float cx2 = left+ TEXTURE_HEIGHT*REX_D; |
|
306 |
float cy2 = top + TEXTURE_HEIGHT*REX_D; |
|
307 |
float cx3 = left+ TEXTURE_HEIGHT*(1-REX_D); |
|
308 |
float cy3 = top + TEXTURE_HEIGHT*REX_D; |
|
309 |
float cx4 = left+ TEXTURE_HEIGHT*(1-REX_D); |
|
310 |
float cy4 = top + TEXTURE_HEIGHT*(1-REX_D); |
|
311 |
float R1 = TEXTURE_HEIGHT*(1-2*REX_D); |
|
312 |
|
|
313 |
canvas.drawArc( cx1-R1, cy1-R1, cx1+R1, cy1+R1, 300, 30, false ,paint); |
|
314 |
canvas.drawArc( cx2-R1, cy2-R1, cx2+R1, cy2+R1, 30, 30, false ,paint); |
|
315 |
canvas.drawArc( cx3-R1, cy3-R1, cx3+R1, cy3+R1, 120, 30, false ,paint); |
|
316 |
canvas.drawArc( cx4-R1, cy4-R1, cx4+R1, cy4+R1, 210, 30, false ,paint); |
|
317 |
|
|
318 |
float cx = left+ TEXTURE_HEIGHT*0.5f; |
|
319 |
float cy = top + TEXTURE_HEIGHT*0.5f; |
|
320 |
float R2 = radius*TEXTURE_HEIGHT; |
|
321 |
float dist = ( (0.5f-REX_D)*(SQ3-1) - (2*SQ3/3)*radius )*TEXTURE_HEIGHT; |
|
322 |
|
|
323 |
canvas.drawArc( cx+dist-R2, cy-R2, cx+dist+R2, cy+R2, 330, 60, false ,paint); |
|
324 |
canvas.drawArc( cx-R2, cy+dist-R2, cx+R2, cy+dist+R2, 60, 60, false ,paint); |
|
325 |
canvas.drawArc( cx-dist-R2, cy-R2, cx-dist+R2, cy+R2, 150, 60, false ,paint); |
|
326 |
canvas.drawArc( cx-R2, cy-dist-R2, cx+R2, cy-dist+R2, 240, 60, false ,paint); |
|
287 |
canvas.drawArc( cx3-R1, cy-R1, cx3+R1, cy+R1, 360-REX_B/2, REX_B/2, false ,paint); |
|
288 |
canvas.drawArc( cx4-R1, cy-R1, cx4+R1, cy+R1, 180 , REX_B/2, false ,paint); |
|
289 |
|
|
290 |
float cx5 = left + (0.5f+F/2-radius2)*TEXTURE_HEIGHT; |
|
291 |
float cx6 = left + (0.5f-F/2+radius2)*TEXTURE_HEIGHT; |
|
292 |
float cy1 = top + (0.5f+G/3-radius2)*TEXTURE_HEIGHT;; |
|
293 |
float R2 = TEXTURE_HEIGHT*radius2; |
|
294 |
|
|
295 |
canvas.drawArc( cx5-R2, cy1-R2, cx5+R2, cy1+R2, 0, 90, false ,paint); |
|
296 |
canvas.drawArc( cx6-R2, cy1-R2, cx6+R2, cy1+R2, 90, 90, false ,paint); |
|
297 |
|
|
298 |
float cx7 = left + 0.5f*TEXTURE_HEIGHT; |
|
299 |
float cy2 = top + (0.5f-2*G/3 + radius1/REX_S)*TEXTURE_HEIGHT; |
|
300 |
float R3 = TEXTURE_HEIGHT*(radius1 + 0.5f*stroke); |
|
301 |
canvas.drawArc( cx7-R3, cy2-R3, cx7+R3, cy2+R3, 270-(90-REX_B/2), 180-REX_B, false ,paint); |
|
327 | 302 |
} |
328 | 303 |
|
329 | 304 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
338 | 313 |
paint.setStyle(Paint.Style.STROKE); |
339 | 314 |
paint.setStrokeWidth(stroke*TEXTURE_HEIGHT); |
340 | 315 |
|
341 |
final float D = 0.5f - REX_D; |
|
342 |
final float F = 0.5f*(0.5f - D*(SQ3-1)); |
|
316 |
final float D = ( 0.5f - (0.5f-REX_D)/3); |
|
317 |
float cx1 = left+ TEXTURE_HEIGHT*(0.5f-REX_X); |
|
318 |
float cy1 = top + TEXTURE_HEIGHT*(0.5f+REX_X+D); |
|
319 |
float cx2 = left+ TEXTURE_HEIGHT*(0.5f+REX_X); |
|
320 |
float R1 = TEXTURE_HEIGHT*REX_R; |
|
321 |
|
|
322 |
canvas.drawArc( cx1-R1, cy1-R1, cx1+R1, cy1+R1, 315-REX_A-REX_B, REX_B, false ,paint); |
|
323 |
canvas.drawArc( cx2-R1, cy1-R1, cx2+R1, cy1+R1, 225+REX_A , REX_B, false ,paint); |
|
343 | 324 |
|
344 |
float cx1 = left+ TEXTURE_HEIGHT*REX_D; |
|
345 |
float cy = top + TEXTURE_HEIGHT*(1-REX_D-F+0.5f); |
|
346 |
float cx2 = left+ TEXTURE_HEIGHT*(1-REX_D); |
|
347 |
float R1 = 1.0f*TEXTURE_HEIGHT*(1-2*REX_D); |
|
325 |
float CORR_Y = radius/12; |
|
326 |
float CORR_A = 10; |
|
327 |
float sin = (float)Math.sin(Math.PI*REX_P/180); |
|
328 |
float cx = left + 0.5f*TEXTURE_HEIGHT; |
|
329 |
float cy = top + ( 0.5f + 2*(0.5f-REX_D)/3 -CORR_Y -radius/sin )*TEXTURE_HEIGHT; |
|
330 |
float R2 = TEXTURE_HEIGHT*radius; |
|
348 | 331 |
|
349 |
canvas.drawArc( cx1-R1, cy-R1, cx1+R1, cy+R1, 270, 30, false ,paint); |
|
350 |
canvas.drawArc( cx2-R1, cy-R1, cx2+R1, cy+R1, 240, 30, false ,paint); |
|
332 |
canvas.drawArc( cx-R2, cy-R2, cx+R2, cy+R2, 90-(REX_P-CORR_A), 2*(REX_P-CORR_A), false ,paint); |
|
351 | 333 |
|
352 |
float cx = left + TEXTURE_HEIGHT*0.5f; |
|
353 |
float R2 = radius*TEXTURE_HEIGHT; |
|
354 |
cy = top + TEXTURE_HEIGHT*(0.5f+F-(2*SQ3/3)*radius); |
|
334 |
float F = 0.1f; |
|
335 |
float G = 0.6f; |
|
336 |
float R3 = TEXTURE_HEIGHT*radius*G*0.9f; |
|
337 |
float X = G*radius/REX_T; |
|
338 |
float cx4 = left + X*TEXTURE_HEIGHT; |
|
339 |
float cx3 = left + (1-X)*TEXTURE_HEIGHT; |
|
340 |
float cy3 = top + (0.5f - (0.5f-REX_D)/3 + G*radius - F*stroke)*TEXTURE_HEIGHT; |
|
355 | 341 |
|
356 |
canvas.drawArc( cx-R2, cy-R2, cx+R2, cy+R2, 60, 60, false ,paint); |
|
342 |
canvas.drawArc( cx3-R3, cy3-R3, cx3+R3, cy3+R3, 270 , 90+REX_P, false ,paint); |
|
343 |
canvas.drawArc( cx4-R3, cy3-R3, cx4+R3, cy3+R3, 270-(90+REX_P), 90+REX_P, false ,paint); |
|
357 | 344 |
|
358 |
cy = top + (0.5f-F)*TEXTURE_HEIGHT;
|
|
345 |
float cy5 = top + D*TEXTURE_HEIGHT;
|
|
359 | 346 |
|
360 |
paint.setStrokeWidth(0.6f*stroke*TEXTURE_HEIGHT);
|
|
361 |
canvas.drawLine(left, cy, left+TEXTURE_HEIGHT, cy, paint);
|
|
347 |
paint.setStrokeWidth((1-2*F)*stroke*TEXTURE_HEIGHT);
|
|
348 |
canvas.drawLine(left, cy5, left+TEXTURE_HEIGHT, cy5, paint);
|
|
362 | 349 |
} |
363 | 350 |
} |
Also available in: Unified diff
Rex Cube - new mesh, textures and icon.