stylet 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +2 -0
  5. data/Gemfile +16 -0
  6. data/README.org +19 -0
  7. data/Rakefile +17 -0
  8. data/bin/setup +63 -0
  9. data/bin/stylet +8 -0
  10. data/examples/.ruby-version +1 -0
  11. data/examples/00100_lib_hello_world.rb +8 -0
  12. data/examples/00110_lib_sge_check.rb +6 -0
  13. data/examples/00120_lib_/343/202/254/343/203/263/343/203/236/345/200/244/343/201/256/345/244/211/346/233/264.rb +22 -0
  14. data/examples/00130_lib_window_title.rb +8 -0
  15. data/examples/00140_lib_callbacks.rb +8 -0
  16. data/examples/00150_lib_vector.rb +5 -0
  17. data/examples/00160_lib_run.rb +4 -0
  18. data/examples/00170_lib_frame.rb +4 -0
  19. data/examples/00180_lib_config/347/242/272/350/252/215.rb +7 -0
  20. data/examples/00190_lib_/343/201/231/343/201/271/343/201/246/345/220/214/343/201/230/343/202/252/343/203/226/343/202/270/343/202/247/343/202/257/343/203/210.rb +10 -0
  21. data/examples/00200_lib_/343/203/254/343/202/267/343/203/274/343/203/220/343/203/274/343/202/222/347/234/201/347/225/245/343/201/231/343/202/213/346/226/271/346/263/225/343/201/256/343/203/206/343/202/271/343/203/210.rb +28 -0
  22. data/examples/00210_lib_delegators.rb +7 -0
  23. data/examples/00220_lib_template_method.rb +13 -0
  24. data/examples/00230_lib_/350/203/214/346/231/257/347/224/273/345/203/217/350/241/250/347/244/272.rb +9 -0
  25. data/examples/00240_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2171_/351/273/222/343/201/256/344/270/212/343/201/253/350/203/214/346/231/257.rb +18 -0
  26. data/examples/00250_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2172_/350/203/214/346/231/257/343/201/256/344/270/212/343/201/253/351/273/222.rb +17 -0
  27. data/examples/00260_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2173_/350/203/214/346/231/257/343/201/256/344/270/212/343/201/253/351/273/222_/347/224/273/351/235/242/343/202/265/343/202/244/343/202/272/343/203/225/343/202/243/343/203/203/343/203/210_/351/207/215/343/201/204.rb +27 -0
  28. data/examples/00270_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2173_/350/203/214/346/231/257/343/201/256/344/270/212/343/201/253/351/273/222_/347/224/273/351/235/242/343/202/265/343/202/244/343/202/272/343/203/225/343/202/243/343/203/203/343/203/210_/351/253/230/351/200/237/345/214/226.rb +44 -0
  29. data/examples/00280_lib_/347/211/271/345/256/232/343/201/256/343/202/250/343/203/252/343/202/242/343/201/240/343/201/221/345/276/220/343/200/205/343/201/253/346/266/210/343/201/231.rb +26 -0
  30. data/examples/00290_lib_/350/203/214/346/231/257/350/211/262/345/244/211/346/233/264.rb +5 -0
  31. data/examples/00300_lib_/343/202/255/343/203/243/343/203/251/343/202/257/343/202/277/347/224/273/345/203/217/343/202/222/350/241/250/347/244/272/343/201/231/343/202/213/344/276/213.rb +17 -0
  32. data/examples/00310_lib_/343/202/255/343/203/243/343/203/251/343/202/257/343/202/277/347/224/273/345/203/217/343/201/256/343/202/242/343/203/213/343/203/241/343/203/274/343/202/267/343/203/247/343/203/263.rb +18 -0
  33. data/examples/00320_lib_/343/202/255/343/203/243/343/203/251/343/202/257/343/202/277/346/213/241/345/244/247/347/270/256/345/260/217/345/233/236/350/273/242.rb +21 -0
  34. data/examples/00330_joystick.rb +5 -0
  35. data/examples/00340_joystick_PS3/343/202/242/343/203/212/343/203/255/343/202/260/343/203/254/343/203/220/343/203/274/343/201/256/345/213/225/343/201/215/343/201/214/345/206/205/351/203/250/343/201/247/343/201/257/345/233/233/350/247/222.rb +30 -0
  36. data/examples/00350_joystick_PS3/343/202/242/343/203/212/343/203/255/343/202/260/343/203/254/343/203/220/343/203/274/343/201/256/350/252/277/346/225/264/346/270/210/343/201/277/343/203/231/343/202/257/343/203/210/343/203/253.rb +12 -0
  37. data/examples/00360_lib_mouse.rb +5 -0
  38. data/examples/00370_lib_input.rb +29 -0
  39. data/examples/00380_lib_vputs_align.rb +8 -0
  40. data/examples/00390_/343/203/225/343/202/251/343/203/263/343/203/210/344/270/200/350/246/247.rb +15 -0
  41. data/examples/00400_lib_draw_circle.rb +8 -0
  42. data/examples/00410_SDL/343/201/256draw_rect/343/201/2571/343/203/224/343/202/257/343/202/273/343/203/253/344/275/231/345/210/206/343/201/253/346/217/217/347/224/273/343/201/225/343/202/214/343/202/213/343/201/256/343/201/247/346/263/250/346/204/217.rb +7 -0
  43. data/examples/00420_circle_on_circle.rb +10 -0
  44. data/examples/00430_rotate.rb +16 -0
  45. data/examples/00440_draw_triangle.rb +7 -0
  46. data/examples/00450_parabora_triangle.rb +37 -0
  47. data/examples/00460_ice_hockey.rb +88 -0
  48. data/examples/00470_collision_block_vs_block.rb +120 -0
  49. data/examples/00480_simple_circle_controll.rb +37 -0
  50. data/examples/00490_/347/255/211/351/200/237/347/247/273/345/213/225_uniform_velocity_rain.rb +51 -0
  51. data/examples/00500_/345/212/240/351/200/237/346/224/276/347/211/251/347/267/232_parabora_volcano.rb +94 -0
  52. data/examples/00510_3d.rb +53 -0
  53. data/examples/00520_/343/203/210/343/203/253/343/203/215/343/201/256/343/203/241/343/203/213/343/203/245/343/203/274/351/242/250/343/201/256/345/213/225/343/201/215.rb +77 -0
  54. data/examples/00530_curve_2/346/254/241/343/203/231/343/202/270/343/202/247/346/233/262/347/267/232/343/201/250/347/233/264/347/267/232/343/201/250/343/201/256/344/272/244/347/202/271.rb +43 -0
  55. data/examples/00540_curve_3/346/254/241/343/203/231/343/202/270/343/202/247/346/233/262/347/267/232.rb +40 -0
  56. data/examples/00550_curve_N/346/254/241/343/203/231/343/202/270/343/202/247/346/233/262/347/267/232.rb +92 -0
  57. data/examples/00560_curve_/343/202/271/343/203/227/343/203/251/343/202/244/343/203/263/346/233/262/347/267/232.rb +113 -0
  58. data/examples/00570_/345/206/206/351/201/213/345/213/225_circle_jet_coaster.rb +52 -0
  59. data/examples/00580_/345/206/206/343/202/222/346/212/274/343/201/231/343/201/262/343/201/243/343/201/261/343/202/213_collision_circle_vs_circle_push_or_pull.rb +56 -0
  60. data/examples/00590_/350/212/213/350/231/253/343/202/264/343/203/240/347/264/220/343/203/207/343/203/242_collision_demo_circle_worm.rb +104 -0
  61. data/examples/00600_/346/214/257/343/202/212/345/255/220_swing.rb +145 -0
  62. data/examples/00610_/345/206/205/347/251/215/343/201/250/345/244/226/347/251/215_inner_product.rb +36 -0
  63. data/examples/00620_/346/263/225/347/267/232/343/203/231/343/202/257/343/203/210/343/203/253.rb +23 -0
  64. data/examples/00630_/345/206/206/343/201/250/345/206/206/343/201/256/345/217/215/345/260/204_collision_reflect_circle_vs_circle.rb +222 -0
  65. data/examples/00640_/347/202/271/343/201/250/347/267/232/345/210/206/343/201/256/344/272/244/345/267/256/345/210/244/345/256/232_collision_ray_circle_vs_line.rb +261 -0
  66. data/examples/00650_/345/206/206/343/201/250/347/202/271/343/201/256/345/217/215/345/260/204_collision_circle_vs_dot.rb +36 -0
  67. data/examples/00660_/345/206/206/343/201/250/345/206/206/343/201/250/347/267/232/345/210/206/343/201/256/345/217/215/345/260/204/343/203/207/343/203/242_collision_demo.rb +305 -0
  68. data/examples/00670_/343/203/251/343/202/244/343/203/225/343/202/262/343/203/274/343/203/240.rb +86 -0
  69. data/examples/00680_2/347/202/271/343/202/222/351/200/232/343/202/213/347/233/264/347/267/232/343/201/256/346/226/271/347/250/213/345/274/217.rb +81 -0
  70. data/examples/00690_/343/203/222/343/203/253/343/203/231/343/203/253/343/203/210/346/233/262/347/267/232.rb +77 -0
  71. data/examples/00700_/343/202/263/343/203/203/343/203/233/346/233/262/347/267/232.rb +79 -0
  72. data/examples/00710_/343/202/267/343/202/260/343/203/242/343/202/244/343/203/211/346/233/262/347/267/232.rb +40 -0
  73. data/examples/00720_/343/202/267/343/203/200/346/244/215/347/211/251.rb +44 -0
  74. data/examples/00730_/343/202/257/343/203/252/343/203/225/343/202/251/343/203/274/343/203/211/343/202/242/343/203/210/343/203/251/343/202/257/343/202/277_/345/237/272/346/234/254.rb +29 -0
  75. data/examples/00740_/343/202/257/343/203/252/343/203/225/343/202/251/343/203/274/343/203/211/343/202/242/343/203/210/343/203/251/343/202/257/343/202/277_/346/224/271/350/211/257_/350/211/262/344/273/230/343/201/215.rb +68 -0
  76. data/examples/00750_/343/202/257/343/203/252/343/203/225/343/202/251/343/203/274/343/203/211/343/202/242/343/203/210/343/203/251/343/202/257/343/202/277_/343/203/211/343/203/274/343/203/212/343/203/204/345/236/213.rb +44 -0
  77. data/examples/00760_/347/201/253/350/212/261.rb +42 -0
  78. data/examples/00770_atan/343/201/247atan2/343/202/222/346/233/270/343/201/217.rb +26 -0
  79. data/examples/00780_/346/250/231/346/272/226/343/203/251/343/202/244/343/203/226/343/203/251/343/203/252/343/201/256atan2_sin_cos/343/202/222/344/275/277/343/201/206.rb +15 -0
  80. data/examples/00790_/350/247/222/345/272/246/343/201/250/343/203/251/343/202/270/343/202/242/343/203/263/343/201/256/347/233/270/344/272/222/345/244/211/346/217/233.rb +22 -0
  81. data/examples/00800_/347/220/203/343/201/214/347/233/264/347/267/232/347/232/204/343/201/253/345/213/225/343/201/204/343/201/246/343/201/204/343/202/213/343/201/240/343/201/221/343/201/247/345/233/236/350/273/242/343/201/227/343/201/246/343/201/204/343/202/213/343/202/210/343/201/206/343/201/253/350/246/213/343/201/210/343/202/213.rb +27 -0
  82. data/examples/00810_/343/202/267/343/203/237/343/203/245/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263_/350/273/212.rb +75 -0
  83. data/examples/00820_/343/202/267/343/203/237/343/203/245/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263_/346/210/246/350/273/212.rb +90 -0
  84. data/examples/00830_/350/247/222/345/272/246/345/267/256.rb +36 -0
  85. data/examples/00840_/346/224/276/347/211/251/347/267/232/343/201/247/347/213/231/346/222/203_/346/231/202/351/226/223/345/233/272/345/256/232.rb +61 -0
  86. data/examples/00850_/346/224/276/347/211/251/347/267/232/343/201/247/347/213/231/346/222/203_/350/247/222/345/272/246/345/233/272/345/256/232.rb +84 -0
  87. data/examples/00860_/346/224/276/347/211/251/347/267/232/343/201/247/347/213/231/346/222/203_/351/200/237/345/272/246/345/233/272/345/256/232.rb +66 -0
  88. data/examples/00870_/350/247/222/345/272/246/350/243/234/346/255/243_/345/212/240/351/200/237/343/203/237/343/202/265/343/202/244/343/203/253.rb +60 -0
  89. data/examples/00880_/345/210/235/351/200/237/343/201/214/351/200/237/343/201/204/343/203/237/343/202/265/343/202/244/343/203/253.rb +51 -0
  90. data/examples/00890_/346/255/243/350/246/217/344/271/261/346/225/260/343/201/250/346/250/231/346/272/226/345/201/217/345/267/256/343/201/256/345/217/257/350/246/226/345/214/226.rb +72 -0
  91. data/examples/00900_/345/220/221/345/277/203/345/212/233/343/201/247/345/233/236/350/273/242/343/200/220/350/247/222/345/272/2460/345/272/246/343/201/213/343/202/211/343/200/221.rb +23 -0
  92. data/examples/00910_/345/220/221/345/277/203/345/212/233/343/201/247/345/233/236/350/273/242/343/200/220/344/273/273/346/204/217/343/201/256/350/247/222/345/272/246/343/201/213/343/202/211/343/200/221.rb +33 -0
  93. data/examples/00920_/343/203/236/343/203/252/343/202/252/343/203/226/343/203/251/343/202/266/343/203/274/343/202/272/351/242/250/343/201/253/347/224/273/351/235/242/344/270/241/347/253/257/343/201/214/347/271/213/343/201/243/343/201/246/343/201/204/343/202/213/344/276/213.rb +29 -0
  94. data/examples/00930_/345/212/271/346/236/234/351/237/263.rb +17 -0
  95. data/examples/00940_/343/203/236/343/203/203/343/203/227/343/203/201/343/203/203/343/203/227/343/201/256/343/203/236/343/203/203/343/203/227/351/205/215/347/275/256.rb +71 -0
  96. data/examples/00950_/343/203/236/343/203/203/343/203/227/343/203/201/343/203/203/343/203/227/343/201/256/350/241/250/347/244/272/344/276/213.rb +28 -0
  97. data/examples/00960_/343/203/236/343/203/203/343/203/227/343/203/201/343/203/203/343/203/227/343/201/250/345/215/230/344/270/200/347/224/273/345/203/217/343/201/256/351/201/225/343/201/204/343/202/222/345/220/270/345/217/216/343/201/231/343/202/213/344/276/213.rb +47 -0
  98. data/examples/00970_observer_/343/201/235/343/201/2561_/347/233/264/346/216/245.rb +28 -0
  99. data/examples/00980_observer_/343/201/235/343/201/2562_/346/231/256/351/200/232/343/201/253Singleton/347/211/210.rb +30 -0
  100. data/examples/00990_observer_/343/201/235/343/201/2563_SimpleDelegator/347/211/210.rb +28 -0
  101. data/examples/01000_observer_/343/201/235/343/201/2564_/351/200/206/343/201/253/343/203/253/343/203/274/343/203/227/344/270/273/345/260/216.rb +28 -0
  102. data/examples/01010_observer_/343/201/235/343/201/2565_/343/201/204/343/202/215/343/202/223/343/201/252/346/211/200/343/201/213/343/202/211/345/221/274/343/202/223/343/201/247/343/201/204/343/202/213/343/201/221/343/201/251Singleton/343/201/252/343/201/256/343/201/247/345/256/211/345/205/250.rb +37 -0
  103. data/examples/01020_observer_/343/201/235/343/201/2566_/343/201/204/343/202/215/343/202/223/343/201/252/346/211/200/343/201/213/343/202/211/345/221/274/343/201/266/345/240/264/345/220/210callbacks/343/202/222/344/275/277/343/202/217/343/201/252/343/201/204/343/202/210/343/201/206/343/201/253.rb +30 -0
  104. data/examples/01030_observer_/343/201/235/343/201/2567_/343/202/250/343/203/225/343/202/247/343/202/257/343/203/210/343/202/277/343/202/271/343/202/257/343/202/222/345/233/236/343/201/231/344/276/213.rb +57 -0
  105. data/examples/01040_/343/203/236/343/202/246/343/202/271/343/201/256/344/275/215/347/275/256/343/201/253/343/203/224/343/202/257/343/202/273/343/203/253/343/202/222/346/211/223/343/201/244.rb +18 -0
  106. data/examples/01050_/343/203/224/343/202/257/343/202/273/343/203/253/345/205/250/344/275/223/343/202/222/346/233/270/343/201/215/350/276/274/343/202/200.rb +27 -0
  107. data/examples/01060_effect_/347/224/273/345/203/217/343/201/256/343/202/263/343/203/263/343/203/234/343/203/252/343/203/245/343/203/274/343/203/210/346/263/225/343/201/253/343/202/210/343/202/213/343/202/250/343/203/225/343/202/247/343/202/257/343/203/210/345/207/246/347/220/206.rb +116 -0
  108. data/examples/01070_effect_FF7/343/201/256/346/210/246/351/227/230/343/201/253/345/205/245/343/202/213/343/201/250/343/201/215/343/201/256/343/202/250/343/203/225/343/202/247/343/202/257/343/203/210.rb +33 -0
  109. data/examples/01080_effect_/350/203/214/346/231/257/343/202/222/347/267/251/343/201/217/346/266/210/343/201/227/343/201/246/343/201/204/343/201/217/343/201/250/343/202/271/343/203/240/343/203/274/343/202/272/343/201/253/343/201/252/343/202/213.rb +16 -0
  110. data/examples/01090_/347/224/273/345/203/217/343/201/256/343/202/257/343/203/255/343/202/271/343/203/225/343/202/247/343/203/274/343/203/211.rb +37 -0
  111. data/examples/01100_/343/202/271/343/202/257/343/203/252/343/203/274/343/203/263/346/203/205/345/240/261.rb +8 -0
  112. data/examples/01110_lib_contrib_menu.rb +19 -0
  113. data/examples/01120_/351/233/233/345/236/213_2P/345/257/276/346/210/246/351/242/250STG.rb +109 -0
  114. data/examples/01130_/351/233/233/345/236/213_/346/210/246/350/273/212/345/257/276/346/210/246.rb +396 -0
  115. data/examples/01140_/351/233/233/345/236/213_2P/345/257/276/346/210/246.rb +60 -0
  116. data/examples/01150_/351/233/233/345/236/213_/343/202/271/343/203/274/343/203/221/343/203/274/343/203/236/343/203/252/343/202/252/351/242/250/343/202/242/343/202/257/343/202/267/343/203/247/343/203/263.rb +1251 -0
  117. data/examples/01160_2D/343/202/242/343/203/225/343/202/243/343/203/263/345/244/211/346/217/233.rb +40 -0
  118. data/examples/01170_stackprof.rb +10 -0
  119. data/examples/01180_sdl_/343/202/242/343/203/253/343/203/225/343/202/241/343/203/226/343/203/254/343/203/263/343/203/207/343/202/243/343/203/263/343/202/260/343/201/247/351/207/215/343/201/255/345/220/210/343/201/233/345/241/227/343/202/212/346/275/260/343/201/227.rb +11 -0
  120. data/examples/01190_/343/203/221/343/203/274/343/203/206/343/202/243/343/202/257/343/203/253/345/220/214/345/243/253/343/201/247/344/270/255/345/244/256/343/201/253/345/220/221/343/201/213/343/201/206.rb +79 -0
  121. data/examples/01200_lib_OpenGL.rb +55 -0
  122. data/examples/bezier.rb +202 -0
  123. data/examples/cursor.rb +50 -0
  124. data/examples/helper.rb +38 -0
  125. data/examples/lifegame_patterns.rb +102 -0
  126. data/examples/movable_point.rb +64 -0
  127. data/examples/mtx33.rb +294 -0
  128. data/examples/setup.rb +5 -0
  129. data/examples/stage_infos.rb +1 -0
  130. data/examples/start.sh +2 -0
  131. data/examples/test_all.rb +5 -0
  132. data/examples/testgl.rb +228 -0
  133. data/examples/trash/__0060_shooting2.rb +37 -0
  134. data/examples/trash/__0090_collision_circle1.rb +50 -0
  135. data/examples/trash/__0125_circle_collision.rb +103 -0
  136. data/examples/trash/__0130_circle_collision2.rb +60 -0
  137. data/examples/trash/__0270_circle_cycle_shift.rb +29 -0
  138. data/examples/trash/__bullet_algos.rb +224 -0
  139. data/examples/trash/gunship.rb +39 -0
  140. data/examples//343/203/227/343/203/255/343/202/270/343/202/247/343/202/257/343/202/277/343/203/274/343/201/253/350/241/250/347/244/272/343/201/231/343/202/213/343/201/250/343/201/215.sh +2 -0
  141. data/lib/stylet.rb +1 -0
  142. data/lib/stylet/application_memory_record.rb +33 -0
  143. data/lib/stylet/audio.rb +455 -0
  144. data/lib/stylet/axis_support.rb +62 -0
  145. data/lib/stylet/base.rb +76 -0
  146. data/lib/stylet/callbacks.rb +62 -0
  147. data/lib/stylet/cli.rb +54 -0
  148. data/lib/stylet/collision_support.rb +56 -0
  149. data/lib/stylet/config.rb +39 -0
  150. data/lib/stylet/contrib/menu.rb +508 -0
  151. data/lib/stylet/contrib/shared_pad.rb +32 -0
  152. data/lib/stylet/contrib/sprity.rb +149 -0
  153. data/lib/stylet/core.rb +118 -0
  154. data/lib/stylet/cpu_stat.rb +58 -0
  155. data/lib/stylet/delegators.rb +54 -0
  156. data/lib/stylet/draw.rb +256 -0
  157. data/lib/stylet/draw_support/arrow.rb +56 -0
  158. data/lib/stylet/draw_support/circle.rb +63 -0
  159. data/lib/stylet/draw_support/polygon.rb +22 -0
  160. data/lib/stylet/font.rb +172 -0
  161. data/lib/stylet/fps_adjust.rb +23 -0
  162. data/lib/stylet/fps_stat.rb +41 -0
  163. data/lib/stylet/input.rb +8 -0
  164. data/lib/stylet/input/base.rb +105 -0
  165. data/lib/stylet/input/hardware_bindings.rb +65 -0
  166. data/lib/stylet/input/key_one.rb +162 -0
  167. data/lib/stylet/input/support.rb +72 -0
  168. data/lib/stylet/joystick.rb +31 -0
  169. data/lib/stylet/joystick_adapter.rb +130 -0
  170. data/lib/stylet/joystick_adapters/buffalo_snes_adapter.rb +47 -0
  171. data/lib/stylet/joystick_adapters/elecom_usb_pad_adapter.rb +30 -0
  172. data/lib/stylet/joystick_adapters/hori_rap_v3_sa_adapter.rb +46 -0
  173. data/lib/stylet/joystick_adapters/ps3_standard_adapter.rb +40 -0
  174. data/lib/stylet/joystick_adapters/unknown_adapter.rb +13 -0
  175. data/lib/stylet/keyboard.rb +15 -0
  176. data/lib/stylet/logger.rb +12 -0
  177. data/lib/stylet/mouse.rb +58 -0
  178. data/lib/stylet/palette.rb +17 -0
  179. data/lib/stylet/rect.rb +113 -0
  180. data/lib/stylet/shortcut.rb +8 -0
  181. data/lib/stylet/state.rb +87 -0
  182. data/lib/stylet/stylet.rb +44 -0
  183. data/lib/stylet/system_pause.rb +24 -0
  184. data/lib/stylet/version.rb +3 -0
  185. data/log/.gitkeep +0 -0
  186. data/stylet.gemspec +31 -0
  187. data/test/test_helper.rb +6 -0
  188. data/test/test_input_base.rb +12 -0
  189. data/test/test_input_key_one.rb +43 -0
  190. data/test/test_input_support.rb +47 -0
  191. data/test/test_sample.rb +13 -0
  192. data/test/test_state.rb +26 -0
  193. data/tips.org +16 -0
  194. metadata +391 -0
