- ベストアンサー
ハートグラフの範囲内ランダム配置
x=16sin^3t y=13cost-5cos(2t)-2cos(3t)-cos(4t). http://mathworld.wolfram.com/HeartCurve.html 上記の数式は、上記サイトの6つ目の数式ですが、グラフにするとハートの形になるとのことですが、jQueryで100個の要素をこの曲線グラフの範囲内にランダムに配置するには、どのようにすればよいでしょうか。 ご教授いただけますでしょうか。 よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
かなり「やっつけ」なかんじ? これって もんてかるろほう? ぜんかくくうはくは、はんかくに。 <!DOCTYPE html> <meta charset="UTF-8"> <title></title> <style> #view > span { position: absolute; top : 0; left : 0; } </style> <body> <div id="view"></div> <script> (function (doc) { var sin = Math.sin; var cos = Math.cos; var pow = Math.pow; var pi = Math.PI; var step = pi / 45; var canvas = doc.createElement ('canvas'); var ctx = canvas.getContext ('2d'); ctx.beginPath (); for (var i = 0, I = pi * 2; i < I; i += step) { x = 16 * pow (sin (i), 3); y = 13 * cos (i) - 5 * cos (2 * i) - 2 * cos (3 * i) - cos (4 * i); ctx.lineTo (17 + x, 17 - y); } ctx.closePath(); function random () { var r = Math.random; var x, y; do { x = r (); y = r (); } while (! ctx.isPointInPath (x * 34, y * 34)); return {x: x, y: y}; } this.randomHeart = random; }) (document); function setInSideOfHeart (ch) { var position = randomHeart (); var doc = this.ownerDocument; var span = doc.createElement ('span'); span.appendChild (doc.createTextNode (ch)); this.appendChild (span); span.style.top = position.y * 300 + 'px'; span.style.left = position.x * 300 + 'px'; } var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefhhijklmnopqrstuvwxyz'; str = str + str + str +str; str = str + str + str +str; str.split ('').forEach (setInSideOfHeart, document.getElementById ('view')); </script>
お礼
babu_babooさんご回答ありがとうございます。 すごいです!バッチリです!ご活用させていただきます! 確かにモンテカルロ法みたいになりましたね。 以前もパーティクルで大変お世話になりました。 おかげさまで大変勉強になります。