[{"data":1,"prerenderedAt":5174},["ShallowReactive",2],{"navigation":3,"\u002Fgolang\u002Fworld_local_transform":144,"\u002Fgolang\u002Fworld_local_transform-surround":5169},[4,36,53,86,131],{"title":5,"path":6,"stem":7,"children":8,"icon":35},"Golang","\u002Fgolang","1.golang\u002F1.index",[9,11,15,19,23,27,31],{"title":10,"path":6,"stem":7},"golang-各种golang学习以及使用过程中记录",{"title":12,"path":13,"stem":14},"gopls-官方gopls内置mcp server的基本使用","\u002Fgolang\u002Fgopls_mcp_usages","1.golang\u002F2.gopls_mcp_usages",{"title":16,"path":17,"stem":18},"实践-(一)创建简单的http服务器","\u002Fgolang\u002Fgo_http_simple_server","1.golang\u002F3.go_http_simple_server",{"title":20,"path":21,"stem":22},"wails入门系列(一)环境安装与demo","\u002Fgolang\u002Fwails_start","1.golang\u002F4.wails_start",{"title":24,"path":25,"stem":26},"wails入门系列(二)无边框应用的菜单栏以及窗口拖拽","\u002Fgolang\u002Fwails_frameless","1.golang\u002F5.wails_frameless",{"title":28,"path":29,"stem":30},"go\u002Fredis-redis中大数字自动转换成指数形式的处理","\u002Fgolang\u002Fredis_big_num","1.golang\u002F6.redis_big_num",{"title":32,"path":33,"stem":34},"go\u002F方法记录-局部坐标与世界坐标间的相互转换(位置\u002F方向)","\u002Fgolang\u002Fworld_local_transform","1.golang\u002F7.world_local_transform",false,{"title":37,"icon":35,"path":38,"stem":39,"children":40,"page":35},"瞎折腾","\u002Ftinkering","2.tinkering",[41,45,49],{"title":42,"path":43,"stem":44},"mi50显卡ubuntu运行大模型开坑(一)显卡准备以及驱动安装","\u002Ftinkering\u002Fmi50_gpu_llm_1","2.tinkering\u002F1.mi50_gpu_llm_1",{"title":46,"path":47,"stem":48},"mi50显卡ubuntu运行大模型开坑(二)使用llama.cpp部署Qwen3系列","\u002Ftinkering\u002Fmi50_gpu_llm_2","2.tinkering\u002F2.mi50_gpu_llm_2",{"title":50,"path":51,"stem":52},"mi50显卡ubuntu运行大模型开坑(三)安装风扇并且控制转速","\u002Ftinkering\u002Fmi50_gpu_llm_3","2.tinkering\u002F3.mi50_gpu_llm_3",{"title":54,"icon":35,"path":55,"stem":56,"children":57,"page":35},"LLM","\u002Fllm","3.llm",[58,62,66,70,74,78,82],{"title":59,"path":60,"stem":61},"langchain入门-安装以及初次使用(deepseek api版本)","\u002Fllm\u002Flangchain1","3.llm\u002F01.langchain1",{"title":63,"path":64,"stem":65},"langchain入门-使用langchain调用本地部署的大模型(以llama.cpp以及ollama为例)","\u002Fllm\u002Flangchain2","3.llm\u002F02.langchain2",{"title":67,"path":68,"stem":69},"langchain入门-使用langchain编写一个简单的聊天机器人(DeepSeek API&命令行版本)","\u002Fllm\u002Flangchain3","3.llm\u002F03.langchain3",{"title":71,"path":72,"stem":73},"langchain入门-使用langchain构建一个拥有RAG能力的代码问答应用(DeepSeek API&本地bge-m3&命令行版本)","\u002Fllm\u002Flangchain4","3.llm\u002F04.langchain4",{"title":75,"path":76,"stem":77},"golang\u002Feino eino框架的基础使用 Message以及ChatModel入门","\u002Fllm\u002Feino1","3.llm\u002F05.eino1",{"title":79,"path":80,"stem":81},"golang\u002Feino eino框架的基础使用 在ChatModel中使用工具","\u002Fllm\u002Feino2","3.llm\u002F06.eino2",{"title":83,"path":84,"stem":85},"llm\u002Fagent agent-zero初步搭建与使用","\u002Fllm\u002Fagent_zero_start","3.llm\u002F07.agent_zero_start",{"title":87,"icon":35,"path":88,"stem":89,"children":90,"page":35},"Verilog","\u002Fverilog","4.verilog",[91,95,99,103,107,111,115,119,123,127],{"title":92,"path":93,"stem":94},"31条指令单周期cpu设计(Verilog)-(一)相关软件","\u002Fverilog\u002Fmips1","4.verilog\u002F01.mips1",{"title":96,"path":97,"stem":98},"31条指令单周期cpu设计(Verilog)-(二)总体设计","\u002Fverilog\u002Fmips2","4.verilog\u002F02.mips2",{"title":100,"path":101,"stem":102},"31条指令单周期cpu设计(Verilog)-(三)指令分析","\u002Fverilog\u002Fmips3","4.verilog\u002F03.mips3",{"title":104,"path":105,"stem":106},"31条指令单周期cpu设计(Verilog)-(四)数据输入输出关系表","\u002Fverilog\u002Fmips4","4.verilog\u002F04.mips4",{"title":108,"path":109,"stem":110},"31条指令单周期cpu设计(Verilog)-(五)整体数据通路图设计","\u002Fverilog\u002Fmips5","4.verilog\u002F05.mips5",{"title":112,"path":113,"stem":114},"31条指令单周期cpu设计(Verilog)-(六)指令操作时间表设计","\u002Fverilog\u002Fmips6","4.verilog\u002F06.mips6",{"title":116,"path":117,"stem":118},"31条指令单周期cpu设计(Verilog)-(七)整体代码结构","\u002Fverilog\u002Fmips7","4.verilog\u002F07.mips7",{"title":120,"path":121,"stem":122},"31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器","\u002Fverilog\u002Fmips8","4.verilog\u002F08.mips8",{"title":124,"path":125,"stem":126},"31条指令单周期cpu设计(Verilog)-(九)上代码→基础模块实现","\u002Fverilog\u002Fmips9","4.verilog\u002F09.mips9",{"title":128,"path":129,"stem":130},"31条指令单周期cpu设计(Verilog)-(十)上代码→顶层模块设计&总结","\u002Fverilog\u002Fmips10","4.verilog\u002F10.mips10",{"title":132,"icon":35,"path":133,"stem":134,"children":135,"page":35},"Rust","\u002Frust","5.rust",[136,140],{"title":137,"path":138,"stem":139},"egui(一)从编译运行template开始","\u002Frust\u002Fegui1","5.rust\u002F01.egui1",{"title":141,"path":142,"stem":143},"egui(二)看看template的main函数：日志输出以及eframe run_native","\u002Frust\u002Fegui2","5.rust\u002F02.egui2",{"id":145,"title":32,"body":146,"description":5161,"extension":5162,"links":5163,"meta":5164,"navigation":5,"path":33,"seo":5165,"stem":34,"__hash__":5168},"docs\u002F1.golang\u002F7.world_local_transform.md",{"type":147,"value":148,"toc":5145},"minimark",[149,153,166,169,506,509,838,842,924,928,2265,2269,2274,3201,3205,4081,4085,4088,4351,4354,4618,4620,5141],[150,151,152],"h2",{"id":152},"说在前面",[154,155,156],"blockquote",{},[157,158,159,163],"ul",{},[160,161,162],"li",{},"golang版本： go1.20.5 windows\u002F386",[160,164,165],{},"gonum版本：gonum.org\u002Fv1\u002Fgonum v0.14.0",[150,167,168],{"id":168},"计算旋转矩阵",[157,170,171,269],{},[160,172,173,174,258,261,262],{},"四元数→旋转矩阵",[175,176,181],"pre",{"className":177,"code":178,"language":179,"meta":180,"style":180},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import (\n    \"gonum.org\u002Fv1\u002Fgonum\u002Fmat\"\n    \"gonum.org\u002Fv1\u002Fgonum\u002Fnum\u002Fquat\"\n)\nfunc QuaternionToMatrix(qua *quat.Number) *mat.Dense {\n    x, y, z, w := qua.Imag, qua.Jmag, qua.Kmag, qua.Real\n    return mat.NewDense(3, 3, []float64{\n        1 - 2*y*y - 2*z*z, 2*x*y - 2*z*w, 2*x*z + 2*y*w,\n        2*x*y + 2*z*w, 1 - 2*x*x - 2*z*z, 2*y*z - 2*x*w,\n        2*x*z - 2*y*w, 2*y*z + 2*x*w, 1 - 2*x*x - 2*y*y,\n    })\n}\n","go","",[182,183,184,192,198,204,210,216,222,228,234,240,246,252],"code",{"__ignoreMap":180},[185,186,189],"span",{"class":187,"line":188},"line",1,[185,190,191],{},"import (\n",[185,193,195],{"class":187,"line":194},2,[185,196,197],{},"    \"gonum.org\u002Fv1\u002Fgonum\u002Fmat\"\n",[185,199,201],{"class":187,"line":200},3,[185,202,203],{},"    \"gonum.org\u002Fv1\u002Fgonum\u002Fnum\u002Fquat\"\n",[185,205,207],{"class":187,"line":206},4,[185,208,209],{},")\n",[185,211,213],{"class":187,"line":212},5,[185,214,215],{},"func QuaternionToMatrix(qua *quat.Number) *mat.Dense {\n",[185,217,219],{"class":187,"line":218},6,[185,220,221],{},"    x, y, z, w := qua.Imag, qua.Jmag, qua.Kmag, qua.Real\n",[185,223,225],{"class":187,"line":224},7,[185,226,227],{},"    return mat.NewDense(3, 3, []float64{\n",[185,229,231],{"class":187,"line":230},8,[185,232,233],{},"        1 - 2*y*y - 2*z*z, 2*x*y - 2*z*w, 2*x*z + 2*y*w,\n",[185,235,237],{"class":187,"line":236},9,[185,238,239],{},"        2*x*y + 2*z*w, 1 - 2*x*x - 2*z*z, 2*y*z - 2*x*w,\n",[185,241,243],{"class":187,"line":242},10,[185,244,245],{},"        2*x*z - 2*y*w, 2*y*z + 2*x*w, 1 - 2*x*x - 2*y*y,\n",[185,247,249],{"class":187,"line":248},11,[185,250,251],{},"    })\n",[185,253,255],{"class":187,"line":254},12,[185,256,257],{},"}\n",[259,260],"br",{},"详见：",[263,264,268],"a",{"href":265,"rel":266},"https:\u002F\u002Fwww.euclideanspace.com\u002Fmaths\u002Fgeometry\u002Frotations\u002Fconversions\u002FquaternionToMatrix\u002Findex.htm",[267],"nofollow","Maths - Conversion Quaternion to Matrix",[160,270,271,272],{},"旋转矩阵→四元数",[175,273,275],{"className":177,"code":274,"language":179,"meta":180,"style":180},"import (\n    \"gonum.org\u002Fv1\u002Fgonum\u002Fmat\"\n    \"gonum.org\u002Fv1\u002Fgonum\u002Fnum\u002Fquat\"\n)\nfunc MatrixToQuaternion(m *mat.Dense) *quat.Number {\n    var m00, m01, m02,\n        m10, m11, m12,\n        m20, m21, m22 = m.At(0, 0), m.At(0, 1), m.At(0, 2),\n        m.At(1, 0), m.At(1, 1), m.At(1, 2),\n        m.At(2, 0), m.At(2, 1), m.At(2, 2)\n\n    tr := m00 + m11 + m22\n\n    var x, y, z, w float64\n    if tr > 0 {\n        S := math.Sqrt(tr+1.0) * 2 \u002F\u002F S=4*qw\n        w = 0.25 * S\n        x = (m21 - m12) \u002F S\n        y = (m02 - m20) \u002F S\n        z = (m10 - m01) \u002F S\n    } else if (m00 > m11) && (m00 > m22) {\n        S := math.Sqrt(1.0+m00-m11-m22) * 2 \u002F\u002F S=4*qx\n        w = (m21 - m12) \u002F S\n        x = 0.25 * S\n        y = (m01 + m10) \u002F S\n        z = (m02 + m20) \u002F S\n    } else if m11 > m22 {\n        S := math.Sqrt(1.0+m11-m00-m22) * 2 \u002F\u002F S=4*qy\n        w = (m02 - m20) \u002F S\n        x = (m01 + m10) \u002F S\n        y = 0.25 * S\n        z = (m12 + m21) \u002F S\n    } else {\n        S := math.Sqrt(1.0+m22-m00-m11) * 2 \u002F\u002F S=4*qz\n        w = (m10 - m01) \u002F S\n        x = (m02 + m20) \u002F S\n        y = (m12 + m21) \u002F S\n        z = 0.25 * S\n    }\n    return &quat.Number{Real: w, Imag: x, Jmag: y, Kmag: z}\n}\n",[182,276,277,281,285,289,293,298,303,308,313,318,323,329,334,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501],{"__ignoreMap":180},[185,278,279],{"class":187,"line":188},[185,280,191],{},[185,282,283],{"class":187,"line":194},[185,284,197],{},[185,286,287],{"class":187,"line":200},[185,288,203],{},[185,290,291],{"class":187,"line":206},[185,292,209],{},[185,294,295],{"class":187,"line":212},[185,296,297],{},"func MatrixToQuaternion(m *mat.Dense) *quat.Number {\n",[185,299,300],{"class":187,"line":218},[185,301,302],{},"    var m00, m01, m02,\n",[185,304,305],{"class":187,"line":224},[185,306,307],{},"        m10, m11, m12,\n",[185,309,310],{"class":187,"line":230},[185,311,312],{},"        m20, m21, m22 = m.At(0, 0), m.At(0, 1), m.At(0, 2),\n",[185,314,315],{"class":187,"line":236},[185,316,317],{},"        m.At(1, 0), m.At(1, 1), m.At(1, 2),\n",[185,319,320],{"class":187,"line":242},[185,321,322],{},"        m.At(2, 0), m.At(2, 1), m.At(2, 2)\n",[185,324,325],{"class":187,"line":248},[185,326,328],{"emptyLinePlaceholder":327},true,"\n",[185,330,331],{"class":187,"line":254},[185,332,333],{},"    tr := m00 + m11 + m22\n",[185,335,337],{"class":187,"line":336},13,[185,338,328],{"emptyLinePlaceholder":327},[185,340,342],{"class":187,"line":341},14,[185,343,344],{},"    var x, y, z, w float64\n",[185,346,348],{"class":187,"line":347},15,[185,349,350],{},"    if tr > 0 {\n",[185,352,354],{"class":187,"line":353},16,[185,355,356],{},"        S := math.Sqrt(tr+1.0) * 2 \u002F\u002F S=4*qw\n",[185,358,360],{"class":187,"line":359},17,[185,361,362],{},"        w = 0.25 * S\n",[185,364,366],{"class":187,"line":365},18,[185,367,368],{},"        x = (m21 - m12) \u002F S\n",[185,370,372],{"class":187,"line":371},19,[185,373,374],{},"        y = (m02 - m20) \u002F S\n",[185,376,378],{"class":187,"line":377},20,[185,379,380],{},"        z = (m10 - m01) \u002F S\n",[185,382,384],{"class":187,"line":383},21,[185,385,386],{},"    } else if (m00 > m11) && (m00 > m22) {\n",[185,388,390],{"class":187,"line":389},22,[185,391,392],{},"        S := math.Sqrt(1.0+m00-m11-m22) * 2 \u002F\u002F S=4*qx\n",[185,394,396],{"class":187,"line":395},23,[185,397,398],{},"        w = (m21 - m12) \u002F S\n",[185,400,402],{"class":187,"line":401},24,[185,403,404],{},"        x = 0.25 * S\n",[185,406,408],{"class":187,"line":407},25,[185,409,410],{},"        y = (m01 + m10) \u002F S\n",[185,412,414],{"class":187,"line":413},26,[185,415,416],{},"        z = (m02 + m20) \u002F S\n",[185,418,420],{"class":187,"line":419},27,[185,421,422],{},"    } else if m11 > m22 {\n",[185,424,426],{"class":187,"line":425},28,[185,427,428],{},"        S := math.Sqrt(1.0+m11-m00-m22) * 2 \u002F\u002F S=4*qy\n",[185,430,432],{"class":187,"line":431},29,[185,433,434],{},"        w = (m02 - m20) \u002F S\n",[185,436,438],{"class":187,"line":437},30,[185,439,440],{},"        x = (m01 + m10) \u002F S\n",[185,442,444],{"class":187,"line":443},31,[185,445,446],{},"        y = 0.25 * S\n",[185,448,450],{"class":187,"line":449},32,[185,451,452],{},"        z = (m12 + m21) \u002F S\n",[185,454,456],{"class":187,"line":455},33,[185,457,458],{},"    } else {\n",[185,460,462],{"class":187,"line":461},34,[185,463,464],{},"        S := math.Sqrt(1.0+m22-m00-m11) * 2 \u002F\u002F S=4*qz\n",[185,466,468],{"class":187,"line":467},35,[185,469,470],{},"        w = (m10 - m01) \u002F S\n",[185,472,474],{"class":187,"line":473},36,[185,475,476],{},"        x = (m02 + m20) \u002F S\n",[185,478,480],{"class":187,"line":479},37,[185,481,482],{},"        y = (m12 + m21) \u002F S\n",[185,484,486],{"class":187,"line":485},38,[185,487,488],{},"        z = 0.25 * S\n",[185,490,492],{"class":187,"line":491},39,[185,493,494],{},"    }\n",[185,496,498],{"class":187,"line":497},40,[185,499,500],{},"    return &quat.Number{Real: w, Imag: x, Jmag: y, Kmag: z}\n",[185,502,504],{"class":187,"line":503},41,[185,505,257],{},[150,507,508],{"id":508},"计算变换矩阵",[157,510,511,835],{},[160,512,513,514,775,776,804,805,834],{},"变换矩阵的基本形式为：\n",[185,515,518,597],{"className":516},[517],"katex",[185,519,522],{"className":520},[521],"katex-mathml",[523,524,526],"math",{"xmlns":525},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[527,528,529,592],"semantics",{},[530,531,532,536,540],"mrow",{},[533,534,535],"mi",{},"T",[537,538,539],"mo",{},"=",[530,541,542,546,589],{},[537,543,545],{"fence":544},"true","[",[547,548,552,573],"mtable",{"rowspacing":549,"columnalign":550,"columnspacing":551},"0.16em","center center","1em",[553,554,555,566],"mtr",{},[556,557,558],"mtd",{},[559,560,563],"mstyle",{"scriptlevel":561,"displaystyle":562},"0","false",[533,564,565],{},"R",[556,567,568],{},[559,569,570],{"scriptlevel":561,"displaystyle":562},[533,571,572],{},"t",[553,574,575,582],{},[556,576,577],{},[559,578,579],{"scriptlevel":561,"displaystyle":562},[580,581,561],"mn",{},[556,583,584],{},[559,585,586],{"scriptlevel":561,"displaystyle":562},[580,587,588],{},"1",[537,590,591],{"fence":544},"]",[593,594,596],"annotation",{"encoding":595},"application\u002Fx-tex","T = \\begin{bmatrix} R & t \\\\ 0 & 1 \\end{bmatrix} ",[185,598,601,628],{"className":599,"ariaHidden":544},[600],"katex-html",[185,602,605,610,616,621,625],{"className":603},[604],"base",[185,606],{"className":607,"style":609},[608],"strut","height:0.6833em;",[185,611,535],{"className":612,"style":615},[613,614],"mord","mathnormal","margin-right:0.1389em;",[185,617],{"className":618,"style":620},[619],"mspace","margin-right:0.2778em;",[185,622,539],{"className":623},[624],"mrel",[185,626],{"className":627,"style":620},[619],[185,629,631,635],{"className":630},[604],[185,632],{"className":633,"style":634},[608],"height:2.4em;vertical-align:-0.95em;",[185,636,639,650,768],{"className":637},[638],"minner",[185,640,645],{"className":641,"style":644},[642,643],"mopen","delimcenter","top:0em;",[185,646,545],{"className":647},[648,649],"delimsizing","size3",[185,651,653],{"className":652},[613],[185,654,656,715,720,723],{"className":655},[547],[185,657,660],{"className":658},[659],"col-align-c",[185,661,665,706],{"className":662},[663,664],"vlist-t","vlist-t2",[185,666,669,701],{"className":667},[668],"vlist-r",[185,670,674,689],{"className":671,"style":673},[672],"vlist","height:1.45em;",[185,675,677,682],{"style":676},"top:-3.61em;",[185,678],{"className":679,"style":681},[680],"pstrut","height:3em;",[185,683,685],{"className":684},[613],[185,686,565],{"className":687,"style":688},[613,614],"margin-right:0.0077em;",[185,690,692,695],{"style":691},"top:-2.41em;",[185,693],{"className":694,"style":681},[680],[185,696,698],{"className":697},[613],[185,699,561],{"className":700},[613],[185,702,705],{"className":703},[704],"vlist-s","​",[185,707,709],{"className":708},[668],[185,710,713],{"className":711,"style":712},[672],"height:0.95em;",[185,714],{},[185,716],{"className":717,"style":719},[718],"arraycolsep","width:0.5em;",[185,721],{"className":722,"style":719},[718],[185,724,726],{"className":725},[659],[185,727,729,760],{"className":728},[663,664],[185,730,732,757],{"className":731},[668],[185,733,735,746],{"className":734,"style":673},[672],[185,736,737,740],{"style":676},[185,738],{"className":739,"style":681},[680],[185,741,743],{"className":742},[613],[185,744,572],{"className":745},[613,614],[185,747,748,751],{"style":691},[185,749],{"className":750,"style":681},[680],[185,752,754],{"className":753},[613],[185,755,588],{"className":756},[613],[185,758,705],{"className":759},[704],[185,761,763],{"className":762},[668],[185,764,766],{"className":765,"style":712},[672],[185,767],{},[185,769,772],{"className":770,"style":644},[771,643],"mclose",[185,773,591],{"className":774},[648,649],"\n其中",[185,777,779,792],{"className":778},[517],[185,780,782],{"className":781},[521],[523,783,784],{"xmlns":525},[527,785,786,790],{},[530,787,788],{},[533,789,565],{},[593,791,565],{"encoding":595},[185,793,795],{"className":794,"ariaHidden":544},[600],[185,796,798,801],{"className":797},[604],[185,799],{"className":800,"style":609},[608],[185,802,565],{"className":803,"style":688},[613,614],"为上文计算的旋转矩阵，而",[185,806,808,821],{"className":807},[517],[185,809,811],{"className":810},[521],[523,812,813],{"xmlns":525},[527,814,815,819],{},[530,816,817],{},[533,818,572],{},[593,820,572],{"encoding":595},[185,822,824],{"className":823,"ariaHidden":544},[600],[185,825,827,831],{"className":826},[604],[185,828],{"className":829,"style":830},[608],"height:0.6151em;",[185,832,572],{"className":833},[613,614],"为3row x 1col的位移变换（其值为物体的三维坐标）",[160,836,837],{},"如果知道了World Space中某个物体的位置以及朝向(欧拉角或四元数)，就能计算出它(相对于世界坐标系)的变换矩阵。",[150,839,841],{"id":840},"inverse-quaternion","Inverse Quaternion",[157,843,844,875],{},[160,845,846,847,850,851],{},"对于一个单位四元数，直接取共轭（conjugate），",[182,848,849],{},"gonum","库有提供接口：\n",[175,852,854],{"className":177,"code":853,"language":179,"meta":180,"style":180},"\u002F\u002F Conj returns the quaternion conjugate of q.\nfunc Conj(q Number) Number {\n    return Number{Real: q.Real, Imag: -q.Imag, Jmag: -q.Jmag, Kmag: -q.Kmag}\n}\n",[182,855,856,861,866,871],{"__ignoreMap":180},[185,857,858],{"class":187,"line":188},[185,859,860],{},"\u002F\u002F Conj returns the quaternion conjugate of q.\n",[185,862,863],{"class":187,"line":194},[185,864,865],{},"func Conj(q Number) Number {\n",[185,867,868],{"class":187,"line":200},[185,869,870],{},"    return Number{Real: q.Real, Imag: -q.Imag, Jmag: -q.Jmag, Kmag: -q.Kmag}\n",[185,872,873],{"class":187,"line":206},[185,874,257],{},[160,876,877,878,880,881],{},"否则，需要归一，",[182,879,849],{},"库也提供了接口：\n",[175,882,884],{"className":177,"code":883,"language":179,"meta":180,"style":180},"\u002F\u002F Inv returns the quaternion inverse of q.\nfunc Inv(q Number) Number {\n    if IsInf(q) {\n        return zero\n    }\n    a := Abs(q)\n    return Scale(1\u002F(a*a), Conj(q))\n}\n",[182,885,886,891,896,901,906,910,915,920],{"__ignoreMap":180},[185,887,888],{"class":187,"line":188},[185,889,890],{},"\u002F\u002F Inv returns the quaternion inverse of q.\n",[185,892,893],{"class":187,"line":194},[185,894,895],{},"func Inv(q Number) Number {\n",[185,897,898],{"class":187,"line":200},[185,899,900],{},"    if IsInf(q) {\n",[185,902,903],{"class":187,"line":206},[185,904,905],{},"        return zero\n",[185,907,908],{"class":187,"line":212},[185,909,494],{},[185,911,912],{"class":187,"line":218},[185,913,914],{},"    a := Abs(q)\n",[185,916,917],{"class":187,"line":224},[185,918,919],{},"    return Scale(1\u002F(a*a), Conj(q))\n",[185,921,922],{"class":187,"line":230},[185,923,257],{},[150,925,927],{"id":926},"euler-to-quaternion","Euler To Quaternion",[157,929,930,936],{},[160,931,932,933],{},"欧拉角转四元数时，不同的旋转顺序对应的结果不一样，需要先确定旋顺序，Unity默认的顺序为",[182,934,935],{},"ZXY",[160,937,938,939,942,943],{},"参考",[182,940,941],{},"Three.js","实现\n",[175,944,948],{"className":945,"code":946,"language":947,"meta":180,"style":180},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","setFromEuler( euler, update ) {\n    const x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n    \u002F\u002F http:\u002F\u002Fwww.mathworks.com\u002Fmatlabcentral\u002Ffileexchange\u002F\n    \u002F\u002F  20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors\u002F\n    \u002F\u002F  content\u002FSpinCalc.m\n\n    const cos = Math.cos;\n    const sin = Math.sin;\n\n    const c1 = cos( x \u002F 2 );\n    const c2 = cos( y \u002F 2 );\n    const c3 = cos( z \u002F 2 );\n\n    const s1 = sin( x \u002F 2 );\n    const s2 = sin( y \u002F 2 );\n    const s3 = sin( z \u002F 2 );\n\n    switch ( order ) {\n        case 'XYZ':\n            this._x = s1 * c2 * c3 + c1 * s2 * s3;\n            this._y = c1 * s2 * c3 - s1 * c2 * s3;\n            this._z = c1 * c2 * s3 + s1 * s2 * c3;\n            this._w = c1 * c2 * c3 - s1 * s2 * s3;\n            break;\n        case 'YXZ':\n            this._x = s1 * c2 * c3 + c1 * s2 * s3;\n            this._y = c1 * s2 * c3 - s1 * c2 * s3;\n            this._z = c1 * c2 * s3 - s1 * s2 * c3;\n            this._w = c1 * c2 * c3 + s1 * s2 * s3;\n            break;\n        case 'ZXY':\n            this._x = s1 * c2 * c3 - c1 * s2 * s3;\n            this._y = c1 * s2 * c3 + s1 * c2 * s3;\n            this._z = c1 * c2 * s3 + s1 * s2 * c3;\n            this._w = c1 * c2 * c3 - s1 * s2 * s3;\n            break;\n        case 'ZYX':\n            this._x = s1 * c2 * c3 - c1 * s2 * s3;\n            this._y = c1 * s2 * c3 + s1 * c2 * s3;\n            this._z = c1 * c2 * s3 - s1 * s2 * c3;\n            this._w = c1 * c2 * c3 + s1 * s2 * s3;\n            break;\n        case 'YZX':\n            this._x = s1 * c2 * c3 + c1 * s2 * s3;\n            this._y = c1 * s2 * c3 + s1 * c2 * s3;\n            this._z = c1 * c2 * s3 - s1 * s2 * c3;\n            this._w = c1 * c2 * c3 - s1 * s2 * s3;\n            break;\n        case 'XZY':\n            this._x = s1 * c2 * c3 - c1 * s2 * s3;\n            this._y = c1 * s2 * c3 - s1 * c2 * s3;\n            this._z = c1 * c2 * s3 + s1 * s2 * c3;\n            this._w = c1 * c2 * c3 + s1 * s2 * s3;\n            break;\n        default:\n            console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n    }\n    if ( update !== false ) this._onChangeCallback();\n    return this;\n}\n","js",[182,949,950,970,1036,1040,1046,1051,1056,1060,1079,1097,1101,1131,1155,1179,1183,1206,1229,1252,1256,1273,1291,1326,1359,1391,1424,1431,1444,1476,1508,1540,1572,1578,1590,1622,1654,1686,1718,1724,1737,1769,1801,1833,1866,1873,1887,1920,1953,1986,2019,2026,2040,2073,2106,2139,2172,2179,2187,2215,2220,2251,2260],{"__ignoreMap":180},[185,951,952,956,960,964,967],{"class":187,"line":188},[185,953,955],{"class":954},"s2Zo4","setFromEuler",[185,957,959],{"class":958},"sTEyZ","( euler",[185,961,963],{"class":962},"sMK4o",",",[185,965,966],{"class":958}," update ) ",[185,968,969],{"class":962},"{\n",[185,971,972,976,979,982,985,988,991,993,996,998,1000,1002,1005,1007,1010,1012,1014,1016,1019,1021,1024,1026,1028,1030,1033],{"class":187,"line":194},[185,973,975],{"class":974},"spNyl","    const",[185,977,978],{"class":958}," x",[185,980,981],{"class":962}," =",[185,983,984],{"class":958}," euler",[185,986,987],{"class":962},".",[185,989,990],{"class":958},"_x",[185,992,963],{"class":962},[185,994,995],{"class":958}," y",[185,997,981],{"class":962},[185,999,984],{"class":958},[185,1001,987],{"class":962},[185,1003,1004],{"class":958},"_y",[185,1006,963],{"class":962},[185,1008,1009],{"class":958}," z",[185,1011,981],{"class":962},[185,1013,984],{"class":958},[185,1015,987],{"class":962},[185,1017,1018],{"class":958},"_z",[185,1020,963],{"class":962},[185,1022,1023],{"class":958}," order",[185,1025,981],{"class":962},[185,1027,984],{"class":958},[185,1029,987],{"class":962},[185,1031,1032],{"class":958},"_order",[185,1034,1035],{"class":962},";\n",[185,1037,1038],{"class":187,"line":200},[185,1039,328],{"emptyLinePlaceholder":327},[185,1041,1042],{"class":187,"line":206},[185,1043,1045],{"class":1044},"sHwdD","    \u002F\u002F http:\u002F\u002Fwww.mathworks.com\u002Fmatlabcentral\u002Ffileexchange\u002F\n",[185,1047,1048],{"class":187,"line":212},[185,1049,1050],{"class":1044},"    \u002F\u002F  20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors\u002F\n",[185,1052,1053],{"class":187,"line":218},[185,1054,1055],{"class":1044},"    \u002F\u002F  content\u002FSpinCalc.m\n",[185,1057,1058],{"class":187,"line":224},[185,1059,328],{"emptyLinePlaceholder":327},[185,1061,1062,1064,1067,1069,1072,1074,1077],{"class":187,"line":230},[185,1063,975],{"class":974},[185,1065,1066],{"class":958}," cos",[185,1068,981],{"class":962},[185,1070,1071],{"class":958}," Math",[185,1073,987],{"class":962},[185,1075,1076],{"class":958},"cos",[185,1078,1035],{"class":962},[185,1080,1081,1083,1086,1088,1090,1092,1095],{"class":187,"line":236},[185,1082,975],{"class":974},[185,1084,1085],{"class":958}," sin",[185,1087,981],{"class":962},[185,1089,1071],{"class":958},[185,1091,987],{"class":962},[185,1093,1094],{"class":958},"sin",[185,1096,1035],{"class":962},[185,1098,1099],{"class":187,"line":242},[185,1100,328],{"emptyLinePlaceholder":327},[185,1102,1103,1105,1108,1110,1112,1116,1119,1122,1126,1129],{"class":187,"line":248},[185,1104,975],{"class":974},[185,1106,1107],{"class":958}," c1",[185,1109,981],{"class":962},[185,1111,1066],{"class":954},[185,1113,1115],{"class":1114},"swJcz","( ",[185,1117,1118],{"class":958},"x",[185,1120,1121],{"class":962}," \u002F",[185,1123,1125],{"class":1124},"sbssI"," 2",[185,1127,1128],{"class":1114}," )",[185,1130,1035],{"class":962},[185,1132,1133,1135,1138,1140,1142,1144,1147,1149,1151,1153],{"class":187,"line":254},[185,1134,975],{"class":974},[185,1136,1137],{"class":958}," c2",[185,1139,981],{"class":962},[185,1141,1066],{"class":954},[185,1143,1115],{"class":1114},[185,1145,1146],{"class":958},"y",[185,1148,1121],{"class":962},[185,1150,1125],{"class":1124},[185,1152,1128],{"class":1114},[185,1154,1035],{"class":962},[185,1156,1157,1159,1162,1164,1166,1168,1171,1173,1175,1177],{"class":187,"line":336},[185,1158,975],{"class":974},[185,1160,1161],{"class":958}," c3",[185,1163,981],{"class":962},[185,1165,1066],{"class":954},[185,1167,1115],{"class":1114},[185,1169,1170],{"class":958},"z",[185,1172,1121],{"class":962},[185,1174,1125],{"class":1124},[185,1176,1128],{"class":1114},[185,1178,1035],{"class":962},[185,1180,1181],{"class":187,"line":341},[185,1182,328],{"emptyLinePlaceholder":327},[185,1184,1185,1187,1190,1192,1194,1196,1198,1200,1202,1204],{"class":187,"line":347},[185,1186,975],{"class":974},[185,1188,1189],{"class":958}," s1",[185,1191,981],{"class":962},[185,1193,1085],{"class":954},[185,1195,1115],{"class":1114},[185,1197,1118],{"class":958},[185,1199,1121],{"class":962},[185,1201,1125],{"class":1124},[185,1203,1128],{"class":1114},[185,1205,1035],{"class":962},[185,1207,1208,1210,1213,1215,1217,1219,1221,1223,1225,1227],{"class":187,"line":353},[185,1209,975],{"class":974},[185,1211,1212],{"class":958}," s2",[185,1214,981],{"class":962},[185,1216,1085],{"class":954},[185,1218,1115],{"class":1114},[185,1220,1146],{"class":958},[185,1222,1121],{"class":962},[185,1224,1125],{"class":1124},[185,1226,1128],{"class":1114},[185,1228,1035],{"class":962},[185,1230,1231,1233,1236,1238,1240,1242,1244,1246,1248,1250],{"class":187,"line":359},[185,1232,975],{"class":974},[185,1234,1235],{"class":958}," s3",[185,1237,981],{"class":962},[185,1239,1085],{"class":954},[185,1241,1115],{"class":1114},[185,1243,1170],{"class":958},[185,1245,1121],{"class":962},[185,1247,1125],{"class":1124},[185,1249,1128],{"class":1114},[185,1251,1035],{"class":962},[185,1253,1254],{"class":187,"line":365},[185,1255,328],{"emptyLinePlaceholder":327},[185,1257,1258,1262,1265,1268,1271],{"class":187,"line":371},[185,1259,1261],{"class":1260},"s7zQu","    switch",[185,1263,1264],{"class":1114}," ( ",[185,1266,1267],{"class":958},"order",[185,1269,1270],{"class":1114}," ) ",[185,1272,969],{"class":962},[185,1274,1275,1278,1281,1285,1288],{"class":187,"line":377},[185,1276,1277],{"class":1260},"        case",[185,1279,1280],{"class":962}," '",[185,1282,1284],{"class":1283},"sfazB","XYZ",[185,1286,1287],{"class":962},"'",[185,1289,1290],{"class":962},":\n",[185,1292,1293,1296,1298,1300,1302,1305,1307,1309,1311,1314,1316,1318,1320,1322,1324],{"class":187,"line":383},[185,1294,1295],{"class":962},"            this.",[185,1297,990],{"class":958},[185,1299,981],{"class":962},[185,1301,1189],{"class":958},[185,1303,1304],{"class":962}," *",[185,1306,1137],{"class":958},[185,1308,1304],{"class":962},[185,1310,1161],{"class":958},[185,1312,1313],{"class":962}," +",[185,1315,1107],{"class":958},[185,1317,1304],{"class":962},[185,1319,1212],{"class":958},[185,1321,1304],{"class":962},[185,1323,1235],{"class":958},[185,1325,1035],{"class":962},[185,1327,1328,1330,1332,1334,1336,1338,1340,1342,1344,1347,1349,1351,1353,1355,1357],{"class":187,"line":389},[185,1329,1295],{"class":962},[185,1331,1004],{"class":958},[185,1333,981],{"class":962},[185,1335,1107],{"class":958},[185,1337,1304],{"class":962},[185,1339,1212],{"class":958},[185,1341,1304],{"class":962},[185,1343,1161],{"class":958},[185,1345,1346],{"class":962}," -",[185,1348,1189],{"class":958},[185,1350,1304],{"class":962},[185,1352,1137],{"class":958},[185,1354,1304],{"class":962},[185,1356,1235],{"class":958},[185,1358,1035],{"class":962},[185,1360,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389],{"class":187,"line":395},[185,1362,1295],{"class":962},[185,1364,1018],{"class":958},[185,1366,981],{"class":962},[185,1368,1107],{"class":958},[185,1370,1304],{"class":962},[185,1372,1137],{"class":958},[185,1374,1304],{"class":962},[185,1376,1235],{"class":958},[185,1378,1313],{"class":962},[185,1380,1189],{"class":958},[185,1382,1304],{"class":962},[185,1384,1212],{"class":958},[185,1386,1304],{"class":962},[185,1388,1161],{"class":958},[185,1390,1035],{"class":962},[185,1392,1393,1395,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422],{"class":187,"line":401},[185,1394,1295],{"class":962},[185,1396,1397],{"class":958},"_w",[185,1399,981],{"class":962},[185,1401,1107],{"class":958},[185,1403,1304],{"class":962},[185,1405,1137],{"class":958},[185,1407,1304],{"class":962},[185,1409,1161],{"class":958},[185,1411,1346],{"class":962},[185,1413,1189],{"class":958},[185,1415,1304],{"class":962},[185,1417,1212],{"class":958},[185,1419,1304],{"class":962},[185,1421,1235],{"class":958},[185,1423,1035],{"class":962},[185,1425,1426,1429],{"class":187,"line":407},[185,1427,1428],{"class":1260},"            break",[185,1430,1035],{"class":962},[185,1432,1433,1435,1437,1440,1442],{"class":187,"line":413},[185,1434,1277],{"class":1260},[185,1436,1280],{"class":962},[185,1438,1439],{"class":1283},"YXZ",[185,1441,1287],{"class":962},[185,1443,1290],{"class":962},[185,1445,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474],{"class":187,"line":419},[185,1447,1295],{"class":962},[185,1449,990],{"class":958},[185,1451,981],{"class":962},[185,1453,1189],{"class":958},[185,1455,1304],{"class":962},[185,1457,1137],{"class":958},[185,1459,1304],{"class":962},[185,1461,1161],{"class":958},[185,1463,1313],{"class":962},[185,1465,1107],{"class":958},[185,1467,1304],{"class":962},[185,1469,1212],{"class":958},[185,1471,1304],{"class":962},[185,1473,1235],{"class":958},[185,1475,1035],{"class":962},[185,1477,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506],{"class":187,"line":425},[185,1479,1295],{"class":962},[185,1481,1004],{"class":958},[185,1483,981],{"class":962},[185,1485,1107],{"class":958},[185,1487,1304],{"class":962},[185,1489,1212],{"class":958},[185,1491,1304],{"class":962},[185,1493,1161],{"class":958},[185,1495,1346],{"class":962},[185,1497,1189],{"class":958},[185,1499,1304],{"class":962},[185,1501,1137],{"class":958},[185,1503,1304],{"class":962},[185,1505,1235],{"class":958},[185,1507,1035],{"class":962},[185,1509,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538],{"class":187,"line":431},[185,1511,1295],{"class":962},[185,1513,1018],{"class":958},[185,1515,981],{"class":962},[185,1517,1107],{"class":958},[185,1519,1304],{"class":962},[185,1521,1137],{"class":958},[185,1523,1304],{"class":962},[185,1525,1235],{"class":958},[185,1527,1346],{"class":962},[185,1529,1189],{"class":958},[185,1531,1304],{"class":962},[185,1533,1212],{"class":958},[185,1535,1304],{"class":962},[185,1537,1161],{"class":958},[185,1539,1035],{"class":962},[185,1541,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570],{"class":187,"line":437},[185,1543,1295],{"class":962},[185,1545,1397],{"class":958},[185,1547,981],{"class":962},[185,1549,1107],{"class":958},[185,1551,1304],{"class":962},[185,1553,1137],{"class":958},[185,1555,1304],{"class":962},[185,1557,1161],{"class":958},[185,1559,1313],{"class":962},[185,1561,1189],{"class":958},[185,1563,1304],{"class":962},[185,1565,1212],{"class":958},[185,1567,1304],{"class":962},[185,1569,1235],{"class":958},[185,1571,1035],{"class":962},[185,1573,1574,1576],{"class":187,"line":443},[185,1575,1428],{"class":1260},[185,1577,1035],{"class":962},[185,1579,1580,1582,1584,1586,1588],{"class":187,"line":449},[185,1581,1277],{"class":1260},[185,1583,1280],{"class":962},[185,1585,935],{"class":1283},[185,1587,1287],{"class":962},[185,1589,1290],{"class":962},[185,1591,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620],{"class":187,"line":455},[185,1593,1295],{"class":962},[185,1595,990],{"class":958},[185,1597,981],{"class":962},[185,1599,1189],{"class":958},[185,1601,1304],{"class":962},[185,1603,1137],{"class":958},[185,1605,1304],{"class":962},[185,1607,1161],{"class":958},[185,1609,1346],{"class":962},[185,1611,1107],{"class":958},[185,1613,1304],{"class":962},[185,1615,1212],{"class":958},[185,1617,1304],{"class":962},[185,1619,1235],{"class":958},[185,1621,1035],{"class":962},[185,1623,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652],{"class":187,"line":461},[185,1625,1295],{"class":962},[185,1627,1004],{"class":958},[185,1629,981],{"class":962},[185,1631,1107],{"class":958},[185,1633,1304],{"class":962},[185,1635,1212],{"class":958},[185,1637,1304],{"class":962},[185,1639,1161],{"class":958},[185,1641,1313],{"class":962},[185,1643,1189],{"class":958},[185,1645,1304],{"class":962},[185,1647,1137],{"class":958},[185,1649,1304],{"class":962},[185,1651,1235],{"class":958},[185,1653,1035],{"class":962},[185,1655,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684],{"class":187,"line":467},[185,1657,1295],{"class":962},[185,1659,1018],{"class":958},[185,1661,981],{"class":962},[185,1663,1107],{"class":958},[185,1665,1304],{"class":962},[185,1667,1137],{"class":958},[185,1669,1304],{"class":962},[185,1671,1235],{"class":958},[185,1673,1313],{"class":962},[185,1675,1189],{"class":958},[185,1677,1304],{"class":962},[185,1679,1212],{"class":958},[185,1681,1304],{"class":962},[185,1683,1161],{"class":958},[185,1685,1035],{"class":962},[185,1687,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716],{"class":187,"line":473},[185,1689,1295],{"class":962},[185,1691,1397],{"class":958},[185,1693,981],{"class":962},[185,1695,1107],{"class":958},[185,1697,1304],{"class":962},[185,1699,1137],{"class":958},[185,1701,1304],{"class":962},[185,1703,1161],{"class":958},[185,1705,1346],{"class":962},[185,1707,1189],{"class":958},[185,1709,1304],{"class":962},[185,1711,1212],{"class":958},[185,1713,1304],{"class":962},[185,1715,1235],{"class":958},[185,1717,1035],{"class":962},[185,1719,1720,1722],{"class":187,"line":479},[185,1721,1428],{"class":1260},[185,1723,1035],{"class":962},[185,1725,1726,1728,1730,1733,1735],{"class":187,"line":485},[185,1727,1277],{"class":1260},[185,1729,1280],{"class":962},[185,1731,1732],{"class":1283},"ZYX",[185,1734,1287],{"class":962},[185,1736,1290],{"class":962},[185,1738,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767],{"class":187,"line":491},[185,1740,1295],{"class":962},[185,1742,990],{"class":958},[185,1744,981],{"class":962},[185,1746,1189],{"class":958},[185,1748,1304],{"class":962},[185,1750,1137],{"class":958},[185,1752,1304],{"class":962},[185,1754,1161],{"class":958},[185,1756,1346],{"class":962},[185,1758,1107],{"class":958},[185,1760,1304],{"class":962},[185,1762,1212],{"class":958},[185,1764,1304],{"class":962},[185,1766,1235],{"class":958},[185,1768,1035],{"class":962},[185,1770,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799],{"class":187,"line":497},[185,1772,1295],{"class":962},[185,1774,1004],{"class":958},[185,1776,981],{"class":962},[185,1778,1107],{"class":958},[185,1780,1304],{"class":962},[185,1782,1212],{"class":958},[185,1784,1304],{"class":962},[185,1786,1161],{"class":958},[185,1788,1313],{"class":962},[185,1790,1189],{"class":958},[185,1792,1304],{"class":962},[185,1794,1137],{"class":958},[185,1796,1304],{"class":962},[185,1798,1235],{"class":958},[185,1800,1035],{"class":962},[185,1802,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831],{"class":187,"line":503},[185,1804,1295],{"class":962},[185,1806,1018],{"class":958},[185,1808,981],{"class":962},[185,1810,1107],{"class":958},[185,1812,1304],{"class":962},[185,1814,1137],{"class":958},[185,1816,1304],{"class":962},[185,1818,1235],{"class":958},[185,1820,1346],{"class":962},[185,1822,1189],{"class":958},[185,1824,1304],{"class":962},[185,1826,1212],{"class":958},[185,1828,1304],{"class":962},[185,1830,1161],{"class":958},[185,1832,1035],{"class":962},[185,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864],{"class":187,"line":1835},42,[185,1837,1295],{"class":962},[185,1839,1397],{"class":958},[185,1841,981],{"class":962},[185,1843,1107],{"class":958},[185,1845,1304],{"class":962},[185,1847,1137],{"class":958},[185,1849,1304],{"class":962},[185,1851,1161],{"class":958},[185,1853,1313],{"class":962},[185,1855,1189],{"class":958},[185,1857,1304],{"class":962},[185,1859,1212],{"class":958},[185,1861,1304],{"class":962},[185,1863,1235],{"class":958},[185,1865,1035],{"class":962},[185,1867,1869,1871],{"class":187,"line":1868},43,[185,1870,1428],{"class":1260},[185,1872,1035],{"class":962},[185,1874,1876,1878,1880,1883,1885],{"class":187,"line":1875},44,[185,1877,1277],{"class":1260},[185,1879,1280],{"class":962},[185,1881,1882],{"class":1283},"YZX",[185,1884,1287],{"class":962},[185,1886,1290],{"class":962},[185,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918],{"class":187,"line":1889},45,[185,1891,1295],{"class":962},[185,1893,990],{"class":958},[185,1895,981],{"class":962},[185,1897,1189],{"class":958},[185,1899,1304],{"class":962},[185,1901,1137],{"class":958},[185,1903,1304],{"class":962},[185,1905,1161],{"class":958},[185,1907,1313],{"class":962},[185,1909,1107],{"class":958},[185,1911,1304],{"class":962},[185,1913,1212],{"class":958},[185,1915,1304],{"class":962},[185,1917,1235],{"class":958},[185,1919,1035],{"class":962},[185,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951],{"class":187,"line":1922},46,[185,1924,1295],{"class":962},[185,1926,1004],{"class":958},[185,1928,981],{"class":962},[185,1930,1107],{"class":958},[185,1932,1304],{"class":962},[185,1934,1212],{"class":958},[185,1936,1304],{"class":962},[185,1938,1161],{"class":958},[185,1940,1313],{"class":962},[185,1942,1189],{"class":958},[185,1944,1304],{"class":962},[185,1946,1137],{"class":958},[185,1948,1304],{"class":962},[185,1950,1235],{"class":958},[185,1952,1035],{"class":962},[185,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984],{"class":187,"line":1955},47,[185,1957,1295],{"class":962},[185,1959,1018],{"class":958},[185,1961,981],{"class":962},[185,1963,1107],{"class":958},[185,1965,1304],{"class":962},[185,1967,1137],{"class":958},[185,1969,1304],{"class":962},[185,1971,1235],{"class":958},[185,1973,1346],{"class":962},[185,1975,1189],{"class":958},[185,1977,1304],{"class":962},[185,1979,1212],{"class":958},[185,1981,1304],{"class":962},[185,1983,1161],{"class":958},[185,1985,1035],{"class":962},[185,1987,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017],{"class":187,"line":1988},48,[185,1990,1295],{"class":962},[185,1992,1397],{"class":958},[185,1994,981],{"class":962},[185,1996,1107],{"class":958},[185,1998,1304],{"class":962},[185,2000,1137],{"class":958},[185,2002,1304],{"class":962},[185,2004,1161],{"class":958},[185,2006,1346],{"class":962},[185,2008,1189],{"class":958},[185,2010,1304],{"class":962},[185,2012,1212],{"class":958},[185,2014,1304],{"class":962},[185,2016,1235],{"class":958},[185,2018,1035],{"class":962},[185,2020,2022,2024],{"class":187,"line":2021},49,[185,2023,1428],{"class":1260},[185,2025,1035],{"class":962},[185,2027,2029,2031,2033,2036,2038],{"class":187,"line":2028},50,[185,2030,1277],{"class":1260},[185,2032,1280],{"class":962},[185,2034,2035],{"class":1283},"XZY",[185,2037,1287],{"class":962},[185,2039,1290],{"class":962},[185,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071],{"class":187,"line":2042},51,[185,2044,1295],{"class":962},[185,2046,990],{"class":958},[185,2048,981],{"class":962},[185,2050,1189],{"class":958},[185,2052,1304],{"class":962},[185,2054,1137],{"class":958},[185,2056,1304],{"class":962},[185,2058,1161],{"class":958},[185,2060,1346],{"class":962},[185,2062,1107],{"class":958},[185,2064,1304],{"class":962},[185,2066,1212],{"class":958},[185,2068,1304],{"class":962},[185,2070,1235],{"class":958},[185,2072,1035],{"class":962},[185,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102,2104],{"class":187,"line":2075},52,[185,2077,1295],{"class":962},[185,2079,1004],{"class":958},[185,2081,981],{"class":962},[185,2083,1107],{"class":958},[185,2085,1304],{"class":962},[185,2087,1212],{"class":958},[185,2089,1304],{"class":962},[185,2091,1161],{"class":958},[185,2093,1346],{"class":962},[185,2095,1189],{"class":958},[185,2097,1304],{"class":962},[185,2099,1137],{"class":958},[185,2101,1304],{"class":962},[185,2103,1235],{"class":958},[185,2105,1035],{"class":962},[185,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137],{"class":187,"line":2108},53,[185,2110,1295],{"class":962},[185,2112,1018],{"class":958},[185,2114,981],{"class":962},[185,2116,1107],{"class":958},[185,2118,1304],{"class":962},[185,2120,1137],{"class":958},[185,2122,1304],{"class":962},[185,2124,1235],{"class":958},[185,2126,1313],{"class":962},[185,2128,1189],{"class":958},[185,2130,1304],{"class":962},[185,2132,1212],{"class":958},[185,2134,1304],{"class":962},[185,2136,1161],{"class":958},[185,2138,1035],{"class":962},[185,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170],{"class":187,"line":2141},54,[185,2143,1295],{"class":962},[185,2145,1397],{"class":958},[185,2147,981],{"class":962},[185,2149,1107],{"class":958},[185,2151,1304],{"class":962},[185,2153,1137],{"class":958},[185,2155,1304],{"class":962},[185,2157,1161],{"class":958},[185,2159,1313],{"class":962},[185,2161,1189],{"class":958},[185,2163,1304],{"class":962},[185,2165,1212],{"class":958},[185,2167,1304],{"class":962},[185,2169,1235],{"class":958},[185,2171,1035],{"class":962},[185,2173,2175,2177],{"class":187,"line":2174},55,[185,2176,1428],{"class":1260},[185,2178,1035],{"class":962},[185,2180,2182,2185],{"class":187,"line":2181},56,[185,2183,2184],{"class":1260},"        default",[185,2186,1290],{"class":962},[185,2188,2190,2193,2195,2198,2200,2202,2205,2207,2209,2211,2213],{"class":187,"line":2189},57,[185,2191,2192],{"class":958},"            console",[185,2194,987],{"class":962},[185,2196,2197],{"class":954},"warn",[185,2199,1115],{"class":1114},[185,2201,1287],{"class":962},[185,2203,2204],{"class":1283},"THREE.Quaternion: .setFromEuler() encountered an unknown order: ",[185,2206,1287],{"class":962},[185,2208,1313],{"class":962},[185,2210,1023],{"class":958},[185,2212,1128],{"class":1114},[185,2214,1035],{"class":962},[185,2216,2218],{"class":187,"line":2217},58,[185,2219,494],{"class":962},[185,2221,2223,2226,2228,2231,2234,2238,2240,2243,2246,2249],{"class":187,"line":2222},59,[185,2224,2225],{"class":1260},"    if",[185,2227,1264],{"class":1114},[185,2229,2230],{"class":958},"update",[185,2232,2233],{"class":962}," !==",[185,2235,2237],{"class":2236},"sfNiH"," false",[185,2239,1270],{"class":1114},[185,2241,2242],{"class":962},"this.",[185,2244,2245],{"class":954},"_onChangeCallback",[185,2247,2248],{"class":1114},"()",[185,2250,1035],{"class":962},[185,2252,2254,2257],{"class":187,"line":2253},60,[185,2255,2256],{"class":1260},"    return",[185,2258,2259],{"class":962}," this;\n",[185,2261,2263],{"class":187,"line":2262},61,[185,2264,257],{"class":962},[150,2266,2268],{"id":2267},"world-to-local","World to Local",[2270,2271,2273],"h3",{"id":2272},"position","Position",[157,2275,2276,3150],{},[160,2277,2278,2279,2307,2308,2310,2613,2615,2616,2732,2733,2735,2736,2828,2829,2831],{},"对于某个父对象下的某个子对象，如果知道了父、子对象的世界坐标、朝向，就可以计算出子对象相对于父对象的局部坐标。通过父对象的变换矩阵",[185,2280,2282,2295],{"className":2281},[517],[185,2283,2285],{"className":2284},[521],[523,2286,2287],{"xmlns":525},[527,2288,2289,2293],{},[530,2290,2291],{},[533,2292,535],{},[593,2294,535],{"encoding":595},[185,2296,2298],{"className":2297,"ariaHidden":544},[600],[185,2299,2301,2304],{"className":2300},[604],[185,2302],{"className":2303,"style":609},[608],[185,2305,535],{"className":2306,"style":615},[613,614],"进行计算：",[259,2309],{},[185,2311,2313,2394],{"className":2312},[517],[185,2314,2316],{"className":2315},[521],[523,2317,2318],{"xmlns":525},[527,2319,2320,2391],{},[530,2321,2322,2343,2345,2373],{},[2323,2324,2325,2328],"msub",{},[533,2326,2327],{},"P",[530,2329,2330,2333,2336,2339,2341],{},[533,2331,2332],{},"l",[533,2334,2335],{},"o",[533,2337,2338],{},"c",[533,2340,263],{},[533,2342,2332],{},[537,2344,539],{},[2346,2347,2348,2350,2368],"msubsup",{},[533,2349,535],{},[530,2351,2352,2355,2357,2360,2363,2366],{},[533,2353,2354],{},"p",[533,2356,263],{},[533,2358,2359],{},"r",[533,2361,2362],{},"e",[533,2364,2365],{},"n",[533,2367,572],{},[537,2369,2372],{"mathvariant":2370,"lspace":2371,"rspace":2371},"normal","0em","′",[2323,2374,2375,2377],{},[533,2376,2327],{},[530,2378,2379,2382,2384,2386,2388],{},[533,2380,2381],{},"w",[533,2383,2335],{},[533,2385,2359],{},[533,2387,2332],{},[533,2389,2390],{},"d",[593,2392,2393],{"encoding":595},"P_{local}=T_{parent}'P_{world}",[185,2395,2397,2475],{"className":2396,"ariaHidden":544},[600],[185,2398,2400,2404,2466,2469,2472],{"className":2399},[604],[185,2401],{"className":2402,"style":2403},[608],"height:0.8333em;vertical-align:-0.15em;",[185,2405,2407,2410],{"className":2406},[613],[185,2408,2327],{"className":2409,"style":615},[613,614],[185,2411,2414],{"className":2412},[2413],"msupsub",[185,2415,2417,2457],{"className":2416},[663,664],[185,2418,2420,2454],{"className":2419},[668],[185,2421,2424],{"className":2422,"style":2423},[672],"height:0.3361em;",[185,2425,2427,2431],{"style":2426},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[185,2428],{"className":2429,"style":2430},[680],"height:2.7em;",[185,2432,2437],{"className":2433},[2434,2435,649,2436],"sizing","reset-size6","mtight",[185,2438,2440,2444,2448,2451],{"className":2439},[613,2436],[185,2441,2332],{"className":2442,"style":2443},[613,614,2436],"margin-right:0.0197em;",[185,2445,2447],{"className":2446},[613,614,2436],"oc",[185,2449,263],{"className":2450},[613,614,2436],[185,2452,2332],{"className":2453,"style":2443},[613,614,2436],[185,2455,705],{"className":2456},[704],[185,2458,2460],{"className":2459},[668],[185,2461,2464],{"className":2462,"style":2463},[672],"height:0.15em;",[185,2465],{},[185,2467],{"className":2468,"style":620},[619],[185,2470,539],{"className":2471},[624],[185,2473],{"className":2474,"style":620},[619],[185,2476,2478,2482,2559],{"className":2477},[604],[185,2479],{"className":2480,"style":2481},[608],"height:1.135em;vertical-align:-0.3831em;",[185,2483,2485,2488],{"className":2484},[613],[185,2486,535],{"className":2487,"style":615},[613,614],[185,2489,2491],{"className":2490},[2413],[185,2492,2494,2550],{"className":2493},[663,664],[185,2495,2497,2547],{"className":2496},[668],[185,2498,2501,2532],{"className":2499,"style":2500},[672],"height:0.7519em;",[185,2502,2504,2507],{"style":2503},"top:-2.453em;margin-left:-0.1389em;margin-right:0.05em;",[185,2505],{"className":2506,"style":2430},[680],[185,2508,2510],{"className":2509},[2434,2435,649,2436],[185,2511,2513,2516,2519,2523,2526,2529],{"className":2512},[613,2436],[185,2514,2354],{"className":2515},[613,614,2436],[185,2517,263],{"className":2518},[613,614,2436],[185,2520,2359],{"className":2521,"style":2522},[613,614,2436],"margin-right:0.0278em;",[185,2524,2362],{"className":2525},[613,614,2436],[185,2527,2365],{"className":2528},[613,614,2436],[185,2530,572],{"className":2531},[613,614,2436],[185,2533,2535,2538],{"style":2534},"top:-3.063em;margin-right:0.05em;",[185,2536],{"className":2537,"style":2430},[680],[185,2539,2541],{"className":2540},[2434,2435,649,2436],[185,2542,2544],{"className":2543},[613,2436],[185,2545,2372],{"className":2546},[613,2436],[185,2548,705],{"className":2549},[704],[185,2551,2553],{"className":2552},[668],[185,2554,2557],{"className":2555,"style":2556},[672],"height:0.3831em;",[185,2558],{},[185,2560,2562,2565],{"className":2561},[613],[185,2563,2327],{"className":2564,"style":615},[613,614],[185,2566,2568],{"className":2567},[2413],[185,2569,2571,2605],{"className":2570},[663,664],[185,2572,2574,2602],{"className":2573},[668],[185,2575,2577],{"className":2576,"style":2423},[672],[185,2578,2579,2582],{"style":2426},[185,2580],{"className":2581,"style":2430},[680],[185,2583,2585],{"className":2584},[2434,2435,649,2436],[185,2586,2588,2592,2596,2599],{"className":2587},[613,2436],[185,2589,2381],{"className":2590,"style":2591},[613,614,2436],"margin-right:0.0269em;",[185,2593,2595],{"className":2594,"style":2522},[613,614,2436],"or",[185,2597,2332],{"className":2598,"style":2443},[613,614,2436],[185,2600,2390],{"className":2601},[613,614,2436],[185,2603,705],{"className":2604},[704],[185,2606,2608],{"className":2607},[668],[185,2609,2611],{"className":2610,"style":2463},[672],[185,2612],{},[259,2614],{},"其中",[185,2617,2619,2651],{"className":2618},[517],[185,2620,2622],{"className":2621},[521],[523,2623,2624],{"xmlns":525},[527,2625,2626,2648],{},[530,2627,2628],{},[2346,2629,2630,2632,2646],{},[533,2631,535],{},[530,2633,2634,2636,2638,2640,2642,2644],{},[533,2635,2354],{},[533,2637,263],{},[533,2639,2359],{},[533,2641,2362],{},[533,2643,2365],{},[533,2645,572],{},[537,2647,2372],{"mathvariant":2370,"lspace":2371,"rspace":2371},[593,2649,2650],{"encoding":595},"T_{parent}'",[185,2652,2654],{"className":2653,"ariaHidden":544},[600],[185,2655,2657,2660],{"className":2656},[604],[185,2658],{"className":2659,"style":2481},[608],[185,2661,2663,2666],{"className":2662},[613],[185,2664,535],{"className":2665,"style":615},[613,614],[185,2667,2669],{"className":2668},[2413],[185,2670,2672,2724],{"className":2671},[663,664],[185,2673,2675,2721],{"className":2674},[668],[185,2676,2678,2707],{"className":2677,"style":2500},[672],[185,2679,2680,2683],{"style":2503},[185,2681],{"className":2682,"style":2430},[680],[185,2684,2686],{"className":2685},[2434,2435,649,2436],[185,2687,2689,2692,2695,2698,2701,2704],{"className":2688},[613,2436],[185,2690,2354],{"className":2691},[613,614,2436],[185,2693,263],{"className":2694},[613,614,2436],[185,2696,2359],{"className":2697,"style":2522},[613,614,2436],[185,2699,2362],{"className":2700},[613,614,2436],[185,2702,2365],{"className":2703},[613,614,2436],[185,2705,572],{"className":2706},[613,614,2436],[185,2708,2709,2712],{"style":2534},[185,2710],{"className":2711,"style":2430},[680],[185,2713,2715],{"className":2714},[2434,2435,649,2436],[185,2716,2718],{"className":2717},[613,2436],[185,2719,2372],{"className":2720},[613,2436],[185,2722,705],{"className":2723},[704],[185,2725,2727],{"className":2726},[668],[185,2728,2730],{"className":2729,"style":2556},[672],[185,2731],{},"为父对象的变换矩阵的逆，",[259,2734],{},"而",[185,2737,2739,2767],{"className":2738},[517],[185,2740,2742],{"className":2741},[521],[523,2743,2744],{"xmlns":525},[527,2745,2746,2764],{},[530,2747,2748],{},[2323,2749,2750,2752],{},[533,2751,2327],{},[530,2753,2754,2756,2758,2760,2762],{},[533,2755,2381],{},[533,2757,2335],{},[533,2759,2359],{},[533,2761,2332],{},[533,2763,2390],{},[593,2765,2766],{"encoding":595},"P_{world}",[185,2768,2770],{"className":2769,"ariaHidden":544},[600],[185,2771,2773,2776],{"className":2772},[604],[185,2774],{"className":2775,"style":2403},[608],[185,2777,2779,2782],{"className":2778},[613],[185,2780,2327],{"className":2781,"style":615},[613,614],[185,2783,2785],{"className":2784},[2413],[185,2786,2788,2820],{"className":2787},[663,664],[185,2789,2791,2817],{"className":2790},[668],[185,2792,2794],{"className":2793,"style":2423},[672],[185,2795,2796,2799],{"style":2426},[185,2797],{"className":2798,"style":2430},[680],[185,2800,2802],{"className":2801},[2434,2435,649,2436],[185,2803,2805,2808,2811,2814],{"className":2804},[613,2436],[185,2806,2381],{"className":2807,"style":2591},[613,614,2436],[185,2809,2595],{"className":2810,"style":2522},[613,614,2436],[185,2812,2332],{"className":2813,"style":2443},[613,614,2436],[185,2815,2390],{"className":2816},[613,614,2436],[185,2818,705],{"className":2819},[704],[185,2821,2823],{"className":2822},[668],[185,2824,2826],{"className":2825,"style":2463},[672],[185,2827],{},"为世界坐标，其形式为：",[259,2830],{},[185,2832,2834,2905],{"className":2833},[517],[185,2835,2837],{"className":2836},[521],[523,2838,2839],{"xmlns":525},[527,2840,2841,2902],{},[530,2842,2843,2859,2861],{},[2323,2844,2845,2847],{},[533,2846,2327],{},[530,2848,2849,2851,2853,2855,2857],{},[533,2850,2381],{},[533,2852,2335],{},[533,2854,2359],{},[533,2856,2332],{},[533,2858,2390],{},[537,2860,539],{},[530,2862,2863,2865,2900],{},[537,2864,545],{"fence":544},[547,2866,2868,2876,2884,2892],{"rowspacing":549,"columnalign":2867,"columnspacing":551},"center",[553,2869,2870],{},[556,2871,2872],{},[559,2873,2874],{"scriptlevel":561,"displaystyle":562},[533,2875,1118],{},[553,2877,2878],{},[556,2879,2880],{},[559,2881,2882],{"scriptlevel":561,"displaystyle":562},[533,2883,1146],{},[553,2885,2886],{},[556,2887,2888],{},[559,2889,2890],{"scriptlevel":561,"displaystyle":562},[533,2891,1170],{},[553,2893,2894],{},[556,2895,2896],{},[559,2897,2898],{"scriptlevel":561,"displaystyle":562},[580,2899,588],{},[537,2901,591],{"fence":544},[593,2903,2904],{"encoding":595},"P_{world}=\\begin{bmatrix} x \\\\ y \\\\ z \\\\ 1 \\end{bmatrix}",[185,2906,2908,2975],{"className":2907,"ariaHidden":544},[600],[185,2909,2911,2914,2966,2969,2972],{"className":2910},[604],[185,2912],{"className":2913,"style":2403},[608],[185,2915,2917,2920],{"className":2916},[613],[185,2918,2327],{"className":2919,"style":615},[613,614],[185,2921,2923],{"className":2922},[2413],[185,2924,2926,2958],{"className":2925},[663,664],[185,2927,2929,2955],{"className":2928},[668],[185,2930,2932],{"className":2931,"style":2423},[672],[185,2933,2934,2937],{"style":2426},[185,2935],{"className":2936,"style":2430},[680],[185,2938,2940],{"className":2939},[2434,2435,649,2436],[185,2941,2943,2946,2949,2952],{"className":2942},[613,2436],[185,2944,2381],{"className":2945,"style":2591},[613,614,2436],[185,2947,2595],{"className":2948,"style":2522},[613,614,2436],[185,2950,2332],{"className":2951,"style":2443},[613,614,2436],[185,2953,2390],{"className":2954},[613,614,2436],[185,2956,705],{"className":2957},[704],[185,2959,2961],{"className":2960},[668],[185,2962,2964],{"className":2963,"style":2463},[672],[185,2965],{},[185,2967],{"className":2968,"style":620},[619],[185,2970,539],{"className":2971},[624],[185,2973],{"className":2974,"style":620},[619],[185,2976,2978,2982],{"className":2977},[604],[185,2979],{"className":2980,"style":2981},[608],"height:4.8em;vertical-align:-2.15em;",[185,2983,2985,3035,3112],{"className":2984},[638],[185,2986,2988],{"className":2987},[642],[185,2989,2992],{"className":2990},[648,2991],"mult",[185,2993,2995,3026],{"className":2994},[663,664],[185,2996,2998,3023],{"className":2997},[668],[185,2999,3002],{"className":3000,"style":3001},[672],"height:2.65em;",[185,3003,3005,3009],{"style":3004},"top:-4.65em;",[185,3006],{"className":3007,"style":3008},[680],"height:6.8em;",[185,3010,3012],{"style":3011},"width:0.667em;height:4.8em;",[3013,3014,3019],"svg",{"xmlns":3015,"width":3016,"height":3017,"viewBox":3018},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","0.667em","4.8em","0 0 667 4800",[3020,3021],"path",{"d":3022},"M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v1200 v1759 h84z",[185,3024,705],{"className":3025},[704],[185,3027,3029],{"className":3028},[668],[185,3030,3033],{"className":3031,"style":3032},[672],"height:2.15em;",[185,3034],{},[185,3036,3038],{"className":3037},[613],[185,3039,3041],{"className":3040},[547],[185,3042,3044],{"className":3043},[659],[185,3045,3047,3104],{"className":3046},[663,664],[185,3048,3050,3101],{"className":3049},[668],[185,3051,3053,3065,3077,3089],{"className":3052,"style":3001},[672],[185,3054,3056,3059],{"style":3055},"top:-4.81em;",[185,3057],{"className":3058,"style":681},[680],[185,3060,3062],{"className":3061},[613],[185,3063,1118],{"className":3064},[613,614],[185,3066,3067,3070],{"style":676},[185,3068],{"className":3069,"style":681},[680],[185,3071,3073],{"className":3072},[613],[185,3074,1146],{"className":3075,"style":3076},[613,614],"margin-right:0.0359em;",[185,3078,3079,3082],{"style":691},[185,3080],{"className":3081,"style":681},[680],[185,3083,3085],{"className":3084},[613],[185,3086,1170],{"className":3087,"style":3088},[613,614],"margin-right:0.044em;",[185,3090,3092,3095],{"style":3091},"top:-1.21em;",[185,3093],{"className":3094,"style":681},[680],[185,3096,3098],{"className":3097},[613],[185,3099,588],{"className":3100},[613],[185,3102,705],{"className":3103},[704],[185,3105,3107],{"className":3106},[668],[185,3108,3110],{"className":3109,"style":3032},[672],[185,3111],{},[185,3113,3115],{"className":3114},[771],[185,3116,3118],{"className":3117},[648,2991],[185,3119,3121,3142],{"className":3120},[663,664],[185,3122,3124,3139],{"className":3123},[668],[185,3125,3127],{"className":3126,"style":3001},[672],[185,3128,3129,3132],{"style":3004},[185,3130],{"className":3131,"style":3008},[680],[185,3133,3134],{"style":3011},[3013,3135,3136],{"xmlns":3015,"width":3016,"height":3017,"viewBox":3018},[3020,3137],{"d":3138},"M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v1200 v1759 h84z",[185,3140,705],{"className":3141},[704],[185,3143,3145],{"className":3144},[668],[185,3146,3148],{"className":3147,"style":3032},[672],[185,3149],{},[160,3151,3152,3153],{},"代码",[175,3154,3156],{"className":177,"code":3155,"language":179,"meta":180,"style":180},"func WorldToLocal(x, y, z float64) {\n    pWorld := mat.NewDense(4, 1, []float64{x, y, z, 1})\n    T := mat.NewDense(4, 4, []float64{\n        \u002F\u002F ... 旋转矩阵+位置的组合 4X4矩阵\n    })\n    T.Inverse(T)\n    pLocal := mat.NewDense(4, 1, nil)\n    pLocal.Mul(T, pWorld)\n}\n",[182,3157,3158,3163,3168,3173,3178,3182,3187,3192,3197],{"__ignoreMap":180},[185,3159,3160],{"class":187,"line":188},[185,3161,3162],{},"func WorldToLocal(x, y, z float64) {\n",[185,3164,3165],{"class":187,"line":194},[185,3166,3167],{},"    pWorld := mat.NewDense(4, 1, []float64{x, y, z, 1})\n",[185,3169,3170],{"class":187,"line":200},[185,3171,3172],{},"    T := mat.NewDense(4, 4, []float64{\n",[185,3174,3175],{"class":187,"line":206},[185,3176,3177],{},"        \u002F\u002F ... 旋转矩阵+位置的组合 4X4矩阵\n",[185,3179,3180],{"class":187,"line":212},[185,3181,251],{},[185,3183,3184],{"class":187,"line":218},[185,3185,3186],{},"    T.Inverse(T)\n",[185,3188,3189],{"class":187,"line":224},[185,3190,3191],{},"    pLocal := mat.NewDense(4, 1, nil)\n",[185,3193,3194],{"class":187,"line":230},[185,3195,3196],{},"    pLocal.Mul(T, pWorld)\n",[185,3198,3199],{"class":187,"line":236},[185,3200,257],{},[2270,3202,3204],{"id":3203},"rotation","Rotation",[157,3206,3207,3218,3881],{},[160,3208,3209,3210,3213,3214,3217],{},"目前这里记录的是四元数的转换，并且由于网上找不到啥资料，两个转换是",[182,3211,3212],{},"unity","以及",[182,3215,3216],{},"chat gpt","提供的",[160,3219,3220,3221,3226,3228,3487,3489,3490,3492,3762,2615,3764,3880],{},"unity，参考",[263,3222,3225],{"href":3223,"rel":3224},"https:\u002F\u002Fforum.unity.com\u002Fthreads\u002Fconvert-world-space-rotation-to-local-space-rotation.332025\u002F",[267],"这里",[259,3227],{},[185,3229,3231,3296],{"className":3230},[517],[185,3232,3234],{"className":3233},[521],[523,3235,3236],{"xmlns":525},[527,3237,3238,3293],{},[530,3239,3240,3257,3259,3277],{},[2323,3241,3242,3245],{},[533,3243,3244],{},"Q",[530,3246,3247,3249,3251,3253,3255],{},[533,3248,2381],{},[533,3250,2335],{},[533,3252,2359],{},[533,3254,2332],{},[533,3256,2390],{},[537,3258,539],{},[2323,3260,3261,3263],{},[533,3262,3244],{},[530,3264,3265,3267,3269,3271,3273,3275],{},[533,3266,2354],{},[533,3268,263],{},[533,3270,2359],{},[533,3272,2362],{},[533,3274,2365],{},[533,3276,572],{},[2323,3278,3279,3281],{},[533,3280,3244],{},[530,3282,3283,3285,3287,3289,3291],{},[533,3284,2332],{},[533,3286,2335],{},[533,3288,2338],{},[533,3290,263],{},[533,3292,2332],{},[593,3294,3295],{"encoding":595},"Q_{world}=Q_{parent}Q_{local}",[185,3297,3299,3368],{"className":3298,"ariaHidden":544},[600],[185,3300,3302,3306,3359,3362,3365],{"className":3301},[604],[185,3303],{"className":3304,"style":3305},[608],"height:0.8778em;vertical-align:-0.1944em;",[185,3307,3309,3312],{"className":3308},[613],[185,3310,3244],{"className":3311},[613,614],[185,3313,3315],{"className":3314},[2413],[185,3316,3318,3351],{"className":3317},[663,664],[185,3319,3321,3348],{"className":3320},[668],[185,3322,3324],{"className":3323,"style":2423},[672],[185,3325,3327,3330],{"style":3326},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[185,3328],{"className":3329,"style":2430},[680],[185,3331,3333],{"className":3332},[2434,2435,649,2436],[185,3334,3336,3339,3342,3345],{"className":3335},[613,2436],[185,3337,2381],{"className":3338,"style":2591},[613,614,2436],[185,3340,2595],{"className":3341,"style":2522},[613,614,2436],[185,3343,2332],{"className":3344,"style":2443},[613,614,2436],[185,3346,2390],{"className":3347},[613,614,2436],[185,3349,705],{"className":3350},[704],[185,3352,3354],{"className":3353},[668],[185,3355,3357],{"className":3356,"style":2463},[672],[185,3358],{},[185,3360],{"className":3361,"style":620},[619],[185,3363,539],{"className":3364},[624],[185,3366],{"className":3367,"style":620},[619],[185,3369,3371,3375,3435],{"className":3370},[604],[185,3372],{"className":3373,"style":3374},[608],"height:0.9694em;vertical-align:-0.2861em;",[185,3376,3378,3381],{"className":3377},[613],[185,3379,3244],{"className":3380},[613,614],[185,3382,3384],{"className":3383},[2413],[185,3385,3387,3426],{"className":3386},[663,664],[185,3388,3390,3423],{"className":3389},[668],[185,3391,3394],{"className":3392,"style":3393},[672],"height:0.2806em;",[185,3395,3396,3399],{"style":3326},[185,3397],{"className":3398,"style":2430},[680],[185,3400,3402],{"className":3401},[2434,2435,649,2436],[185,3403,3405,3408,3411,3414,3417,3420],{"className":3404},[613,2436],[185,3406,2354],{"className":3407},[613,614,2436],[185,3409,263],{"className":3410},[613,614,2436],[185,3412,2359],{"className":3413,"style":2522},[613,614,2436],[185,3415,2362],{"className":3416},[613,614,2436],[185,3418,2365],{"className":3419},[613,614,2436],[185,3421,572],{"className":3422},[613,614,2436],[185,3424,705],{"className":3425},[704],[185,3427,3429],{"className":3428},[668],[185,3430,3433],{"className":3431,"style":3432},[672],"height:0.2861em;",[185,3434],{},[185,3436,3438,3441],{"className":3437},[613],[185,3439,3244],{"className":3440},[613,614],[185,3442,3444],{"className":3443},[2413],[185,3445,3447,3479],{"className":3446},[663,664],[185,3448,3450,3476],{"className":3449},[668],[185,3451,3453],{"className":3452,"style":2423},[672],[185,3454,3455,3458],{"style":3326},[185,3456],{"className":3457,"style":2430},[680],[185,3459,3461],{"className":3460},[2434,2435,649,2436],[185,3462,3464,3467,3470,3473],{"className":3463},[613,2436],[185,3465,2332],{"className":3466,"style":2443},[613,614,2436],[185,3468,2447],{"className":3469},[613,614,2436],[185,3471,263],{"className":3472},[613,614,2436],[185,3474,2332],{"className":3475,"style":2443},[613,614,2436],[185,3477,705],{"className":3478},[704],[185,3480,3482],{"className":3481},[668],[185,3483,3485],{"className":3484,"style":2463},[672],[185,3486],{},[259,3488],{},"那么：",[259,3491],{},[185,3493,3495,3561],{"className":3494},[517],[185,3496,3498],{"className":3497},[521],[523,3499,3500],{"xmlns":525},[527,3501,3502,3558],{},[530,3503,3504,3524,3540,3542],{},[2346,3505,3506,3508,3522],{},[533,3507,3244],{},[530,3509,3510,3512,3514,3516,3518,3520],{},[533,3511,2354],{},[533,3513,263],{},[533,3515,2359],{},[533,3517,2362],{},[533,3519,2365],{},[533,3521,572],{},[537,3523,2372],{"mathvariant":2370,"lspace":2371,"rspace":2371},[2323,3525,3526,3528],{},[533,3527,3244],{},[530,3529,3530,3532,3534,3536,3538],{},[533,3531,2381],{},[533,3533,2335],{},[533,3535,2359],{},[533,3537,2332],{},[533,3539,2390],{},[537,3541,539],{},[2323,3543,3544,3546],{},[533,3545,3244],{},[530,3547,3548,3550,3552,3554,3556],{},[533,3549,2332],{},[533,3551,2335],{},[533,3553,2338],{},[533,3555,263],{},[533,3557,2332],{},[593,3559,3560],{"encoding":595},"Q_{parent}'Q_{world}=Q_{local}",[185,3562,3564,3704],{"className":3563,"ariaHidden":544},[600],[185,3565,3567,3570,3643,3695,3698,3701],{"className":3566},[604],[185,3568],{"className":3569,"style":2481},[608],[185,3571,3573,3576],{"className":3572},[613],[185,3574,3244],{"className":3575},[613,614],[185,3577,3579],{"className":3578},[2413],[185,3580,3582,3635],{"className":3581},[663,664],[185,3583,3585,3632],{"className":3584},[668],[185,3586,3588,3618],{"className":3587,"style":2500},[672],[185,3589,3591,3594],{"style":3590},"top:-2.453em;margin-left:0em;margin-right:0.05em;",[185,3592],{"className":3593,"style":2430},[680],[185,3595,3597],{"className":3596},[2434,2435,649,2436],[185,3598,3600,3603,3606,3609,3612,3615],{"className":3599},[613,2436],[185,3601,2354],{"className":3602},[613,614,2436],[185,3604,263],{"className":3605},[613,614,2436],[185,3607,2359],{"className":3608,"style":2522},[613,614,2436],[185,3610,2362],{"className":3611},[613,614,2436],[185,3613,2365],{"className":3614},[613,614,2436],[185,3616,572],{"className":3617},[613,614,2436],[185,3619,3620,3623],{"style":2534},[185,3621],{"className":3622,"style":2430},[680],[185,3624,3626],{"className":3625},[2434,2435,649,2436],[185,3627,3629],{"className":3628},[613,2436],[185,3630,2372],{"className":3631},[613,2436],[185,3633,705],{"className":3634},[704],[185,3636,3638],{"className":3637},[668],[185,3639,3641],{"className":3640,"style":2556},[672],[185,3642],{},[185,3644,3646,3649],{"className":3645},[613],[185,3647,3244],{"className":3648},[613,614],[185,3650,3652],{"className":3651},[2413],[185,3653,3655,3687],{"className":3654},[663,664],[185,3656,3658,3684],{"className":3657},[668],[185,3659,3661],{"className":3660,"style":2423},[672],[185,3662,3663,3666],{"style":3326},[185,3664],{"className":3665,"style":2430},[680],[185,3667,3669],{"className":3668},[2434,2435,649,2436],[185,3670,3672,3675,3678,3681],{"className":3671},[613,2436],[185,3673,2381],{"className":3674,"style":2591},[613,614,2436],[185,3676,2595],{"className":3677,"style":2522},[613,614,2436],[185,3679,2332],{"className":3680,"style":2443},[613,614,2436],[185,3682,2390],{"className":3683},[613,614,2436],[185,3685,705],{"className":3686},[704],[185,3688,3690],{"className":3689},[668],[185,3691,3693],{"className":3692,"style":2463},[672],[185,3694],{},[185,3696],{"className":3697,"style":620},[619],[185,3699,539],{"className":3700},[624],[185,3702],{"className":3703,"style":620},[619],[185,3705,3707,3710],{"className":3706},[604],[185,3708],{"className":3709,"style":3305},[608],[185,3711,3713,3716],{"className":3712},[613],[185,3714,3244],{"className":3715},[613,614],[185,3717,3719],{"className":3718},[2413],[185,3720,3722,3754],{"className":3721},[663,664],[185,3723,3725,3751],{"className":3724},[668],[185,3726,3728],{"className":3727,"style":2423},[672],[185,3729,3730,3733],{"style":3326},[185,3731],{"className":3732,"style":2430},[680],[185,3734,3736],{"className":3735},[2434,2435,649,2436],[185,3737,3739,3742,3745,3748],{"className":3738},[613,2436],[185,3740,2332],{"className":3741,"style":2443},[613,614,2436],[185,3743,2447],{"className":3744},[613,614,2436],[185,3746,263],{"className":3747},[613,614,2436],[185,3749,2332],{"className":3750,"style":2443},[613,614,2436],[185,3752,705],{"className":3753},[704],[185,3755,3757],{"className":3756},[668],[185,3758,3760],{"className":3759,"style":2463},[672],[185,3761],{},[259,3763],{},[185,3765,3767,3799],{"className":3766},[517],[185,3768,3770],{"className":3769},[521],[523,3771,3772],{"xmlns":525},[527,3773,3774,3796],{},[530,3775,3776],{},[2346,3777,3778,3780,3794],{},[533,3779,3244],{},[530,3781,3782,3784,3786,3788,3790,3792],{},[533,3783,2354],{},[533,3785,263],{},[533,3787,2359],{},[533,3789,2362],{},[533,3791,2365],{},[533,3793,572],{},[537,3795,2372],{"mathvariant":2370,"lspace":2371,"rspace":2371},[593,3797,3798],{"encoding":595},"Q_{parent}'",[185,3800,3802],{"className":3801,"ariaHidden":544},[600],[185,3803,3805,3808],{"className":3804},[604],[185,3806],{"className":3807,"style":2481},[608],[185,3809,3811,3814],{"className":3810},[613],[185,3812,3244],{"className":3813},[613,614],[185,3815,3817],{"className":3816},[2413],[185,3818,3820,3872],{"className":3819},[663,664],[185,3821,3823,3869],{"className":3822},[668],[185,3824,3826,3855],{"className":3825,"style":2500},[672],[185,3827,3828,3831],{"style":3590},[185,3829],{"className":3830,"style":2430},[680],[185,3832,3834],{"className":3833},[2434,2435,649,2436],[185,3835,3837,3840,3843,3846,3849,3852],{"className":3836},[613,2436],[185,3838,2354],{"className":3839},[613,614,2436],[185,3841,263],{"className":3842},[613,614,2436],[185,3844,2359],{"className":3845,"style":2522},[613,614,2436],[185,3847,2362],{"className":3848},[613,614,2436],[185,3850,2365],{"className":3851},[613,614,2436],[185,3853,572],{"className":3854},[613,614,2436],[185,3856,3857,3860],{"style":2534},[185,3858],{"className":3859,"style":2430},[680],[185,3861,3863],{"className":3862},[2434,2435,649,2436],[185,3864,3866],{"className":3865},[613,2436],[185,3867,2372],{"className":3868},[613,2436],[185,3870,705],{"className":3871},[704],[185,3873,3875],{"className":3874},[668],[185,3876,3878],{"className":3877,"style":2556},[672],[185,3879],{},"为父对象的rotation的逆",[160,3882,3883,3884,3923,4078,4080],{},"chat gpt4提供的方式是：",[154,3885,3886,3889],{},[2354,3887,3888],{},"Prompt：\nhow to convert quaternion from world to space\nGPT：\nConverting a quaternion from world space to local space (also referred to as \"object space\" or \"model space\") typically involves using the inverse of the transformation quaternion that represents the orientation of the object in world space. This process is used in 3D graphics and physics simulations to understand the orientation of an object relative to its own coordinate system rather than the global coordinate system.\nHere's a general step-by-step guide:",[3890,3891,3892,3899,3905,3911,3917],"ol",{},[160,3893,3894,3898],{},[3895,3896,3897],"strong",{},"Understand Quaternion Representation",": Quaternions are a way to represent rotations. They have four components: ( x, y, z ) (the imaginary components) and ( w ) (the real component).",[160,3900,3901,3904],{},[3895,3902,3903],{},"Determine the World Space Quaternion",": This is the quaternion that represents the rotation of your object in world space.",[160,3906,3907,3910],{},[3895,3908,3909],{},"Compute the Inverse of the World Space Quaternion",": To convert a quaternion from world space to local space, you need the inverse of the world space quaternion. The inverse of a quaternion ( q = (x, y, z, w) ) is given by ( q^{-1} = (-x, -y, -z, w) ), assuming the quaternion is normalized (i.e., its length is 1).",[160,3912,3913,3916],{},[3895,3914,3915],{},"Apply the Inverse Quaternion to the Point or Quaternion of Interest",": If you have a point or another quaternion that you want to convert from world space to local space, you multiply it by the inverse quaternion you computed in step 3. This operation is typically a quaternion multiplication.",[160,3918,3919,3922],{},[3895,3920,3921],{},"Normalize the Result (if needed)",": After the multiplication, it might be necessary to normalize the resulting quaternion to ensure that its length is 1.",[175,3924,3928],{"className":3925,"code":3926,"language":3927,"meta":180,"style":180},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Here is an example in Python pseudocode:\n# Assuming you have a quaternion class with necessary operations\nclass Quaternion:\n    def __init__(self, x, y, z, w):\n        self.x = x\n        self.y = y\n        self.z = z\n        self.w = w\n\n    def normalize(self):\n        # Normalize the quaternion\n        pass\n\n    def inverse(self):\n        # Compute and return the inverse of the quaternion\n        return Quaternion(-self.x, -self.y, -self.z, self.w)\n\n    def __mul__(self, other):\n        # Define quaternion multiplication\n        pass\n\n# Your world space quaternion\nworld_space_quaternion = Quaternion(x, y, z, w)\nworld_space_quaternion.normalize()\n\n# Compute the inverse\ninverse_quaternion = world_space_quaternion.inverse()\n\n# Multiply with the point\u002Fquaternion you want to convert\n# For example, converting another quaternion from world to local space\nlocal_space_quaternion = inverse_quaternion * other_quaternion\n","python",[182,3929,3930,3935,3940,3945,3950,3955,3960,3965,3970,3974,3979,3984,3989,3993,3998,4003,4008,4012,4017,4022,4026,4030,4035,4040,4045,4049,4054,4059,4063,4068,4073],{"__ignoreMap":180},[185,3931,3932],{"class":187,"line":188},[185,3933,3934],{},"# Here is an example in Python pseudocode:\n",[185,3936,3937],{"class":187,"line":194},[185,3938,3939],{},"# Assuming you have a quaternion class with necessary operations\n",[185,3941,3942],{"class":187,"line":200},[185,3943,3944],{},"class Quaternion:\n",[185,3946,3947],{"class":187,"line":206},[185,3948,3949],{},"    def __init__(self, x, y, z, w):\n",[185,3951,3952],{"class":187,"line":212},[185,3953,3954],{},"        self.x = x\n",[185,3956,3957],{"class":187,"line":218},[185,3958,3959],{},"        self.y = y\n",[185,3961,3962],{"class":187,"line":224},[185,3963,3964],{},"        self.z = z\n",[185,3966,3967],{"class":187,"line":230},[185,3968,3969],{},"        self.w = w\n",[185,3971,3972],{"class":187,"line":236},[185,3973,328],{"emptyLinePlaceholder":327},[185,3975,3976],{"class":187,"line":242},[185,3977,3978],{},"    def normalize(self):\n",[185,3980,3981],{"class":187,"line":248},[185,3982,3983],{},"        # Normalize the quaternion\n",[185,3985,3986],{"class":187,"line":254},[185,3987,3988],{},"        pass\n",[185,3990,3991],{"class":187,"line":336},[185,3992,328],{"emptyLinePlaceholder":327},[185,3994,3995],{"class":187,"line":341},[185,3996,3997],{},"    def inverse(self):\n",[185,3999,4000],{"class":187,"line":347},[185,4001,4002],{},"        # Compute and return the inverse of the quaternion\n",[185,4004,4005],{"class":187,"line":353},[185,4006,4007],{},"        return Quaternion(-self.x, -self.y, -self.z, self.w)\n",[185,4009,4010],{"class":187,"line":359},[185,4011,328],{"emptyLinePlaceholder":327},[185,4013,4014],{"class":187,"line":365},[185,4015,4016],{},"    def __mul__(self, other):\n",[185,4018,4019],{"class":187,"line":371},[185,4020,4021],{},"        # Define quaternion multiplication\n",[185,4023,4024],{"class":187,"line":377},[185,4025,3988],{},[185,4027,4028],{"class":187,"line":383},[185,4029,328],{"emptyLinePlaceholder":327},[185,4031,4032],{"class":187,"line":389},[185,4033,4034],{},"# Your world space quaternion\n",[185,4036,4037],{"class":187,"line":395},[185,4038,4039],{},"world_space_quaternion = Quaternion(x, y, z, w)\n",[185,4041,4042],{"class":187,"line":401},[185,4043,4044],{},"world_space_quaternion.normalize()\n",[185,4046,4047],{"class":187,"line":407},[185,4048,328],{"emptyLinePlaceholder":327},[185,4050,4051],{"class":187,"line":413},[185,4052,4053],{},"# Compute the inverse\n",[185,4055,4056],{"class":187,"line":419},[185,4057,4058],{},"inverse_quaternion = world_space_quaternion.inverse()\n",[185,4060,4061],{"class":187,"line":425},[185,4062,328],{"emptyLinePlaceholder":327},[185,4064,4065],{"class":187,"line":431},[185,4066,4067],{},"# Multiply with the point\u002Fquaternion you want to convert\n",[185,4069,4070],{"class":187,"line":437},[185,4071,4072],{},"# For example, converting another quaternion from world to local space\n",[185,4074,4075],{"class":187,"line":443},[185,4076,4077],{},"local_space_quaternion = inverse_quaternion * other_quaternion\n",[259,4079],{},"和unity基本一致（但是我问3.5又是另一种结果）",[150,4082,4084],{"id":4083},"local-to-world","Local to World",[2270,4086,2273],{"id":4087},"position-1",[157,4089,4090],{},[160,4091,4092,4093,4095,4348,4350],{},"基本上反着来就行：",[259,4094],{},[185,4096,4098,4162],{"className":4097},[517],[185,4099,4101],{"className":4100},[521],[523,4102,4103],{"xmlns":525},[527,4104,4105,4159],{},[530,4106,4107,4123,4125,4143],{},[2323,4108,4109,4111],{},[533,4110,2327],{},[530,4112,4113,4115,4117,4119,4121],{},[533,4114,2381],{},[533,4116,2335],{},[533,4118,2359],{},[533,4120,2332],{},[533,4122,2390],{},[537,4124,539],{},[2323,4126,4127,4129],{},[533,4128,535],{},[530,4130,4131,4133,4135,4137,4139,4141],{},[533,4132,2354],{},[533,4134,263],{},[533,4136,2359],{},[533,4138,2362],{},[533,4140,2365],{},[533,4142,572],{},[2323,4144,4145,4147],{},[533,4146,2327],{},[530,4148,4149,4151,4153,4155,4157],{},[533,4150,2332],{},[533,4152,2335],{},[533,4154,2338],{},[533,4156,263],{},[533,4158,2332],{},[593,4160,4161],{"encoding":595},"P_{world}=T_{parent}P_{local}",[185,4163,4165,4232],{"className":4164,"ariaHidden":544},[600],[185,4166,4168,4171,4223,4226,4229],{"className":4167},[604],[185,4169],{"className":4170,"style":2403},[608],[185,4172,4174,4177],{"className":4173},[613],[185,4175,2327],{"className":4176,"style":615},[613,614],[185,4178,4180],{"className":4179},[2413],[185,4181,4183,4215],{"className":4182},[663,664],[185,4184,4186,4212],{"className":4185},[668],[185,4187,4189],{"className":4188,"style":2423},[672],[185,4190,4191,4194],{"style":2426},[185,4192],{"className":4193,"style":2430},[680],[185,4195,4197],{"className":4196},[2434,2435,649,2436],[185,4198,4200,4203,4206,4209],{"className":4199},[613,2436],[185,4201,2381],{"className":4202,"style":2591},[613,614,2436],[185,4204,2595],{"className":4205,"style":2522},[613,614,2436],[185,4207,2332],{"className":4208,"style":2443},[613,614,2436],[185,4210,2390],{"className":4211},[613,614,2436],[185,4213,705],{"className":4214},[704],[185,4216,4218],{"className":4217},[668],[185,4219,4221],{"className":4220,"style":2463},[672],[185,4222],{},[185,4224],{"className":4225,"style":620},[619],[185,4227,539],{"className":4228},[624],[185,4230],{"className":4231,"style":620},[619],[185,4233,4235,4238,4296],{"className":4234},[604],[185,4236],{"className":4237,"style":3374},[608],[185,4239,4241,4244],{"className":4240},[613],[185,4242,535],{"className":4243,"style":615},[613,614],[185,4245,4247],{"className":4246},[2413],[185,4248,4250,4288],{"className":4249},[663,664],[185,4251,4253,4285],{"className":4252},[668],[185,4254,4256],{"className":4255,"style":3393},[672],[185,4257,4258,4261],{"style":2426},[185,4259],{"className":4260,"style":2430},[680],[185,4262,4264],{"className":4263},[2434,2435,649,2436],[185,4265,4267,4270,4273,4276,4279,4282],{"className":4266},[613,2436],[185,4268,2354],{"className":4269},[613,614,2436],[185,4271,263],{"className":4272},[613,614,2436],[185,4274,2359],{"className":4275,"style":2522},[613,614,2436],[185,4277,2362],{"className":4278},[613,614,2436],[185,4280,2365],{"className":4281},[613,614,2436],[185,4283,572],{"className":4284},[613,614,2436],[185,4286,705],{"className":4287},[704],[185,4289,4291],{"className":4290},[668],[185,4292,4294],{"className":4293,"style":3432},[672],[185,4295],{},[185,4297,4299,4302],{"className":4298},[613],[185,4300,2327],{"className":4301,"style":615},[613,614],[185,4303,4305],{"className":4304},[2413],[185,4306,4308,4340],{"className":4307},[663,664],[185,4309,4311,4337],{"className":4310},[668],[185,4312,4314],{"className":4313,"style":2423},[672],[185,4315,4316,4319],{"style":2426},[185,4317],{"className":4318,"style":2430},[680],[185,4320,4322],{"className":4321},[2434,2435,649,2436],[185,4323,4325,4328,4331,4334],{"className":4324},[613,2436],[185,4326,2332],{"className":4327,"style":2443},[613,614,2436],[185,4329,2447],{"className":4330},[613,614,2436],[185,4332,263],{"className":4333},[613,614,2436],[185,4335,2332],{"className":4336,"style":2443},[613,614,2436],[185,4338,705],{"className":4339},[704],[185,4341,4343],{"className":4342},[668],[185,4344,4346],{"className":4345,"style":2463},[672],[185,4347],{},[259,4349],{},"代码就不贴了，基本一致",[2270,4352,3204],{"id":4353},"rotation-1",[157,4355,4356,4359,4615],{},[160,4357,4358],{},"基本上反着来就行",[160,4360,3212,4361,4363],{},[259,4362],{},[185,4364,4366,4429],{"className":4365},[517],[185,4367,4369],{"className":4368},[521],[523,4370,4371],{"xmlns":525},[527,4372,4373,4427],{},[530,4374,4375,4391,4393,4411],{},[2323,4376,4377,4379],{},[533,4378,3244],{},[530,4380,4381,4383,4385,4387,4389],{},[533,4382,2381],{},[533,4384,2335],{},[533,4386,2359],{},[533,4388,2332],{},[533,4390,2390],{},[537,4392,539],{},[2323,4394,4395,4397],{},[533,4396,3244],{},[530,4398,4399,4401,4403,4405,4407,4409],{},[533,4400,2354],{},[533,4402,263],{},[533,4404,2359],{},[533,4406,2362],{},[533,4408,2365],{},[533,4410,572],{},[2323,4412,4413,4415],{},[533,4414,3244],{},[530,4416,4417,4419,4421,4423,4425],{},[533,4418,2332],{},[533,4420,2335],{},[533,4422,2338],{},[533,4424,263],{},[533,4426,2332],{},[593,4428,3295],{"encoding":595},[185,4430,4432,4499],{"className":4431,"ariaHidden":544},[600],[185,4433,4435,4438,4490,4493,4496],{"className":4434},[604],[185,4436],{"className":4437,"style":3305},[608],[185,4439,4441,4444],{"className":4440},[613],[185,4442,3244],{"className":4443},[613,614],[185,4445,4447],{"className":4446},[2413],[185,4448,4450,4482],{"className":4449},[663,664],[185,4451,4453,4479],{"className":4452},[668],[185,4454,4456],{"className":4455,"style":2423},[672],[185,4457,4458,4461],{"style":3326},[185,4459],{"className":4460,"style":2430},[680],[185,4462,4464],{"className":4463},[2434,2435,649,2436],[185,4465,4467,4470,4473,4476],{"className":4466},[613,2436],[185,4468,2381],{"className":4469,"style":2591},[613,614,2436],[185,4471,2595],{"className":4472,"style":2522},[613,614,2436],[185,4474,2332],{"className":4475,"style":2443},[613,614,2436],[185,4477,2390],{"className":4478},[613,614,2436],[185,4480,705],{"className":4481},[704],[185,4483,4485],{"className":4484},[668],[185,4486,4488],{"className":4487,"style":2463},[672],[185,4489],{},[185,4491],{"className":4492,"style":620},[619],[185,4494,539],{"className":4495},[624],[185,4497],{"className":4498,"style":620},[619],[185,4500,4502,4505,4563],{"className":4501},[604],[185,4503],{"className":4504,"style":3374},[608],[185,4506,4508,4511],{"className":4507},[613],[185,4509,3244],{"className":4510},[613,614],[185,4512,4514],{"className":4513},[2413],[185,4515,4517,4555],{"className":4516},[663,664],[185,4518,4520,4552],{"className":4519},[668],[185,4521,4523],{"className":4522,"style":3393},[672],[185,4524,4525,4528],{"style":3326},[185,4526],{"className":4527,"style":2430},[680],[185,4529,4531],{"className":4530},[2434,2435,649,2436],[185,4532,4534,4537,4540,4543,4546,4549],{"className":4533},[613,2436],[185,4535,2354],{"className":4536},[613,614,2436],[185,4538,263],{"className":4539},[613,614,2436],[185,4541,2359],{"className":4542,"style":2522},[613,614,2436],[185,4544,2362],{"className":4545},[613,614,2436],[185,4547,2365],{"className":4548},[613,614,2436],[185,4550,572],{"className":4551},[613,614,2436],[185,4553,705],{"className":4554},[704],[185,4556,4558],{"className":4557},[668],[185,4559,4561],{"className":4560,"style":3432},[672],[185,4562],{},[185,4564,4566,4569],{"className":4565},[613],[185,4567,3244],{"className":4568},[613,614],[185,4570,4572],{"className":4571},[2413],[185,4573,4575,4607],{"className":4574},[663,664],[185,4576,4578,4604],{"className":4577},[668],[185,4579,4581],{"className":4580,"style":2423},[672],[185,4582,4583,4586],{"style":3326},[185,4584],{"className":4585,"style":2430},[680],[185,4587,4589],{"className":4588},[2434,2435,649,2436],[185,4590,4592,4595,4598,4601],{"className":4591},[613,2436],[185,4593,2332],{"className":4594,"style":2443},[613,614,2436],[185,4596,2447],{"className":4597},[613,614,2436],[185,4599,263],{"className":4600},[613,614,2436],[185,4602,2332],{"className":4603,"style":2443},[613,614,2436],[185,4605,705],{"className":4606},[704],[185,4608,4610],{"className":4609},[668],[185,4611,4613],{"className":4612,"style":2463},[672],[185,4614],{},[160,4616,4617],{},"chat gpt\n公式和上面一致",[150,4619,938],{"id":938},[157,4621,4622,4629,4636,4643],{},[160,4623,4624],{},[263,4625,4628],{"href":4626,"rel":4627},"https:\u002F\u002Fwww.andre-gaschler.com\u002Frotationconverter\u002F",[267],"3D Rotation Converter",[160,4630,4631],{},[263,4632,4635],{"href":4633,"rel":4634},"https:\u002F\u002Fwww.euclideanspace.com\u002Fmaths\u002Falgebra\u002FrealNormedAlgebra\u002Fquaternions\u002Ffunctions\u002Findex.htm",[267],"Maths - Quaternion Functions",[160,4637,4638],{},[263,4639,4642],{"href":4640,"rel":4641},"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F42747784\u002Fhow-to-convert-world-space-transform-to-object-space-transform",[267],"how to convert world space transform to object space transform?",[160,4644,4645,4646,4649,4650,4653,4654,4657,4658,4969,4970,5059,5060],{},"3.5的结果\nConverting a quaternion from world space to another space (e.g., local space or object space) involves a transformation that depends on the orientation of the reference spaces. Here's a general approach:\nLet's say you have a quaternion ",[182,4647,4648],{},"Q_world"," representing an orientation in world space, and you want to convert it to a quaternion ",[182,4651,4652],{},"Q_local"," in local space. Also, assume that you have the rotation matrix ",[182,4655,4656],{},"R_world_to_local"," that transforms vectors from world space to local space.\nThe conversion can be done using the following formula:\n",[185,4659,4661,4710],{"className":4660},[517],[185,4662,4664],{"className":4663},[521],[523,4665,4666],{"xmlns":525},[527,4667,4668,4707],{},[530,4669,4670,4678,4680,4687,4690,4697,4699],{},[2323,4671,4672,4674],{},[533,4673,3244],{},[4675,4676,4677],"mtext",{},"local",[537,4679,539],{},[2323,4681,4682,4684],{},[533,4683,565],{},[4675,4685,4686],{},"world_to_local",[537,4688,4689],{},"×",[2323,4691,4692,4694],{},[533,4693,3244],{},[4675,4695,4696],{},"world",[537,4698,4689],{},[2346,4700,4701,4703,4705],{},[533,4702,565],{},[4675,4704,4686],{},[533,4706,535],{},[593,4708,4709],{"encoding":595},"Q_{\\text{local}} = R_{\\text{world\\_to\\_local}} \\times Q_{\\text{world}} \\times R_{\\text{world\\_to\\_local}}^T",[185,4711,4713,4775,4841,4902],{"className":4712,"ariaHidden":544},[600],[185,4714,4716,4719,4766,4769,4772],{"className":4715},[604],[185,4717],{"className":4718,"style":3305},[608],[185,4720,4722,4725],{"className":4721},[613],[185,4723,3244],{"className":4724},[613,614],[185,4726,4728],{"className":4727},[2413],[185,4729,4731,4758],{"className":4730},[663,664],[185,4732,4734,4755],{"className":4733},[668],[185,4735,4737],{"className":4736,"style":2423},[672],[185,4738,4739,4742],{"style":3326},[185,4740],{"className":4741,"style":2430},[680],[185,4743,4745],{"className":4744},[2434,2435,649,2436],[185,4746,4748],{"className":4747},[613,2436],[185,4749,4752],{"className":4750},[613,4751,2436],"text",[185,4753,4677],{"className":4754},[613,2436],[185,4756,705],{"className":4757},[704],[185,4759,4761],{"className":4760},[668],[185,4762,4764],{"className":4763,"style":2463},[672],[185,4765],{},[185,4767],{"className":4768,"style":620},[619],[185,4770,539],{"className":4771},[624],[185,4773],{"className":4774,"style":620},[619],[185,4776,4778,4782,4830,4834,4838],{"className":4777},[604],[185,4779],{"className":4780,"style":4781},[608],"height:1.0503em;vertical-align:-0.367em;",[185,4783,4785,4788],{"className":4784},[613],[185,4786,565],{"className":4787,"style":688},[613,614],[185,4789,4791],{"className":4790},[2413],[185,4792,4794,4821],{"className":4793},[663,664],[185,4795,4797,4818],{"className":4796},[668],[185,4798,4800],{"className":4799,"style":2423},[672],[185,4801,4803,4806],{"style":4802},"top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;",[185,4804],{"className":4805,"style":2430},[680],[185,4807,4809],{"className":4808},[2434,2435,649,2436],[185,4810,4812],{"className":4811},[613,2436],[185,4813,4815],{"className":4814},[613,4751,2436],[185,4816,4686],{"className":4817},[613,2436],[185,4819,705],{"className":4820},[704],[185,4822,4824],{"className":4823},[668],[185,4825,4828],{"className":4826,"style":4827},[672],"height:0.367em;",[185,4829],{},[185,4831],{"className":4832,"style":4833},[619],"margin-right:0.2222em;",[185,4835,4689],{"className":4836},[4837],"mbin",[185,4839],{"className":4840,"style":4833},[619],[185,4842,4844,4847,4893,4896,4899],{"className":4843},[604],[185,4845],{"className":4846,"style":3305},[608],[185,4848,4850,4853],{"className":4849},[613],[185,4851,3244],{"className":4852},[613,614],[185,4854,4856],{"className":4855},[2413],[185,4857,4859,4885],{"className":4858},[663,664],[185,4860,4862,4882],{"className":4861},[668],[185,4863,4865],{"className":4864,"style":2423},[672],[185,4866,4867,4870],{"style":3326},[185,4868],{"className":4869,"style":2430},[680],[185,4871,4873],{"className":4872},[2434,2435,649,2436],[185,4874,4876],{"className":4875},[613,2436],[185,4877,4879],{"className":4878},[613,4751,2436],[185,4880,4696],{"className":4881},[613,2436],[185,4883,705],{"className":4884},[704],[185,4886,4888],{"className":4887},[668],[185,4889,4891],{"className":4890,"style":2463},[672],[185,4892],{},[185,4894],{"className":4895,"style":4833},[619],[185,4897,4689],{"className":4898},[4837],[185,4900],{"className":4901,"style":4833},[619],[185,4903,4905,4909],{"className":4904},[604],[185,4906],{"className":4907,"style":4908},[608],"height:1.3414em;vertical-align:-0.5001em;",[185,4910,4912,4915],{"className":4911},[613],[185,4913,565],{"className":4914,"style":688},[613,614],[185,4916,4918],{"className":4917},[2413],[185,4919,4921,4960],{"className":4920},[663,664],[185,4922,4924,4957],{"className":4923},[668],[185,4925,4928,4946],{"className":4926,"style":4927},[672],"height:0.8413em;",[185,4929,4931,4934],{"style":4930},"top:-2.4169em;margin-left:-0.0077em;margin-right:0.05em;",[185,4932],{"className":4933,"style":2430},[680],[185,4935,4937],{"className":4936},[2434,2435,649,2436],[185,4938,4940],{"className":4939},[613,2436],[185,4941,4943],{"className":4942},[613,4751,2436],[185,4944,4686],{"className":4945},[613,2436],[185,4947,4948,4951],{"style":2534},[185,4949],{"className":4950,"style":2430},[680],[185,4952,4954],{"className":4953},[2434,2435,649,2436],[185,4955,535],{"className":4956,"style":615},[613,614,2436],[185,4958,705],{"className":4959},[704],[185,4961,4963],{"className":4962},[668],[185,4964,4967],{"className":4965,"style":4966},[672],"height:0.5001em;",[185,4968],{},"\nHere, ",[185,4971,4973,4993],{"className":4972},[517],[185,4974,4976],{"className":4975},[521],[523,4977,4978],{"xmlns":525},[527,4979,4980,4990],{},[530,4981,4982],{},[2346,4983,4984,4986,4988],{},[533,4985,565],{},[4675,4987,4686],{},[533,4989,535],{},[593,4991,4992],{"encoding":595},"R_{\\text{world\\_to\\_local}}^T",[185,4994,4996],{"className":4995,"ariaHidden":544},[600],[185,4997,4999,5002],{"className":4998},[604],[185,5000],{"className":5001,"style":4908},[608],[185,5003,5005,5008],{"className":5004},[613],[185,5006,565],{"className":5007,"style":688},[613,614],[185,5009,5011],{"className":5010},[2413],[185,5012,5014,5051],{"className":5013},[663,664],[185,5015,5017,5048],{"className":5016},[668],[185,5018,5020,5037],{"className":5019,"style":4927},[672],[185,5021,5022,5025],{"style":4930},[185,5023],{"className":5024,"style":2430},[680],[185,5026,5028],{"className":5027},[2434,2435,649,2436],[185,5029,5031],{"className":5030},[613,2436],[185,5032,5034],{"className":5033},[613,4751,2436],[185,5035,4686],{"className":5036},[613,2436],[185,5038,5039,5042],{"style":2534},[185,5040],{"className":5041,"style":2430},[680],[185,5043,5045],{"className":5044},[2434,2435,649,2436],[185,5046,535],{"className":5047,"style":615},[613,614,2436],[185,5049,705],{"className":5050},[704],[185,5052,5054],{"className":5053},[668],[185,5055,5057],{"className":5056,"style":4966},[672],[185,5058],{}," is the transpose of the rotation matrix. If the rotation matrix is a pure rotation matrix (i.e., it doesn't include translation or scaling), then the transpose is the same as the inverse.\nIf you have the rotation matrix in terms of a 3x3 matrix, you can convert it to a quaternion using a conversion function. The quaternion multiplication is typically implemented as Hamilton product.\nHere's some pseudocode in Python:\n",[175,5061,5063],{"className":3925,"code":5062,"language":3927,"meta":180,"style":180},"import numpy as np\nfrom scipy.spatial.transform import Rotation\n\n# Assuming Q_world is your quaternion in world space\n# Assuming R_world_to_local is your rotation matrix from world to local space\n\n# Convert rotation matrix to quaternion\nr_world_to_local = Rotation.from_matrix(R_world_to_local)\nq_world_to_local = r_world_to_local.as_quat()\n\n# Convert quaternion from world to local space\nq_world = np.quaternion(Q_world[0], Q_world[1], Q_world[2], Q_world[3])\nq_local = q_world_to_local * q_world * q_world_to_local.conj()\n\n# Extract the components of the resulting quaternion\nQ_local = np.array([q_local.real, q_local.imag[0], q_local.imag[1], q_local.imag[2]])\n",[182,5064,5065,5070,5075,5079,5084,5089,5093,5098,5103,5108,5112,5117,5122,5127,5131,5136],{"__ignoreMap":180},[185,5066,5067],{"class":187,"line":188},[185,5068,5069],{},"import numpy as np\n",[185,5071,5072],{"class":187,"line":194},[185,5073,5074],{},"from scipy.spatial.transform import Rotation\n",[185,5076,5077],{"class":187,"line":200},[185,5078,328],{"emptyLinePlaceholder":327},[185,5080,5081],{"class":187,"line":206},[185,5082,5083],{},"# Assuming Q_world is your quaternion in world space\n",[185,5085,5086],{"class":187,"line":212},[185,5087,5088],{},"# Assuming R_world_to_local is your rotation matrix from world to local space\n",[185,5090,5091],{"class":187,"line":218},[185,5092,328],{"emptyLinePlaceholder":327},[185,5094,5095],{"class":187,"line":224},[185,5096,5097],{},"# Convert rotation matrix to quaternion\n",[185,5099,5100],{"class":187,"line":230},[185,5101,5102],{},"r_world_to_local = Rotation.from_matrix(R_world_to_local)\n",[185,5104,5105],{"class":187,"line":236},[185,5106,5107],{},"q_world_to_local = r_world_to_local.as_quat()\n",[185,5109,5110],{"class":187,"line":242},[185,5111,328],{"emptyLinePlaceholder":327},[185,5113,5114],{"class":187,"line":248},[185,5115,5116],{},"# Convert quaternion from world to local space\n",[185,5118,5119],{"class":187,"line":254},[185,5120,5121],{},"q_world = np.quaternion(Q_world[0], Q_world[1], Q_world[2], Q_world[3])\n",[185,5123,5124],{"class":187,"line":336},[185,5125,5126],{},"q_local = q_world_to_local * q_world * q_world_to_local.conj()\n",[185,5128,5129],{"class":187,"line":341},[185,5130,328],{"emptyLinePlaceholder":327},[185,5132,5133],{"class":187,"line":347},[185,5134,5135],{},"# Extract the components of the resulting quaternion\n",[185,5137,5138],{"class":187,"line":353},[185,5139,5140],{},"Q_local = np.array([q_local.real, q_local.imag[0], q_local.imag[1], q_local.imag[2]])\n",[5142,5143,5144],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":180,"searchDepth":188,"depth":194,"links":5146},[5147,5148,5149,5150,5151,5152,5156,5160],{"id":152,"depth":194,"text":152},{"id":168,"depth":194,"text":168},{"id":508,"depth":194,"text":508},{"id":840,"depth":194,"text":841},{"id":926,"depth":194,"text":927},{"id":2267,"depth":194,"text":2268,"children":5153},[5154,5155],{"id":2272,"depth":200,"text":2273},{"id":3203,"depth":200,"text":3204},{"id":4083,"depth":194,"text":4084,"children":5157},[5158,5159],{"id":4087,"depth":200,"text":2273},{"id":4353,"depth":200,"text":3204},{"id":938,"depth":194,"text":938},"使用 Go 语言 gonum 库实现局部坐标与世界坐标的相互转换，包括四元数与旋转矩阵转换、变换矩阵计算、欧拉角转四元数等方法。","md",null,{},{"title":5166,"description":5167},"【go\u002F方法记录】局部坐标与世界坐标间的相互转换(位置\u002F方向)","使用 Go 语言 gonum 库实现局部坐标与世界坐标的相互转换，包括四元数与旋转矩阵转换、变换矩阵计算、欧拉角转四元数等方法，适用于 3D 图形开发场景。","xE5hwwu-11Xg49n3Dx0CqvgiPtWeMPYjZkHXijTkfNY",[5170,5172],{"title":28,"path":29,"stem":30,"description":5171,"children":-1},"Golang 学习笔记与技术实践记录，包括 MCP Server 配置、HTTP 服务器搭建、Wails 桌面应用开发等内容，适合 Go 语言开发者参考学习。",{"title":42,"path":43,"stem":44,"description":5173,"children":-1},"MI50 显卡运行大模型环境搭建教程，介绍 BIOS 设置（关闭CSM、开启Above4G）、SSH 远程连接配置、AMD GPU 驱动与 ROCm 安装步骤。",1776616490416]