@@ -0,0 +1,36 @@
1
+ #
2
+ # 内積
3
+ #
4
+ require_relative "helper"
5
+
6
+ class App < Stylet::Base
7
+ include Helper::CursorWithObjectCollection
8
+ include Helper::MovablePoint
9
+
10
+ setup do
11
+ @points = []
12
+ @points << vec2.angle_at(Stylet::Magic.clock(3)).scale(100)
13
+ @points << vec2.angle_at(Stylet::Magic.clock(0)).scale(100)
14
+ self.title = "内積と外積"
15
+ end
16
+
17
+ update do
18
+ update_movable_points(@points, :origin => srect.center)
19
+ @points.each.with_index {|e, i| draw_vector(e, :origin => srect.center, :label => "P#{i} #{e.round(2)}") }
20
+
21
+ a, b = @points
22
+ # Bを動かしているときにはAをnormalizeした方がわかりやすい
23
+ dot_product = vec2.dot_product(a.normalize, b)
24
+ cross_product = vec2.cross_product(a.normalize, b)
25
+
26
+ vputs "内積(横): #{dot_product.round(2)}"
27
+ vputs "外積(縦): #{cross_product.round(2)}"
28
+
29
+ vC = a.normalize * dot_product
30
+ vD = a.normalize.rotate(Stylet::Magic.r90) * cross_product
31
+ draw_vector(vC, :origin => srect.center, :color => :orange)
32
+ draw_vector(vD, :origin => vC + srect.center, :color => :orange)
33
+ end
34
+
35
+ run
36
+ end
@@ -0,0 +1,23 @@
1
+ #
2
+ # 法線ベクトル
3
+ #
4
+ require_relative "helper"
5
+
6
+ class App < Stylet::Base
7
+ include Helper::CursorWithObjectCollection
8
+ include Helper::MovablePoint
9
+
10
+ setup do
11
+ @point = vec2.rand.normalize * 100
12
+ self.title = "法線ベクトル"
13
+ end
14
+
15
+ update do
16
+ update_movable_points([@point], :origin => srect.center)
17
+ [@point, @point.prep].each.with_index {|e, i| draw_vector(e, :origin => srect.center, :label => "P#{i} #{e.round(2)}") }
18
+ draw_vector(@point, :origin => srect.center)
19
+ draw_vector(@point.prep, :origin => srect.center, :color => :orange)
20
+ end
21
+
22
+ run
23
+ end
@@ -0,0 +1,222 @@
1
+ #
2
+ # 円と円の反射
3
+ #
4
+ # 反射係数の関係(正面衝突したとする)
5
+ #
6
+ # -(反射B - 反射A) / (衝突B - 衝突A) #=> 1.0
7
+ #
8
+ # 速度と質量を乗算すると運動量
9
+ #
10
+ # 運動量 = 質量 * 速度
11
+ #
12
+ # 運動量保存の法則により、衝突前の円の運動量の合計値と、衝突後の円の運動量の合計値は等しくなる
13
+ #
14
+ # 運動量保存の法則
15
+ # 質量A * 衝突A + 質量B * 衝突B = 質量A * 反射A + 質量B * 反射B
16
+ #
17
+ require_relative "helper"
18
+
19
+ class App < Stylet::Base
20
+ include Helper::CursorWithObjectCollection
21
+
22
+ attr_reader :reflect_mode
23
+
24
+ setup do
25
+ self.title = "円と円の反射"
26
+ cursor.vertex = 3
27
+
28
+ @modes = ["reflect", "move", "none"]
29
+ @reflect_mode = @modes.first
30
+
31
+ @pA = srect.center.clone + vec2[80, -70]
32
+ @sA = vec2.angle_at(Stylet::Magic.clock(6, 15)).scale(1.0)
33
+ @a_radius = 100
34
+ @am = @a_radius**2
35
+
36
+ @pB = srect.center.clone + vec2[-120, -80]
37
+ @sB = vec2.angle_at(Stylet::Magic.clock(4)).scale(1.0)
38
+ @b_radius = 60
39
+ @bm = @b_radius**2 # 質量
40
+
41
+ @s_radius = 100 # 速度ベクトル 1.0 を画面上では何ドットで表わすか?
42
+ @vertex = 32
43
+ @reflect_ratio = 1.0 # 反射係数
44
+ end
45
+
46
+ update do
47
+ if key_down?(SDL::Key::S)
48
+ @reflect_mode = @modes[@modes.index(@reflect_mode).next.modulo(@modes.size)]
49
+ end
50
+
51
+ vputs "S:reflect=#{@reflect_mode}"
52
+ vputs "Z:ray++ X:ray-- C:drag V:angle"
53
+
54
+ # 操作
55
+ begin
56
+ # AとBで速度ベクトルの反映
57
+ @pA += @sA.scale(button.btA.repeat_0or1) + @sA.scale(-button.btB.repeat_0or1)
58
+ @pB += @sB.scale(button.btA.repeat_0or1) + @sB.scale(-button.btB.repeat_0or1)
59
+ # Cボタンおしっぱなし + マウスで自機位置移動
60
+ if button.btC.press?
61
+ @pA = cursor.point.clone
62
+ end
63
+ # Dボタンおしっぱなし + マウスで自機角度変更
64
+ if button.btD.press?
65
+ if cursor.point != @pA
66
+ @sA = (cursor.point - @pA).normalize * @sA.magnitude
67
+ end
68
+ end
69
+ end
70
+
71
+ # @pA += @sA
72
+ # @pB += @sB
73
+
74
+ @diff = @pB - @pA
75
+ @rdiff = (@a_radius + @b_radius) - @diff.magnitude
76
+ vputs "magnitude=#{@diff.magnitude}"
77
+ vputs "rdiff=#{@rdiff}"
78
+
79
+ # AとBをお互い離す
80
+ if reflect_mode == "move"
81
+ if @rdiff > 0
82
+ @pA -= @diff.normalize * @rdiff / 2
83
+ @pB += @diff.normalize * @rdiff / 2
84
+ end
85
+ end
86
+
87
+ # 反射する
88
+ if reflect_mode == "reflect"
89
+ if @rdiff > 0
90
+ begin
91
+ # 反射するモードでもいったんお互いを引き離さないと絡まってしまう
92
+ @pA -= @diff.normalize * @rdiff * 0.5
93
+ @pB += @diff.normalize * @rdiff * 0.5
94
+
95
+ # (am.x,am.y) 円Aから円Bへ移動運動を発生させるベクトル
96
+ # (ar.x,ar.y) 円Aから円Bへ回転運動を発生させるベクトル
97
+ # (bm.x,bm.y) 円Bから円Aへ移動運動を発生させるベクトル
98
+ # (br.x,br.y) 円Bから円Aへ回転運動を発生させるベクトル
99
+
100
+ # 速度ベクトルを重心方向と垂直な方向に分離する
101
+ _denominator = (@diff.x**2 + @diff.y**2)
102
+
103
+ # A
104
+ # A→B 回転運動
105
+ t = -(@diff.x * @sA.x + @diff.y * @sA.y) / _denominator
106
+
107
+ ar = @sA + @diff.scale(t)
108
+
109
+ # A→B 移動運動
110
+ t = -(-@diff.y * @sA.x + @diff.x * @sA.y) / _denominator
111
+ am = vec2[
112
+ @sA.x - @diff.y * t,
113
+ @sA.y + @diff.x * t,
114
+ ]
115
+
116
+ # B
117
+ # B→A 回転運動
118
+ t = -(@diff.x * @sB.x + @diff.y * @sB.y) / _denominator
119
+ br = @sB + @diff.scale(t)
120
+
121
+ # B→A 移動運動
122
+ t = -(-@diff.y * @sB.x + @diff.x * @sB.y) / _denominator
123
+ bm = vec2[
124
+ @sB.x - @diff.y * t,
125
+ @sB.y + @diff.x * t,
126
+ ]
127
+
128
+ # x 方向と y 方向それぞれの衝突後の速度を計算する
129
+ ad = vec2[
130
+ (@am * am.x + @bm * bm.x + bm.x * @reflect_ratio * @bm - am.x * @reflect_ratio * @bm) / (@am + @bm),
131
+ (@am * am.y + @bm * bm.y + bm.y * @reflect_ratio * @bm - am.y * @reflect_ratio * @bm) / (@am + @bm),
132
+ ]
133
+ bd = vec2[
134
+ -@reflect_ratio * (bm.x - am.x) + ad.x,
135
+ -@reflect_ratio * (bm.y - am.y) + ad.y,
136
+ ]
137
+
138
+ # 回転運動を発生させるベクトルを加算して衝突後の速度を計算
139
+ @sA.x = ad.x + ar.x
140
+ @sA.y = ad.y + ar.y
141
+ @sB.x = bd.x + br.x
142
+ @sB.y = bd.y + br.y
143
+
144
+ # @pA += @sA
145
+ # @pB += @sB
146
+ end
147
+ end
148
+ end
149
+
150
+ draw_circle(@pA, :vertex => @vertex, :radius => @a_radius)
151
+ vputs "A(#{@am})", :vector => @pA
152
+ draw_vector(@sA.scale(@s_radius), :origin => @pA, :label => @sA.magnitude)
153
+
154
+ draw_circle(@pB, :vertex => @vertex, :radius => @b_radius)
155
+ vputs "B(#{@bm})", :vector => @pB
156
+ draw_vector(@sB.scale(@s_radius), :origin => @pB, :label => @sB.magnitude)
157
+
158
+ vputs "#{@sA.magnitude} + #{@sA.magnitude} = #{(@sA + @sB).magnitude}"
159
+
160
+ if false
161
+ if @resp = compute(@pA, @sA, @a_radius, @pB, @sB, @b_radius)
162
+ vputs @resp.inspect
163
+ vputs c_state(@resp)
164
+ end
165
+
166
+ if @resp
167
+ @pA2 = @pA + @sA.normalize.scale(@resp[:f0])
168
+ draw_circle(@pA2, :vertex => @vertex, :radius => @a_radius)
169
+
170
+ @pB2 = @pB + @sB.normalize.scale(@resp[:f0])
171
+ draw_circle(@pB2, :vertex => @vertex, :radius => @b_radius)
172
+ end
173
+ end
174
+ end
175
+
176
+ # hakuhin.jp/as/collide.html#COLLIDE_02
177
+ #
178
+ # 値 状態
179
+ # f0 と f1 がどちらもプラス 円同士は近づいている
180
+ # f0 と f1 どちらもマイナス 円同士は離れている
181
+ # f0 と f1 の符号が反転 円同士はめり込んでいる
182
+ # f0 が 0 以上、 1 以下の値 現在のフレームで衝突する (この状態が発生しない。衝突は f0 == 0.0 && f1 > 0 のときっぽい←ちがう)
183
+ #
184
+ # Math.sqrt でエラーがでる
185
+ # はなれすぎているとエラーになるみたい
186
+ #
187
+ def compute(ap, as, ar, bp, bs, br)
188
+ _a = (as.x * as.x) - 2 * (as.x * bs.x) + (bs.x * bs.x) + (as.y * as.y) - 2 * (as.y * bs.y) + (bs.y * bs.y)
189
+ _b = 2 * (ap.x * as.x) - 2 * (ap.x * bs.x) - 2 * (as.x * bp.x) + 2 * (bp.x * bs.x) + 2 * (ap.y * as.y) - 2 * (ap.y * bs.y) - 2 * (as.y * bp.y) + 2 * (bp.y * bs.y)
190
+ _c = (ap.x * ap.x) - 2 * (ap.x * bp.x) + (bp.x * bp.x) + (ap.y * ap.y) - 2 * (ap.y * bp.y) + (bp.y * bp.y) - (ar + br) * (ar + br)
191
+ _d = Math.sqrt(_b * _b - 4 * _a * _c)
192
+
193
+ if _d <= 0
194
+ # 当たりなし
195
+ return
196
+ end
197
+
198
+ f0 = (- _b - _d) / (2 * _a) # 接触する瞬間
199
+ f1 = (- _b + _d) / (2 * _a) # 離れる瞬間
200
+
201
+ {:f0 => f0, :f1 => f1}
202
+ rescue Errno::EDOM => error
203
+ return
204
+ end
205
+
206
+ def c_state(resp)
207
+ return unless resp
208
+ # return if resp.is_a? StandardError
209
+ if resp[:f0] > 0 && resp[:f1] > 0
210
+ "tikazuki"
211
+ elsif resp[:f0] < 0 && resp[:f1] < 0
212
+ "hanare"
213
+ elsif resp[:f0] >= 0 && resp[:f1] <= 1
214
+ "collision"
215
+ # elsif (resp[:f0] < 0 && resp[:f1] >= 0) || (resp[:f1] < 0 && resp[:f0] >= 0)
216
+ elsif (resp[:f0] * resp[:f1]) < 0
217
+ "merikomi"
218
+ end
219
+ end
220
+
221
+ run
222
+ end
@@ -0,0 +1,261 @@
1
+ #
2
+ # 点と線分の交差判定と反射
3
+ #
4
+ require_relative "helper"
5
+
6
+ class App < Stylet::Base
7
+ include Helper::CursorWithObjectCollection
8
+
9
+ attr_reader :ray_mode
10
+ attr_reader :reflect_mode
11
+
12
+ setup do
13
+ self.title = "点と線分の交差判定と反射"
14
+ cursor.vertex = 3
15
+
16
+ @ray_mode = false # true:ドット false:円
17
+ @reflect_mode = true # true:反射する
18
+
19
+ @p0 = srect.center.clone # 自機の位置ベクトル
20
+ @dot_radius = 3 # 点の大きさ
21
+ @vertex = 32
22
+ @vS = vec2[0.84, -0.10].normalize # 速度ベクトル
23
+
24
+ # 線分AB
25
+ @pA = srect.center + vec2[srect.w * 0.3, -srect.h * 0.30]
26
+ @pB = srect.center + vec2[srect.w * 0.0, +srect.h * 0.30]
27
+
28
+ mode_init
29
+ end
30
+
31
+ update do
32
+ if key_down?(SDL::Key::A)
33
+ @ray_mode = !@ray_mode
34
+ mode_init
35
+ end
36
+ if key_down?(SDL::Key::S)
37
+ @reflect_mode = !@reflect_mode
38
+ end
39
+
40
+ # 操作説明
41
+ vputs "A:ray=#{@ray_mode} S:reflect=#{@reflect_mode}"
42
+ vputs "Z:ray++ X:ray-- C:drag V:angle"
43
+ end
44
+
45
+ def mode_init
46
+ if ray_mode
47
+ @radius = 1 # 自機の大きさ
48
+ else
49
+ @radius = 50 # 自機の大きさ
50
+ end
51
+ @vS = @vS.normalize.scale(@radius * 0.5) # 自機の速度ベクトル制限
52
+ end
53
+
54
+ update do
55
+ # 操作
56
+ begin
57
+ # AとBで速度ベクトルの反映
58
+ @p0 += @vS.scale(button.btA.repeat_0or1) + @vS.scale(-button.btB.repeat_0or1)
59
+ # Cボタンおしっぱなし + マウスで自機位置移動
60
+ if button.btC.press?
61
+ @p0 = cursor.point.clone
62
+ end
63
+ # Dボタンおしっぱなし + マウスで自機角度変更
64
+ if button.btD.press?
65
+ if cursor.point != @p0
66
+ @vS = (cursor.point - @p0).normalize * @vS.magnitude
67
+ end
68
+ end
69
+ end
70
+
71
+ begin
72
+ # 法線取得
73
+ @normal = @pA.normal(@pB).normalize
74
+ # vputs "Normal: #{@normal.magnitude}"
75
+
76
+ # 線分ABの法線を見える化(長さに意味はない)
77
+ vN = @normal.normalize.scale(64)
78
+ origin = vec2.pos_vector_ratio(@pA, @pB, 0.5)
79
+ draw_vector(vN, :origin => origin, :arrow_size => 8)
80
+ vputs "vN", :vector => origin + vN
81
+ end
82
+
83
+ # t と C1 の取得
84
+ begin
85
+ # スピードベクトルをt倍したら線に衝突するかを求める
86
+ # 自機の原点・速度ベクトル・法線の原点(pAでもpBでもよい)・法線ベクトルを渡すと求まる
87
+ @t1 = vec2.collision_power_scale(@p0, @vS, @pA, @normal)
88
+
89
+ # 裏面(通りすぎている) <= 0.0 < 衝突 <= 1.0 < 表面(まだあたっていない)
90
+ vputs "C1 t1: #{@t1} (#{ps_state(@t1)})"
91
+
92
+ # スピードを t 倍したとき本当にラインに接触するのかを見える化
93
+ # draw_vector(@vS.scale(@t1), :origin => @p0)
94
+
95
+ # 交差点の取得
96
+ @pC1 = @p0 + @vS.scale(@t1)
97
+
98
+ # 交差点の視覚化
99
+ draw_triangle(@pC1, :radius => @dot_radius, :angle => @vS.angle)
100
+ vputs "C1", :vector => @pC1
101
+
102
+ # 線分ABの中に衝突しているか調べる方法
103
+ # 内積の取得
104
+ @ac1 = @pC1 - @pA
105
+ @bc1 = @pC1 - @pB
106
+ if @ac1.nonzero? && @bc1.nonzero?
107
+ @ip1 = vec2.dot_product(@ac1, @bc1)
108
+ vputs "C1 dot_product(AC1, BC1): #{@ip1} (#{dot_product_state(@ip1)})"
109
+
110
+ draw_vector(@ac1.normalize.scale(20), :origin => @pA + @normal.scale(-20 * 1), :arrow_size => 8)
111
+ draw_vector(@bc1.normalize.scale(20), :origin => @pB + @normal.scale(-20 * 1), :arrow_size => 8)
112
+ end
113
+ end
114
+
115
+ # t2 と C2 の取得
116
+ begin
117
+ # 自機から面と垂直な線を出して面と交差するか調べる(ここが点の場合と違う)
118
+ @vP = vec2.angle_at(@normal.reverse.angle).scale(@radius) # スケールは半径と同じ長さとする
119
+ draw_vector(@vP, :origin => @p0)
120
+ vputs "vP", :vector => @vP + @p0
121
+
122
+ # 自機の原点・逆法線ベクトル・法線の原点(pAでもpBでもよい)・法線ベクトルを渡すと求まる
123
+ # @t2 = vec2.collision_power_scale(@p0, @vP, @pA, @normal)
124
+ @t2 = vec2.collision_power_scale(@p0, @vP, @pA, @normal)
125
+ vputs "C2 t2: #{@t2} (#{ps_state(@t2)})"
126
+
127
+ # 交差点の取得
128
+ @pC2 = @p0 + @vP.scale(@t2)
129
+
130
+ # 交差点の視覚化
131
+ draw_triangle(@pC2, :radius => @dot_radius, :angle => @vP.angle)
132
+ vputs "C2", :vector => @pC2
133
+
134
+ # 内積の取得
135
+ @ac2 = @pC2 - @pA
136
+ @bc2 = @pC2 - @pB
137
+ if @ac2.nonzero? && @bc2.nonzero?
138
+ @ip2 = vec2.dot_product(@ac2, @bc2)
139
+ vputs "C2 dot_product(AC2, BC2): #{@ip2} (#{dot_product_state(@ip2)})"
140
+
141
+ # 二つのベクトルがどちらを向いているか視覚化(お互いが衝突していたら線の中にいることがわかる)
142
+ draw_vector(@ac2.normalize.scale(20), :origin => @pA + @normal.scale(-20 * 2), :arrow_size => 8)
143
+ draw_vector(@bc2.normalize.scale(20), :origin => @pB + @normal.scale(-20 * 2), :arrow_size => 8)
144
+ end
145
+ end
146
+
147
+ # 線の表裏どちらにいるか。また衝突しているか? (この時点では無限線)
148
+ if reflect_mode
149
+ if ray_mode && false
150
+ # レイモードの反射は難しい
151
+ # Zで通りすぎてXボタンでバックして再び突進すると線を通りすぎてしまう。
152
+ # これは「移動距離 < 半径」の法則が慣りたってないから。
153
+ # 半径を0.1などと考えて円にして反射させるのがいいのかも
154
+
155
+ # _radius = 0.5
156
+ #
157
+ # if 0.0 < @t2 && @t2 <= 1.0 # めり込んでいる
158
+ # if @ip2 < 0 # 線の中で
159
+ # # 円を押し戻す
160
+ # @p0 = @pC2 + @normal.normalize.scale(_radius)
161
+ # @vS += @vS.reflect(@normal).scale(1.0)
162
+ # end
163
+ # end
164
+ #
165
+ # # 速度制限(円が線から飛び出さないようにする)
166
+ # if @vS.radius > _radius
167
+ # @vS = @vS.normalize.scale(_radius)
168
+ # end
169
+
170
+ # # Zで通りすぎてXボタンでバックして再び突進すると線を通りすぎてしまう。
171
+ # # これは「移動距離 < 半径」の法則が慣りたってないから。
172
+ # if 0.0 < @t && @t <= 1.0
173
+ # if @ip < 0
174
+ # @p0 = @pC1.clone
175
+ # # @p0 = @pC1 + @normal.normalize.scale(1.1)
176
+ # @vS += @vS.reflect(@normal)
177
+ # end
178
+ # end
179
+ else
180
+ # レイの場合は半径がないので t1 と C1 を使っても同じ
181
+
182
+ if 0.0 < @t2 && @t2 <= 1.0 # めり込んでいる
183
+ if @ip2 < 0 # 線の中で
184
+ # 円を押し戻す
185
+ @p0 = @pC2 + @normal.normalize.scale(@radius)
186
+ @vS += @vS.reflect(@normal).scale(1.0)
187
+ end
188
+ end
189
+
190
+ # 速度制限(円が線から飛び出さないようにする)
191
+ if @vS.magnitude > @radius
192
+ @vS = @vS.normalize.scale(@radius)
193
+ end
194
+
195
+ # 点Aと点Bに円がめり込んでいたら押す
196
+ [@pA, @pB].each do |pX|
197
+ diff = @p0 - pX
198
+ if diff.magnitude > 0
199
+ if diff.magnitude < @radius
200
+ @p0 = pX + diff.normalize.scale(@radius)
201
+ if true
202
+ # 跳ね返す
203
+ @vS = diff.normalize.scale(@vS.magnitude)
204
+ end
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
210
+
211
+ begin
212
+ if ray_mode
213
+ # 自機(ドット)の表示
214
+ draw_triangle(@p0, :radius => @dot_radius, :angle => @vS.angle)
215
+ else
216
+ # 自機(円)の表示
217
+ draw_circle(@p0, :radius => @radius, :vertex => @vertex, :angle => @vS.angle)
218
+ end
219
+ vputs "p0", :vector => @p0
220
+
221
+ # 自機の速度ベクトルの可視化(長さに意味はない)
222
+ pS = @vS
223
+ draw_vector(pS, :origin => @p0)
224
+ vputs "vS", :vector => @p0 + pS
225
+ vputs "Speed Vector: #{@vS.magnitude}"
226
+
227
+ # 線分ABの視覚化
228
+ draw_line(@pA, @pB)
229
+ vputs "A", :vector => @pA
230
+ vputs "B", :vector => @pB
231
+
232
+ if button.btC.press? || button.btD.press?
233
+ draw_line(@p0, @pC1)
234
+ draw_line(@p0, @pC2)
235
+ end
236
+ end
237
+ end
238
+
239
+ def ps_state(t)
240
+ if t > 1.0
241
+ "FACE"
242
+ elsif 0.0 < t && t <= 1.0
243
+ "COLLISION"
244
+ else # t <= 0.0
245
+ "REVERSE"
246
+ end
247
+ end
248
+
249
+ # 1. ←← or →→ 正 (0.0 < v) お互いだいたい同じ方向を向いている
250
+ # 2. →← 負 (v < 0.0) お互いだいたい逆の方向を向いている
251
+ # 3. →↓ →↑ 零 (0.0) お互いが直角の関係
252
+ def dot_product_state(v)
253
+ if v < 0
254
+ "IN"
255
+ else
256
+ "OUT"
257
+ end
258
+ end
259
+
260
+ run
261
+ end