{"id":4184,"date":"2018-06-27T23:03:28","date_gmt":"2018-06-27T15:03:28","guid":{"rendered":"http:\/\/www.bookcard.net\/wordpress\/?p=4184"},"modified":"2018-06-27T23:03:28","modified_gmt":"2018-06-27T15:03:28","slug":"game_model_collision_time","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/game_model_collision_time\/","title":{"rendered":"\u904a\u6232\u5efa\u6a21\u4e4b\u78b0\u649e\u6642\u9593"},"content":{"rendered":"<figure id=\"attachment_4185\" aria-describedby=\"caption-attachment-4185\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/06\/GAME_MODEL_Collision_Time.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4185\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/06\/GAME_MODEL_Collision_Time.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/06\/GAME_MODEL_Collision_Time.jpg 1024w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/06\/GAME_MODEL_Collision_Time-300x225.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/06\/GAME_MODEL_Collision_Time-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-4185\" class=\"wp-caption-text\">\u904a\u6232\u5efa\u6a21\u4e4b\u78b0\u649e\u6642\u9593<\/figcaption><\/figure>\n<p>\u300e\u7269\u9ad4\u300f\u904b\u52d5\u6838\u5fc3\u662f\u78b0\u649e.\u4f60\u8a66\u60f3\u4e0b\u7576\u300e\u7269\u9ad4\u300f\u9ad8\u901f\u904b\u52d5\u6642\u6709\u53ef\u80fd\u6703\u7a7f\u8d8a\u7246\u58c1.\u9019\u56e0\u904a\u6232\u4e16\u754c\u4e2dCPU\u6703\u8f2a\u8a62\u8655\u7406\u6240\u6709\u300e\u7269\u9ad4\u300f. \u4e26\u53ea\u6703\u5206\u5230\u6709\u9650\u300e\u904b\u7b97\/\u6642\u9593\u300f,\u6240\u4ee5\u6bcf\u4e00\u6b21\u4f60\u90fd\u9700\u8981\u6e96\u78ba\u8a08\u7b97\u78b0\u649e\u6642\u9593.\u901a\u904e\u4e0d\u65b7\u905e\u6b78\u800c\u78ba\u5b9a\u6700\u5f8c\u79fb\u52d5\u4f4d\u7f6e<\/p>\n<p>\u901a\u904e\u4f7f\u7528\u57fa\u65bc\u6642\u9593\u4e8c\u7dad\u65b9\u7a0b\u5f0f\u9032\u884c\u78b0\u649e\u6aa2\u6e2c.<\/p>\n<p>x<sub>f<\/sub>=x<sub>0<\/sub>+v<sub>0<\/sub>t+(1\/2)at<sup>2<\/sup><\/p>\n<p>ax<sup>2<\/sup>+bx+c=0<\/p>\n<p>\u5229\u7528\u4fc2\u6578\u66ff\u63db\u53ef\u5f97\u5230<\/p>\n<p>a=(1\/2)*a<\/p>\n<p>b=v<sub>0<\/sub><\/p>\n<p>c=x<sub>0<\/sub>-x<sub>f<\/sub><\/p>\n<p>\u5c07\u5176\u64f4\u5c55\u53ef\u5f97\u5230\u4e09\u7dad\u65b9\u7a0b\u5f0f<\/p>\n<p>x<sub>t<\/sub>=c<sub>x<\/sub>+b<sub>x<\/sub>t+a<sub>x<\/sub>t<sup>2<\/sup><\/p>\n<p>y<sub>t<\/sub>=c<sub>y<\/sub>+b<sub>y<\/sub>t+a<sub>y<\/sub>t<sup>2<\/sup><\/p>\n<p>z<sub>t<\/sub>=c<sub>z<\/sub>+b<sub>z<\/sub>t+a<sub>z<\/sub>t<sup>2<\/sup><\/p>\n<p>\u5982\u679c\u5c07\u4e09\u7dad\u65b9\u7a0b\u61c9\u7528\u65bc\u5e73\u9762\u65b9\u7a0b\u53ef\u5f97<\/p>\n<p>A<em>x<sub>t<\/sub>+B<\/em>y<sub>t<\/sub>+C*z<sub>t<\/sub>+D=0<\/p>\n<p>\u6b64\u65b9\u7a0b\u8aaa\u9762\u5982\u679c\u7269\u9ad4\u8207\u5e73\u9762\u767c\u751f\u78b0\u649e.\u5176\u78b0\u649e\u9ede\u4f4d\u65bc(x<sub>t<\/sub>,y<sub>t<\/sub>,z<sub>t<\/sub>)\u901a\u904e\u4ee3\u6578\u904b\u7b97\u53ef\u5f97\u5230<\/p>\n<p>(Aa<sub>x<\/sub>+Ba<sub>y<\/sub>+Ca<sub>z<\/sub>)x<sup>2<\/sup>+(Ab<sub>x<\/sub>+Bb<sub>y<\/sub>+Cb<sub>z<\/sub>)x+(Ac<sub>x<\/sub>+Bc<sub>y<\/sub>+Cc<sub>z<\/sub>)+D=0<\/p>\n<p>\u9019\u5176\u5be6\u5c31\u662f\u5e73\u9762\u4e8c\u6b21\u65b9\u7a0b\u5f0f(ax<sup>2<\/sup>+bx+c=0) ,\u5176\u9ede\u7a4d\u5f62\u5f0f\u70ba:<\/p>\n<p>ax<sup>2<\/sup>=(Aa<sub>x<\/sub>+Ba<sub>y<\/sub>+Ca<sub>z<\/sub>)x2=N\u2022(1\/2)A<\/p>\n<p>\u5229\u7528\u9ede\u7a4d\u5f97\u5230\u4e8c\u6b21\u65b9\u7a0b\u4fc2\u6578:<\/p>\n<p>\u52a0\u901f\u5ea6\u4fc2\u6578: a=N\u2022(0.5A)<\/p>\n<p>\u901f\u5ea6\u4fc2\u6578:\u00a0 b=N\u2022V<\/p>\n<p>\u8ddd\u96e2\u4fc2\u6578:\u00a0 c=N\u2022X+D<\/p>\n<p>\u6709\u4e0a\u5e8f\u4e8c\u6b21\u65b9\u7a0b\u4fc2\u6578\u5c31\u53ef\u8a08\u7b97\u78b0\u649e\u6642\u9593<\/p>\n<p>float a = n % (acceleration * 0.5f);\/\/ \u52a0\u901f\u5ea6\u4fc2\u6578<\/p>\n<p>float b = n % velocity;\/\/ \u901f\u5ea6\u4fc2\u6578<\/p>\n<p>float c = n % position + D &#8211; radius;\/\/ \u8ddd\u96e2\u4fc2\u6578<\/p>\n<p>\u82e5a=0\u52a0\u901f\u5ea6\u4fc2\u6578\u70ba\u96f6,\u78b0\u649e\u6642\u9593\u7b49\u65bc\u8ddd\u96e2\u4fc2\u6578\u9664\u4ee5\u901f\u5ea6\u4fc2\u6578.\u56e0\u70ba\u8ddd\u96e2\u4fc2\u6578\u5c0f\u65bc\u96f6\u6240\u4ee5\u8981\u53bb\u8ca0\u503c.<\/p>\n<p>collisionTime = -c\/b;<\/p>\n<p>\u82e5a!=\u22600\u52a0\u901f\u5ea6\u4fc2\u6578\u4e0d\u70ba\u96f6,\u53ef\u4ee5\u4f7f\u7528\u4e8c\u6b21\u65b9\u7a0b\u8a08\u7b97\u78b0\u649e\u6642\u9593:<\/p>\n<p>x=(-b+\u221a(b<sup>2<\/sup>-4ac) ) \/ 2a<\/p>\n<p>\u5728\u8a08\u7b97\u78b0\u649e\u6642\u9593\u4e4b\u524d\u53ef\u5148\u8a08\u7b97D=b<sup>2<\/sup>-4ac \u82e5D\u5c0f\u65bc\u96f6\u5247\u7121\u89e3.\u82e5D\u5927\u65bc\u96f6\u5247\u6709\u89e3<\/p>\n<p>float D = b * b &#8211; 4 * a*c;<\/p>\n<p>if (D &gt; 0) \/\/ \u5982\u679c\u5224\u65b7\u5f0f\u5927\u65bc\u7b49\u65bc\u96f6<\/p>\n<p>collisionTime = (-b &#8211; sqrtf(D)) \/ (2 * a); \/\/ \u8a08\u7b97\u78b0\u649e\u6642\u9593<\/p>\n<p>\u56e0\u70ba\u767c\u751f\u78b0\u649e\u7269\u9ad4\u6703\u5f48\u958b,\u65b9\u5411\u77e2\u91cf\u7522\u751f\u8fd4\u5c04\u9700\u8981\u91cd\u65b0\u8a08\u7b97\u4f4d\u7f6e.\u901a\u904e\u6e1b\u53bb\u78b0\u649e\u6642\u9593\u9032\u884c\u905e\u6b78.\u76f4\u5230\u300e\u5e40\u6642\u9593\u300f\u70ba\u96f6<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e0b\u9762\u662f\u300e\u66f2\u68cd\u7403\u300f\u78b0\u649e\u51fd\u5f0f.<\/p>\n<p>puck \u662f\u66f2\u68cd\u7403.<\/p>\n<p>table \u662f\u7403\u81fa<\/p>\n<p>deltaTime\u662f\u5e40\u6642\u9593<\/p>\n<p>void Update_Puck(PUCK_PTR puck, TABLE_PTR table, float deltaTime){<\/p>\n<p>float\u00a0 fastestTime = deltaTime;\/\/ \u6700\u65e9\u78b0\u649e\u6642\u9593<\/p>\n<p>float\u00a0 collisionTime;\/\/ \u78b0\u649e\u6642\u9593<\/p>\n<p>PLANE3D_PTR plane\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = NULL;\/\/ \u5e73\u9762<\/p>\n<p>PLANE3D_PTR planeCollision = NULL;\/\/ \u78b0\u649e\u5e73\u9762<\/p>\n<p>if (deltaTime &lt;= 0.000f)\/\/ \u905e\u6b78<\/p>\n<p>return;<\/p>\n<p>\/\/ \u5c0d\u7403\u81fa\u56db\u500b\u570d\u908a\u6aa2\u67e5\u78b0\u649e<\/p>\n<p>for (int i = 0; i &lt; 4; i++){<\/p>\n<p>plane = &amp;table-&gt;wall[i];\/\/ \u5e73\u9762<\/p>\n<p>\/\/ \u9ede\u7a4d\u4e8c\u6b21\u65b9\u7a0b<\/p>\n<p>float a = plane-&gt;n % (puck-&gt;acceleration * 0.5f);\/\/ \u52a0\u901f\u5ea6\u4fc2\u6578<\/p>\n<p>float b = plane-&gt;n % puck-&gt;velocity;\/\/ \u901f\u5ea6\u4fc2\u6578<\/p>\n<p>float c = plane-&gt;n % puck-&gt;position + plane-&gt;D &#8211; puck-&gt;radius;\/\/ \u8ddd\u96e2\u4fc2\u6578<\/p>\n<p>if (a == 0 &amp;&amp; b != 0 &amp;&amp; c != 0){\/\/ \u5982\u679c\u7121\u52a0\u901f\u5ea6<\/p>\n<p>\/\/ \u78b0\u649e\u6642\u9593\u7b49\u65bc\u8ddd\u96e2\u9664\u4ee5\u901f\u5ea6<\/p>\n<p>collisionTime = -c\/b;\/\/ \u78b0\u649e\u6642\u9593<\/p>\n<p>if (collisionTime &gt;= 0 &amp;&amp; collisionTime &lt; fastestTime){\/\/ \u767c\u751f\u78b0\u649e<\/p>\n<p>fastestTime = collisionTime;\/\/ \u4fdd\u5b58\u78b0\u649e\u6642\u9593<\/p>\n<p>planeCollision = plane;\/\/ \u5e73\u9762<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if(a != 0){<\/p>\n<p>\/\/ \u52a0\u901f\u5ea6a\u4e0d\u7b49\u65bc\u96f6<\/p>\n<p>\/\/ \u8a08\u7b97\u5224\u5225\u5f0f<\/p>\n<p>float D = b * b &#8211; 4 * a*c;<\/p>\n<p>if (D &gt; 0) {\/\/ \u5982\u679c\u5224\u65b7\u5f0f\u5927\u65bc\u7b49\u65bc\u96f6<\/p>\n<p>\/\/ \u8a08\u7b97\u78b0\u649e\u6642\u9593<\/p>\n<p>collisionTime = (-b &#8211; sqrtf(D)) \/ (2 * a);<\/p>\n<p>if (collisionTime &gt;= 0.0f &amp;&amp; collisionTime &lt; fastestTime) {\/\/ \u767c\u751f\u78b0\u649e<\/p>\n<p>fastestTime = collisionTime;<\/p>\n<p>planeCollision = plane;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}\/\/ END FOR<\/p>\n<p>\/\/ \u901f\u5ea6\u8a2d\u4e0a\u9650\u6bcf\u79d2800\u7c73<\/p>\n<p>if (Length_VECTOR3D(&amp;puck-&gt;velocity) &gt; 800)<\/p>\n<p>puck-&gt;velocity = Normalize_VECTOR3D(&amp;puck-&gt;velocity) * 800;<\/p>\n<p>\/\/ \u5982\u679c\u51b0\u7403\u6b63\u79fb\u52d5,\u5247\u61c9\u7528\u78e8\u64e6\u529b<\/p>\n<p>if (Length_VECTOR3D(&amp;puck-&gt;velocity) &gt; 0)<\/p>\n<p>puck-&gt;acceleration = -puck-&gt;velocity * 0.2f;\/\/ \u8a08\u7b97\u52a0\u901f\u5ea6<\/p>\n<p>\/\/ \u8a08\u7b97\u7576\u524d\u4f4d\u7f6e<\/p>\n<p>puck-&gt;position = puck-&gt;position + puck-&gt;velocity * fastestTime + puck-&gt;acceleration * (fastestTime<em>fastestTime<\/em>0.5f);<\/p>\n<p>\/\/ \u61c9\u7528\u78e8\u64e6\u529b<\/p>\n<p>puck-&gt;velocity = puck-&gt;velocity + puck-&gt;acceleration * fastestTime;<\/p>\n<p>\/\/ \u5982\u679c\u767c\u751f\u78b0\u649e,\u53cd\u8f49\u901f\u5ea6<\/p>\n<p>if (planeCollision != NULL)\/\/ \u78b0\u649e\u5e73\u9762<\/p>\n<p>puck-&gt;velocity = Reflection_VECTOR3D(&amp;puck-&gt;velocity, &amp;planeCollision-&gt;n);<\/p>\n<p>\/\/ \u905e\u6b78\u8abf\u7528<\/p>\n<p>Update_Puck(puck, table, deltaTime &#8211; fastestTime);<\/p>\n<p>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u300e\u7269\u9ad4\u300f\u904b\u52d5\u6838\u5fc3\u662f\u78b0\u649e.\u4f60\u8a66\u60f3\u4e0b\u7576\u300e\u7269\u9ad4\u300f\u9ad8\u901f\u904b\u52d5\u6642\u6709\u53ef\u80fd\u6703\u7a7f\u8d8a\u7246\u58c1.\u9019\u56e0\u904a\u6232\u4e16\u754c\u4e2dCPU\u6703\u8f2a\u8a62\u8655\u7406\u6240\u6709\u300e\u7269\u9ad4 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/game_model_collision_time\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">\u904a\u6232\u5efa\u6a21\u4e4b\u78b0\u649e\u6642\u9593<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,13],"tags":[42],"class_list":["post-4184","post","type-post","status-publish","format-standard","hentry","category-algorithm","category-pc","tag-computer","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/4184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/comments?post=4184"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/4184\/revisions"}],"predecessor-version":[{"id":4186,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/4184\/revisions\/4186"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=4184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=4184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=4184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}