{"id":2311,"date":"2020-07-20T16:41:47","date_gmt":"2020-07-20T08:41:47","guid":{"rendered":"https:\/\/www.clonefactor.com\/wordpress\/?p=2311"},"modified":"2020-07-20T16:41:49","modified_gmt":"2020-07-20T08:41:49","slug":"quaternion-%e6%8e%83%e7%9b%b2","status":"publish","type":"post","link":"https:\/\/www.clonefactor.com\/wordpress\/program\/math\/2311\/","title":{"rendered":"Quaternion \u6383\u76f2"},"content":{"rendered":"\n<h2>\u53d6\u5f97\u55ae\u4e00 Quaternion \u7684\u67d0\u500b\u65b9\u5411(Direction &#8211; vector)?<\/h2>\n<p>\u7531\u65bc Quaternion \u662f\u7ba1\u7406\u8f49\u5411\u7684, \u5c31\u50cf <a href=\"https:\/\/www.clonefactor.com\/wordpress\/program\/math\/2288\/\" target=\"_blank\" rel=\"noopener noreferrer\">Local \/ World Space \u7a7a\u9593<\/a>\u00a0\u88e1\u6240\u5c55\u793a\u7684<br \/>&#8220;\u5b83&#8221; Quaternion \u81ea\u5df1\u5c31\u662f\u4ee3\u8868\u4e00\u500b\u7269\u4ef6\u7684\u8f49\u5411 (Local space).<br \/>\u800c\u5b83\u7684\u8f49\u5411\u662f\u4ed8\u52a0\u5728\u4e16\u754c\u5750\u6a19\u4e0a\u9762\u7684 (World space).<br \/>\u5b83\u5c31\u50cf\u662f\u4e00\u500b\u8a18\u9304\u4e86\u67d0\u7269\u4ef6\u7684\u65b9\u4f4d\u7684\u8f49\u63db, \u800c\u5728\u7251\u7a0b\u6642, \u6211\u5011\u53ef\u4ee5\u5229\u7528 Quaternion \u4f86\u8f49\u63db Local \/ world direction<br \/>\u7528 Unity3D C#\u7684\u65b9\u5f0f\u4f86\u770b\u7684\u8a71\u5c31\u50cf\u9019\u6a23.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Quaternion facing = \/* whatever *\/;\nVector3 myForward = facing * Vector3.forward;\nVector3 myRight = facing * Vector3.right;\nVector3 myUpward = facing * Vector3.up;\nVector3 myLeft = -myRight;\nVector3 myBack = -myForward;\nVector3 myBottom = -myUpward;<\/pre>\n<p>\u9664\u4e86\u4e0a\u9762\u7bc4\u4f8b\u7684 6 \u500b Local space \u7684 vector direction,<br \/>\u6211\u5011\u9084\u53ef\u4ee5\u628a\u4efb\u610f\u4e00\u652f\u7684 Vector3 \u4e1f\u9032\u53bb\u53d6\u5f97\u76f8\u5c0d\u61c9\u7684 World space direction.<br \/>\u8aaa\u767d\u4e00\u9ede\u7684\u4f8b\u5b50\u5c31\u662f : \u4f60\u73fe\u5728\u53ef\u4ee5\u5229\u7528 Quaternion \u53d6\u5f97\u67d0\u500b\u4eba\u7269\u7684\u5de6\u624b\u5230\u5e95\u662f\u4e0d\u662f\u6307\u8457\u5317\u65b9\u54af.<\/p>\n<h2>\u56db\u5143\u6578\u7684\u8f49\u5411\u758a\u52a0 (\u76f8\u4e58)<\/h2>\n<p>\u55ae\u4e00\u500b\u8f49\u5411\u53ef\u4ee5\u7528\u7684\u5730\u65b9\u4e0d\u591a, \u4f46\u591a\u5c64\u8f49\u5411\u7684\u65b9\u5411\u904b\u7b97\u61c9\u8a72\u5c31\u975e\u5e38\u591a,<br \/>\u4f46\u662f\u56db\u5143\u6578\u7684\u77e9\u9663\u662f\u6c92\u6709 &#8220;\u52a0&#8221; (+) \u9019\u4e00\u500b\u904b\u7b97\u7b26\u865f\u7684,<br \/>\u984c\u5916: \u56e0\u70ba\u628a Quaterion \u7684\u56db\u5143\u6578\u8f49\u63db\u70ba matrix \u7684\u8a71\u770b\u8d77\u4f86\u662f\u9019\u6a23\u7684.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/upload.wikimedia.org\/math\/b\/9\/9\/b99e96bedf517a41b3e255335e7ab701.png\" \/><\/p>\n<p>\u5728 Quaterion \u88e1\u982d\u8981\u758a\u52a0\u5176\u4ed6 Quaterion \u7684\u8a71\u5c31\u53ea\u6709&#8221;\u4e58&#8221; (*)<br \/>\u8aaa\u767d\u4e00\u9ede\u751a\u9ebc\u662f\u591a\u5c64\u7d1a\u7684\u8f49\u5411?<br \/>\u6211\u5011\u4ee5\u624b\u81c2\u4f86\u505a\u4f8b\u5b50\u4f86\u8aaa\u660e\u4e00\u4e0b.<\/p>\n<p>&#8220;\u4e0a\u81c2&#8221; \u7684\u8f49\u52d5\u6703\u5e36\u52d5 &#8220;\u524d\u81c2&#8221;<br \/>\u9019\u88e1\u9762, &#8220;\u524d\u81c2&#8221; \u7684\u8f49\u5411\u662f\u4f9d\u5f9e &#8220;\u4e0a\u81c2&#8221; \u7684\u8f49\u5411\u7684.<br \/>\u6240\u4ee5 &#8220;\u4e0a\u81c2&#8221; \u662f\u7236\u5c64\u7d1a\u7684\u8f49\u5411,<br \/>&#8220;\u4e0b\u81c2&#8221; \u662f\u5b50\u5c64\u7d1a\u7684\u8f49\u5411.<\/p>\n<p>\u5728\u6578\u5b78\u6982\u5ff5\u4e0a\u53ea\u8981\u628a\u5169\u500b Quaterion \u76f8\u4e58\u5c31\u662f\u4ee3\u8868\u5169\u500b\u8f49\u5411\u7684\u7d2f\u52a0.<br \/>\u5728 Unity3D C# \u4e2d\u770b\u8d77\u4f86\u662f\u9019\u6a23\u7684.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Quaternion upperArm = \/* local downward *\/\nQuaternion lowerArm = \/* local upward *\/\n\nQuaternion armRotation = upperArm * lowerArm;<\/pre>\n<p>\u6211\u5011\u5ffd\u7565\u6389\u8eab\u9ad4, \u5047\u8a2d &#8220;\u4e0a\u81c2&#8221; \u7684\u4e0b\u65b9\u5c31\u662f\u4e16\u754c\u7684\u4e0b\u65b9, \u800c &#8220;\u524d\u81c2&#8221; (lower arm) \u662f\u6307\u5411\u81ea\u5df1\u7684\u4e0a\u65b9\u7684\u8a71<br \/>\u5c31\u80fd\u770b\u5230\u9019\u6a23\u7684\u666f\u50cf.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2313\" src=\"https:\/\/www.clonefactor.com\/wordpress\/wp-content\/uploads\/2020\/07\/upper_lower_arm_rotation.jpg\" alt=\"\" width=\"547\" height=\"473\" srcset=\"https:\/\/www.clonefactor.com\/wordpress\/wp-content\/uploads\/2020\/07\/upper_lower_arm_rotation.jpg 547w, https:\/\/www.clonefactor.com\/wordpress\/wp-content\/uploads\/2020\/07\/upper_lower_arm_rotation-300x259.jpg 300w, https:\/\/www.clonefactor.com\/wordpress\/wp-content\/uploads\/2020\/07\/upper_lower_arm_rotation-347x300.jpg 347w\" sizes=\"auto, (max-width: 547px) 100vw, 547px\" \/><\/p>\n<p>\u5982\u679c\u4e0d\u660e\u767d\u70ba\u4f55\u662f\u6307\u5411\u4e16\u754c\u5750\u6a19&#8221;\u524d\u65b9&#8221;\u7684\u670b\u53cb\u8981\u518d\u7406\u89e3\u4e00\u4e0b <a href=\"https:\/\/www.clonefactor.com\/wordpress\/program\/math\/2288\/\" target=\"_blank\" rel=\"noopener noreferrer\">Local \/ World Space \u7a7a\u9593<\/a> \u5594,<br \/>\u8981\u5617\u8a66\u628a\u81ea\u5df1\u4ee3\u5165 &#8220;\u524d\u81c2&#8221; \u7684\u89d2\u5f0f\u4f86\u8003\u616e\u5230\u5e95\u76f8\u5c0d\u7684\u89d2\u5ea6\u662f\u751a\u9ebc.<\/p>\n<h3>\u591a\u5c64\u8f49\u5411\u6d88\u9664\/\u6e1b\u6cd5 (\u8aa4)<\/h3>\n<p>\u5728\u904b\u7b97\u4e0a, \u5982\u679c\u53ea\u6709\u758a\u52a0\u7684\u8a71\u5fc5\u7136\u5e0c\u671b\u6709\u6e1b\u6cd5\u7f77,\u4f46\u662f\u55b2 \u56db\u5143\u6578\u5c31\u53ea\u6709\u4e58\u6578.<br \/>\u6240\u4ee5\u6211\u5011\u600e\u6a23\u4ee5\u4e58\u6578\u4f86 &#8220;\u6d88\u9664&#8221; \u67d0\u500b\u7279\u5b9a\u7684\u8f49\u5411\u5462?!<br \/>\u7b54\u6848\u662f\u628a Quaternion \u9019\u500b\u77e9\u9663\u53cd\u8f49 (Inverse)<br \/>\u8a3b: \u4e26\u4e0d\u662f\u628a x,y,z,w \u53cd\u8f49\u554a&#8230; \u662f\u628a\u77e9\u9663\u53cd\u8f49.<\/p>\n<p>\u5047\u8a2d Quaternion A, B<br \/>\u6211\u5011\u76f8\u7b97 A &#8211; B \u7684\u8a71\u61c9\u8a72\u662f\u5beb\u6210<br \/>Quaternion answer = A * Quaternion.Inverse(B);<\/p>\n<h3>\u76f8\u4e58\u9806\u5e8f\u7684\u7279\u6027<\/h3>\n<p>\u56db\u5143\u6578\u8f49\u5411\u662f\u6709\u9806\u5e8f\u7684 a * b \u8ddf b * a \u7684\u610f\u7fa9\u4e0d\u76f8\u540c,<\/p>\n<p>\u7c21\u55ae\u4f86\u8aaa Quaternion \u7684\u758a\u52a0\u6b21\u5e8f\u662f\u5f9e\u53f3\u5230\u5de6\u4f86\u770b\u7684.<br \/>\u800c\u540c\u4e00\u6642\u9593\u6211\u5011\u5beb\u7b97\u5f0f\/\u7a0b\u5e8f\u591a\u662f\u5f9e\u5de6\u5230\u53f3\u7684\u5beb\u7684\u5f88\u5bb9\u6613\u5c31\u72af\u4e86\u932f\u8aa4.<br \/>\u4ee5\u4e0a\u9762\u624b\u81c2\u7684\u8209\u4f8b\u4f86\u8aaa\u660e,<br \/>&#8220;\u524d\u81c2&#8221;\u5148\u8f49\u5411\u4e0a\u65b9, \u7136\u5f8c&#8221;\u4e0a\u81c2&#8221;\u624d\u8f49\u5230\u4e0b\u65b9.<\/p>\n<p>\u6211\u5011\u4ee5 C# \u8868\u73fe\u518d\u770b\u4e00\u4e0b\u8f49\u5411\u7684\u95dc\u4fc2<\/p>\n<p>Quaternion parent; \/\/ \u7236\u5c64\u8f49\u5411<br \/>Quaternion child; \/\/ \u5b50\u5c64\u8f49\u5411<br \/>Quaternion combine; \/\/ \u6700\u7d42\u8f49\u5411<\/p>\n<p>1) combine = parent * child;<br \/>\u5728\u9019\u88e1\u8aaa\u660e\u7684\u662f \u5148\u8f49\u52d5 child, \u7136\u5f8c\u518d\u8f49\u52d5 parent<\/p>\n<p>2) child == parent.Inverse() * combine;<br \/>\u7531\u525b\u525b\u7684\u7b54\u6848(Combine)\u4e58\u4e0a parent.Inverse()\u5373\u662f\u53d6\u6d88 parent \u7684\u610f\u601d.<br \/>\u56e0\u70ba\u5168\u5beb\u61c9\u8a72\u662f child = parent.Inverse() * parent * child;<\/p>\n<p>3) parent == combine * child.Inverse();<br \/>\u540c\u7406\u8981\u7531combine \u89e3\u62c6 parent \u7684\u8f49\u5411\u5c31\u9019\u6a23.<br \/>\u56e0\u70ba\u5168\u5beb\u61c9\u8a72\u662f parent = parent * child * child.Inverse();<\/p>\n<p>Reference :<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Quaternions_and_spatial_rotation\">https:\/\/en.wikipedia.org\/wiki\/Quaternions_and_spatial_rotation<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u53d6\u5f97\u55ae\u4e00 Quaternion \u7684\u67d0\u500b\u65b9\u5411(Direction &#8211; vector)? \u7531 &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78],"tags":[74],"class_list":["post-2311","post","type-post","status-publish","format-standard","hentry","category-math","tag-quaternion"],"_links":{"self":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/2311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/comments?post=2311"}],"version-history":[{"count":4,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/2311\/revisions"}],"predecessor-version":[{"id":2316,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/2311\/revisions\/2316"}],"wp:attachment":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/media?parent=2311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/categories?post=2311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/tags?post=2311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}