[{"data":1,"prerenderedAt":21392},["ShallowReactive",2],{"content:\u002Fposts\u002Fe6681c2":3,"surround:\u002Fposts\u002Fe6681c2":21386},{"id":4,"title":5,"body":6,"categories":21344,"date":21346,"description":21347,"donation":21348,"draft":21348,"extension":21349,"image":21350,"meta":21351,"navigation":21360,"path":21361,"permalink":21361,"published":21350,"readingTime":21362,"recommend":21350,"references":21367,"seo":21378,"sitemap":21379,"stem":21380,"tags":21381,"type":21383,"updated":21384,"__hash__":21385},"content\u002Fposts\u002F2026\u002Fdonut_math.md","甜甜圈的数学：donut.c 是如何工作的",{"type":7,"value":8,"toc":21327},"minimark",[9,37,47,56,59,71,79,85,88,92,114,117,1097,1100,1104,1107,1110,1115,1118,1122,1729,2279,2480,2886,3421,3715,4288,4291,4294,4309,4313,4623,4966,5062,5874,6447,6450,6635,6638,6813,8404,8472,8509,8583,9106,9247,9250,10579,10582,10737,10740,10755,10802,11085,12838,13489,14451,14454,14457,14738,15398,15783,15786,15789,15792,15798,15809,15812,15824,15832,15835,15842,15845,15849,15864,16374,16377,16383,16386,16442,16446,16731,16920,17107,17703,17706,17949,17952,18172,18368,18612,18615,18658,19220,19223,19376,19505,19508,19514,19587,19592,20094,20099,20553,20651,20656,20867,20870,20873,20876,20879,21077,21084,21087,21236,21240,21252,21295,21301,21304,21307,21314,21317,21321],[10,11,12,22,25],"blockquote",{},[13,14,15,16],"p",{},"本文主要翻译自: ",[17,18,19],"a",{"href":19,"rel":20},"https:\u002F\u002Fwww.a1k0n.net\u002F2011\u002F07\u002F20\u002Fdonut-math.html",[21],"nofollow",[13,23,24],{},"作者: a1k0n (Andy Sloane)",[13,26,27,28,32,33],{},"相关补充: ",[17,29,30],{"href":30,"rel":31},"https:\u002F\u002Fwww.a1k0n.net\u002F2006\u002F09\u002F20\u002Fobfuscated-c-donut-2.html",[21]," 与 ",[17,34,35],{"href":35,"rel":36},"https:\u002F\u002Fwww.a1k0n.net\u002F2021\u002F01\u002F13\u002Foptimizing-donut.html",[21],[13,38,39],{},[40,41,42,43],"em",{},"原文发布于 2011年7月20日，2021年1月13日更新了",[17,44,46],{"href":35,"rel":45},[21],"一些优化",[13,48,49,50,55],{},"a1k0n 在 2006 年写的",[17,51,54],{"href":52,"rel":53},"https:\u002F\u002Fwww.a1k0n.net\u002F2006\u002F09\u002F15\u002Fobfuscated-c-donut.html",[21],"\"甜甜圈\"代码","，后来因 Lex Fridman、Joma Tech 等视频传播而再次走红，有人要求解释，于是 a1k0n 写了这篇详解。",[13,57,58],{},"donut.c 的渲染流程可以概括为：在环面表面采样大量 3D 点，绕两个轴旋转，用透视投影映射到终端字符网格，根据光照选择亮度字符，并用 Z 缓冲遮挡后方点。下面是完整代码：",[60,61,68],"pre",{"className":62,"code":64,"filename":65,"language":66,"meta":67},[63],"language-c","             k;double sin()\n         ,cos();main(){float A=\n       0,B=0,i,j,z[1760];char b[\n     1760];printf(\"\\x1b[2J\");for(;;\n  ){memset(b,32,1760);memset(z,0,7040)\n  ;for(j=0;6.28>j;j+=0.07)for(i=0;6.28\n >i;i+=0.02){float c=sin(i),d=cos(j),e=\n sin(A),f=sin(j),g=cos(A),h=d+2,D=1\u002F(c*\n h*e+f*g+5),l=cos      (i),m=cos(B),n=s\\\nin(B),t=c*h*g-f*        e;int x=40+30*D*\n(l*h*m-t*n),y=            12+15*D*(l*h*n\n+t*m),o=x+80*y,          N=8*((f*e-c*d*g\n )*m-c*d*e-f*g-l        *d*n);if(22>y&&\n y>0&&x>0&&80>x&&D>z[o]){z[o]=D;;;b[o]=\n \".,-~:;=!*#$@\"[N>0?N:0];}}\u002F*#****!!-*\u002F\n  printf(\"\\x1b[H\");for(k=0;1761>k;k++)\n   putchar(k%80?b[k]:10);A+=0.04;B+=\n     0.02;}}\u002F*****####*******!!=;:~\n       ~::==!!!**********!!!==::-\n         .,~~;;;========;;;:~-.\n             ..,--------,*\u002F\n","donut.c","c","",[69,70,64],"code",{"__ignoreMap":67},[13,72,73,74,78],{},"...代码和运行效果都是甜甜圈🍩，也可以到",[17,75,77],{"href":76},"\u002Fabout","我的关于页","查看效果。",[80,81],"pic",{":height":82,"caption":83,"src":84},"320","运行效果","https:\u002F\u002Fbu.dusays.com\u002F2026\u002F06\u002F09\u002F6a27ee8ac4d9c.gif",[13,86,87],{},"编译命令：",[89,90],"copy",{"code":91},"gcc -std=c89 -w donut.c -o donut -lm",[93,94,96],"alert",{"type":95},"info",[13,97,98,99,102,103,102,106,109,110,113],{},"原始代码依赖旧式 C 规则。若改成现代 C 写法，通常需要补上 ",[69,100,101],{"code":101},"#include \u003Cstdio.h>","、",[69,104,105],{"code":105},"#include \u003Cstring.h>",[69,107,108],{"code":108},"#include \u003Cmath.h>","，并使用标准的 ",[69,111,112],{"code":112},"main"," 函数声明。",[13,115,116],{},"为了方便后续对照，先列出原始代码中关键变量的含义：",[118,119,120,133],"table",{},[121,122,123],"thead",{},[124,125,126,130],"tr",{},[127,128,129],"th",{},"变量",[127,131,132],{},"含义",[134,135,136,196,238,314,394,465,537,609,861,911,1054,1064,1077,1087],"tbody",{},[124,137,138,144],{},[139,140,141],"td",{},[69,142,143],{"code":143},"j",[139,145,146,147,195],{},"截面圆角度 ",[148,149,152,175],"span",{"className":150},[151],"katex",[148,153,156],{"className":154},[155],"katex-mathml",[157,158,160],"math",{"xmlns":159},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[161,162,163,170],"semantics",{},[164,165,166],"mrow",{},[167,168,169],"mi",{},"θ",[171,172,174],"annotation",{"encoding":173},"application\u002Fx-tex","\\theta",[148,176,180],{"className":177,"ariaHidden":179},[178],"katex-html","true",[148,181,184,189],{"className":182},[183],"base",[148,185],{"className":186,"style":188},[187],"strut","height:0.6944em;",[148,190,169],{"className":191,"style":194},[192,193],"mord","mathnormal","margin-right:0.0278em;","（外层循环，步长 0.07）",[124,197,198,203],{},[139,199,200],{},[69,201,202],{"code":202},"i",[139,204,205,206,237],{},"环面旋转角度 ",[148,207,209,224],{"className":208},[151],[148,210,212],{"className":211},[155],[157,213,214],{"xmlns":159},[161,215,216,221],{},[164,217,218],{},[167,219,220],{},"ϕ",[171,222,223],{"encoding":173},"\\phi",[148,225,227],{"className":226,"ariaHidden":179},[178],[148,228,230,234],{"className":229},[183],[148,231],{"className":232,"style":233},[187],"height:0.8889em;vertical-align:-0.1944em;",[148,235,220],{"className":236},[192,193],"（内层循环，步长 0.02）",[124,239,240,249],{},[139,241,242,245,246],{},[69,243,244],{"code":244},"A",", ",[69,247,248],{"code":248},"B",[139,250,251,252,282,283,313],{},"动画旋转角（绕 ",[148,253,255,269],{"className":254},[151],[148,256,258],{"className":257},[155],[157,259,260],{"xmlns":159},[161,261,262,267],{},[164,263,264],{},[167,265,266],{},"x",[171,268,266],{"encoding":173},[148,270,272],{"className":271,"ariaHidden":179},[178],[148,273,275,279],{"className":274},[183],[148,276],{"className":277,"style":278},[187],"height:0.4306em;",[148,280,266],{"className":281},[192,193]," 轴和 ",[148,284,286,300],{"className":285},[151],[148,287,289],{"className":288},[155],[157,290,291],{"xmlns":159},[161,292,293,298],{},[164,294,295],{},[167,296,297],{},"z",[171,299,297],{"encoding":173},[148,301,303],{"className":302,"ariaHidden":179},[178],[148,304,306,309],{"className":305},[183],[148,307],{"className":308,"style":278},[187],[148,310,297],{"className":311,"style":312},[192,193],"margin-right:0.044em;"," 轴）",[124,315,316,321],{},[139,317,318],{},[69,319,320],{"code":320},"c, l",[139,322,323],{},[148,324,326,357],{"className":325},[151],[148,327,329],{"className":328},[155],[157,330,331],{"xmlns":159},[161,332,333,354],{},[164,334,335,338,342,344,347,350,352],{},[167,336,337],{},"sin",[339,340,341],"mo",{},"⁡",[167,343,220],{},[339,345,346],{"separator":179},",",[167,348,349],{},"cos",[339,351,341],{},[167,353,220],{},[171,355,356],{"encoding":173},"\\sin\\phi, \\cos\\phi",[148,358,360],{"className":359,"ariaHidden":179},[178],[148,361,363,366,370,375,378,382,385,388,391],{"className":362},[183],[148,364],{"className":365,"style":233},[187],[148,367,337],{"className":368},[369],"mop",[148,371],{"className":372,"style":374},[373],"mspace","margin-right:0.1667em;",[148,376,220],{"className":377},[192,193],[148,379,346],{"className":380},[381],"mpunct",[148,383],{"className":384,"style":374},[373],[148,386,349],{"className":387},[369],[148,389],{"className":390,"style":374},[373],[148,392,220],{"className":393},[192,193],[124,395,396,401],{},[139,397,398],{},[69,399,400],{"code":400},"d, f",[139,402,403],{},[148,404,406,432],{"className":405},[151],[148,407,409],{"className":408},[155],[157,410,411],{"xmlns":159},[161,412,413,429],{},[164,414,415,417,419,421,423,425,427],{},[167,416,349],{},[339,418,341],{},[167,420,169],{},[339,422,346],{"separator":179},[167,424,337],{},[339,426,341],{},[167,428,169],{},[171,430,431],{"encoding":173},"\\cos\\theta, \\sin\\theta",[148,433,435],{"className":434,"ariaHidden":179},[178],[148,436,438,441,444,447,450,453,456,459,462],{"className":437},[183],[148,439],{"className":440,"style":233},[187],[148,442,349],{"className":443},[369],[148,445],{"className":446,"style":374},[373],[148,448,169],{"className":449,"style":194},[192,193],[148,451,346],{"className":452},[381],[148,454],{"className":455,"style":374},[373],[148,457,337],{"className":458},[369],[148,460],{"className":461,"style":374},[373],[148,463,169],{"className":464,"style":194},[192,193],[124,466,467,472],{},[139,468,469],{},[69,470,471],{"code":471},"e, g",[139,473,474],{},[148,475,477,503],{"className":476},[151],[148,478,480],{"className":479},[155],[157,481,482],{"xmlns":159},[161,483,484,500],{},[164,485,486,488,490,492,494,496,498],{},[167,487,337],{},[339,489,341],{},[167,491,244],{},[339,493,346],{"separator":179},[167,495,349],{},[339,497,341],{},[167,499,244],{},[171,501,502],{"encoding":173},"\\sin A, \\cos A",[148,504,506],{"className":505,"ariaHidden":179},[178],[148,507,509,513,516,519,522,525,528,531,534],{"className":508},[183],[148,510],{"className":511,"style":512},[187],"height:0.8778em;vertical-align:-0.1944em;",[148,514,337],{"className":515},[369],[148,517],{"className":518,"style":374},[373],[148,520,244],{"className":521},[192,193],[148,523,346],{"className":524},[381],[148,526],{"className":527,"style":374},[373],[148,529,349],{"className":530},[369],[148,532],{"className":533,"style":374},[373],[148,535,244],{"className":536},[192,193],[124,538,539,544],{},[139,540,541],{},[69,542,543],{"code":543},"m, n",[139,545,546],{},[148,547,549,575],{"className":548},[151],[148,550,552],{"className":551},[155],[157,553,554],{"xmlns":159},[161,555,556,572],{},[164,557,558,560,562,564,566,568,570],{},[167,559,349],{},[339,561,341],{},[167,563,248],{},[339,565,346],{"separator":179},[167,567,337],{},[339,569,341],{},[167,571,248],{},[171,573,574],{"encoding":173},"\\cos B, \\sin B",[148,576,578],{"className":577,"ariaHidden":179},[178],[148,579,581,584,587,590,594,597,600,603,606],{"className":580},[183],[148,582],{"className":583,"style":512},[187],[148,585,349],{"className":586},[369],[148,588],{"className":589,"style":374},[373],[148,591,248],{"className":592,"style":593},[192,193],"margin-right:0.0502em;",[148,595,346],{"className":596},[381],[148,598],{"className":599,"style":374},[373],[148,601,337],{"className":602},[369],[148,604],{"className":605,"style":374},[373],[148,607,248],{"className":608,"style":593},[192,193],[124,610,611,616],{},[139,612,613],{},[69,614,615],{"code":615},"h",[139,617,618,796,797,860],{},[148,619,621,659],{"className":620},[151],[148,622,624],{"className":623},[155],[157,625,626],{"xmlns":159},[161,627,628,656],{},[164,629,630,640,643,650,652,654],{},[631,632,633,636],"msub",{},[167,634,635],{},"R",[637,638,639],"mn",{},"2",[339,641,642],{},"+",[631,644,645,647],{},[167,646,635],{},[637,648,649],{},"1",[167,651,349],{},[339,653,341],{},[167,655,169],{},[171,657,658],{"encoding":173},"R_2 + R_1\\cos\\theta",[148,660,662,737],{"className":661,"ariaHidden":179},[178],[148,663,665,669,726,730,734],{"className":664},[183],[148,666],{"className":667,"style":668},[187],"height:0.8333em;vertical-align:-0.15em;",[148,670,672,676],{"className":671},[192],[148,673,635],{"className":674,"style":675},[192,193],"margin-right:0.0077em;",[148,677,680],{"className":678},[679],"msupsub",[148,681,685,717],{"className":682},[683,684],"vlist-t","vlist-t2",[148,686,689,712],{"className":687},[688],"vlist-r",[148,690,694],{"className":691,"style":693},[692],"vlist","height:0.3011em;",[148,695,697,702],{"style":696},"top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;",[148,698],{"className":699,"style":701},[700],"pstrut","height:2.7em;",[148,703,709],{"className":704},[705,706,707,708],"sizing","reset-size6","size3","mtight",[148,710,639],{"className":711},[192,708],[148,713,716],{"className":714},[715],"vlist-s","​",[148,718,720],{"className":719},[688],[148,721,724],{"className":722,"style":723},[692],"height:0.15em;",[148,725],{},[148,727],{"className":728,"style":729},[373],"margin-right:0.2222em;",[148,731,642],{"className":732},[733],"mbin",[148,735],{"className":736,"style":729},[373],[148,738,740,744,784,787,790,793],{"className":739},[183],[148,741],{"className":742,"style":743},[187],"height:0.8444em;vertical-align:-0.15em;",[148,745,747,750],{"className":746},[192],[148,748,635],{"className":749,"style":675},[192,193],[148,751,753],{"className":752},[679],[148,754,756,776],{"className":755},[683,684],[148,757,759,773],{"className":758},[688],[148,760,762],{"className":761,"style":693},[692],[148,763,764,767],{"style":696},[148,765],{"className":766,"style":701},[700],[148,768,770],{"className":769},[705,706,707,708],[148,771,649],{"className":772},[192,708],[148,774,716],{"className":775},[715],[148,777,779],{"className":778},[688],[148,780,782],{"className":781,"style":723},[692],[148,783],{},[148,785],{"className":786,"style":374},[373],[148,788,349],{"className":789},[369],[148,791],{"className":792,"style":374},[373],[148,794,169],{"className":795,"style":194},[192,193],"（即 ",[148,798,800,822],{"className":799},[151],[148,801,803],{"className":802},[155],[157,804,805],{"xmlns":159},[161,806,807,819],{},[164,808,809,811,813,815,817],{},[167,810,349],{},[339,812,341],{},[167,814,169],{},[339,816,642],{},[637,818,639],{},[171,820,821],{"encoding":173},"\\cos\\theta + 2",[148,823,825,850],{"className":824,"ariaHidden":179},[178],[148,826,828,832,835,838,841,844,847],{"className":827},[183],[148,829],{"className":830,"style":831},[187],"height:0.7778em;vertical-align:-0.0833em;",[148,833,349],{"className":834},[369],[148,836],{"className":837,"style":374},[373],[148,839,169],{"className":840,"style":194},[192,193],[148,842],{"className":843,"style":729},[373],[148,845,642],{"className":846},[733],[148,848],{"className":849,"style":729},[373],[148,851,853,857],{"className":852},[183],[148,854],{"className":855,"style":856},[187],"height:0.6444em;",[148,858,639],{"className":859},[192],"）",[124,862,863,868],{},[139,864,865],{},[69,866,867],{"code":867},"D",[139,869,870,910],{},[148,871,873,893],{"className":872},[151],[148,874,876],{"className":875},[155],[157,877,878],{"xmlns":159},[161,879,880,890],{},[164,881,882,884,888],{},[637,883,649],{},[167,885,887],{"mathvariant":886},"normal","\u002F",[167,889,297],{},[171,891,892],{"encoding":173},"1\u002Fz",[148,894,896],{"className":895,"ariaHidden":179},[178],[148,897,899,903,907],{"className":898},[183],[148,900],{"className":901,"style":902},[187],"height:1em;vertical-align:-0.25em;",[148,904,906],{"className":905},[192],"1\u002F",[148,908,297],{"className":909,"style":312},[192,193],"，倒深度，同时用于透视缩放和 Z 缓冲比较",[124,912,913,918],{},[139,914,915],{},[69,916,917],{"code":917},"t",[139,919,920,921,993,994,1022,1023,1053],{},"中间变量（",[148,922,924,952],{"className":923},[151],[148,925,927],{"className":926},[155],[157,928,929],{"xmlns":159},[161,930,931,949],{},[164,932,933,935,937,940,943,946],{},[167,934,66],{},[167,936,615],{},[167,938,939],{},"g",[339,941,942],{},"−",[167,944,945],{},"f",[167,947,948],{},"e",[171,950,951],{"encoding":173},"c h g - f e",[148,953,955,980],{"className":954,"ariaHidden":179},[178],[148,956,958,961,964,967,971,974,977],{"className":957},[183],[148,959],{"className":960,"style":233},[187],[148,962,66],{"className":963},[192,193],[148,965,615],{"className":966},[192,193],[148,968,939],{"className":969,"style":970},[192,193],"margin-right:0.0359em;",[148,972],{"className":973,"style":729},[373],[148,975,942],{"className":976},[733],[148,978],{"className":979,"style":729},[373],[148,981,983,986,990],{"className":982},[183],[148,984],{"className":985,"style":233},[187],[148,987,945],{"className":988,"style":989},[192,193],"margin-right:0.1076em;",[148,991,948],{"className":992},[192,193],"），同时用于 ",[148,995,997,1010],{"className":996},[151],[148,998,1000],{"className":999},[155],[157,1001,1002],{"xmlns":159},[161,1003,1004,1008],{},[164,1005,1006],{},[167,1007,266],{},[171,1009,266],{"encoding":173},[148,1011,1013],{"className":1012,"ariaHidden":179},[178],[148,1014,1016,1019],{"className":1015},[183],[148,1017],{"className":1018,"style":278},[187],[148,1020,266],{"className":1021},[192,193]," 和 ",[148,1024,1026,1040],{"className":1025},[151],[148,1027,1029],{"className":1028},[155],[157,1030,1031],{"xmlns":159},[161,1032,1033,1038],{},[164,1034,1035],{},[167,1036,1037],{},"y",[171,1039,1037],{"encoding":173},[148,1041,1043],{"className":1042,"ariaHidden":179},[178],[148,1044,1046,1050],{"className":1045},[183],[148,1047],{"className":1048,"style":1049},[187],"height:0.625em;vertical-align:-0.1944em;",[148,1051,1037],{"className":1052,"style":970},[192,193]," 屏幕坐标计算",[124,1055,1056,1061],{},[139,1057,1058],{},[69,1059,1060],{"code":1060},"x, y",[139,1062,1063],{},"屏幕坐标",[124,1065,1066,1071],{},[139,1067,1068],{},[69,1069,1070],{"code":1070},"N",[139,1072,1073,1074,860],{},"光照亮度索引（映射到字符 ",[69,1075,1076],{"code":1076},".,-~:;=!*#$@",[124,1078,1079,1084],{},[139,1080,1081],{},[69,1082,1083],{"code":1083},"z[1760]",[139,1085,1086],{},"Z 缓冲区（80×22）",[124,1088,1089,1094],{},[139,1090,1091],{},[69,1092,1093],{"code":1093},"b[1760]",[139,1095,1096],{},"字符帧缓冲区",[13,1098,1099],{},"它的核心是一个帧缓冲区和一个 Z 缓冲区，用于渲染像素。因为只是渲染相对低分辨率的 ASCII 艺术，所以可以走捷径。它所做的只是沿着环面表面以固定角度增量绘制像素，并且绘制得足够密集，使最终结果看起来是实心的。它绘制的\"像素\"是 ASCII 字符，对应每个点表面的光照值：",[1101,1102,1076],"tip",{"tip":1103},"从最暗到最亮的 12 个亮度级别",[13,1105,1106],{},"不需要光线追踪。",[13,1108,1109],{},"那么该怎么做呢？让我们从 3D 透视渲染背后的数学开始。",[1111,1112,1114],"h2",{"id":1113},"_3d-透视投影","3D 透视投影",[13,1116,1117],{},"下面的示意图是一个人坐在屏幕前的侧视图，观看屏幕后面的 3D 物体。",[80,1119],{":height":82,"caption":1120,"src":1121},"透视投影示意图","https:\u002F\u002Fbu.dusays.com\u002F2026\u002F06\u002F09\u002F6a27d2745d00c.webp",[13,1123,1124,1125,1195,1196,1263,1264,1383,1384,1022,1412,1440,1441,1469,1470,1498,1499,1563,1564,1728],{},"要将 3D 物体渲染到 2D 屏幕上，需要将 3D 空间中的每个点 ",[148,1126,1128,1157],{"className":1127},[151],[148,1129,1131],{"className":1130},[155],[157,1132,1133],{"xmlns":159},[161,1134,1135,1154],{},[164,1136,1137,1141,1143,1145,1147,1149,1151],{},[339,1138,1140],{"stretchy":1139},"false","(",[167,1142,266],{},[339,1144,346],{"separator":179},[167,1146,1037],{},[339,1148,346],{"separator":179},[167,1150,297],{},[339,1152,1153],{"stretchy":1139},")",[171,1155,1156],{"encoding":173},"(x,y,z)",[148,1158,1160],{"className":1159,"ariaHidden":179},[178],[148,1161,1163,1166,1170,1173,1176,1179,1182,1185,1188,1191],{"className":1162},[183],[148,1164],{"className":1165,"style":902},[187],[148,1167,1140],{"className":1168},[1169],"mopen",[148,1171,266],{"className":1172},[192,193],[148,1174,346],{"className":1175},[381],[148,1177],{"className":1178,"style":374},[373],[148,1180,1037],{"className":1181,"style":970},[192,193],[148,1183,346],{"className":1184},[381],[148,1186],{"className":1187,"style":374},[373],[148,1189,297],{"className":1190,"style":312},[192,193],[148,1192,1153],{"className":1193},[1194],"mclose"," 投影到距离观察者 ",[148,1197,1199,1220],{"className":1198},[151],[148,1200,1202],{"className":1201},[155],[157,1203,1204],{"xmlns":159},[161,1205,1206,1217],{},[164,1207,1208],{},[1209,1210,1211,1213],"msup",{},[167,1212,297],{},[339,1214,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},"0em","′",[171,1218,1219],{"encoding":173},"z'",[148,1221,1223],{"className":1222,"ariaHidden":179},[178],[148,1224,1226,1230],{"className":1225},[183],[148,1227],{"className":1228,"style":1229},[187],"height:0.7519em;",[148,1231,1233,1236],{"className":1232},[192],[148,1234,297],{"className":1235,"style":312},[192,193],[148,1237,1239],{"className":1238},[679],[148,1240,1242],{"className":1241},[683],[148,1243,1245],{"className":1244},[688],[148,1246,1248],{"className":1247,"style":1229},[692],[148,1249,1251,1254],{"style":1250},"top:-3.063em;margin-right:0.05em;",[148,1252],{"className":1253,"style":701},[700],[148,1255,1257],{"className":1256},[705,706,707,708],[148,1258,1260],{"className":1259},[192,708],[148,1261,1216],{"className":1262},[192,708]," 单位的平面上，使得对应的 2D 位置为 ",[148,1265,1267,1297],{"className":1266},[151],[148,1268,1270],{"className":1269},[155],[157,1271,1272],{"xmlns":159},[161,1273,1274,1294],{},[164,1275,1276,1278,1284,1286,1292],{},[339,1277,1140],{"stretchy":1139},[1209,1279,1280,1282],{},[167,1281,266],{},[339,1283,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,1285,346],{"separator":179},[1209,1287,1288,1290],{},[167,1289,1037],{},[339,1291,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,1293,1153],{"stretchy":1139},[171,1295,1296],{"encoding":173},"(x',y')",[148,1298,1300],{"className":1299,"ariaHidden":179},[178],[148,1301,1303,1307,1310,1342,1345,1348,1380],{"className":1302},[183],[148,1304],{"className":1305,"style":1306},[187],"height:1.0019em;vertical-align:-0.25em;",[148,1308,1140],{"className":1309},[1169],[148,1311,1313,1316],{"className":1312},[192],[148,1314,266],{"className":1315},[192,193],[148,1317,1319],{"className":1318},[679],[148,1320,1322],{"className":1321},[683],[148,1323,1325],{"className":1324},[688],[148,1326,1328],{"className":1327,"style":1229},[692],[148,1329,1330,1333],{"style":1250},[148,1331],{"className":1332,"style":701},[700],[148,1334,1336],{"className":1335},[705,706,707,708],[148,1337,1339],{"className":1338},[192,708],[148,1340,1216],{"className":1341},[192,708],[148,1343,346],{"className":1344},[381],[148,1346],{"className":1347,"style":374},[373],[148,1349,1351,1354],{"className":1350},[192],[148,1352,1037],{"className":1353,"style":970},[192,193],[148,1355,1357],{"className":1356},[679],[148,1358,1360],{"className":1359},[683],[148,1361,1363],{"className":1362},[688],[148,1364,1366],{"className":1365,"style":1229},[692],[148,1367,1368,1371],{"style":1250},[148,1369],{"className":1370,"style":701},[700],[148,1372,1374],{"className":1373},[705,706,707,708],[148,1375,1377],{"className":1376},[192,708],[148,1378,1216],{"className":1379},[192,708],[148,1381,1153],{"className":1382},[1194],"。由于是从侧面观察，只能看到 ",[148,1385,1387,1400],{"className":1386},[151],[148,1388,1390],{"className":1389},[155],[157,1391,1392],{"xmlns":159},[161,1393,1394,1398],{},[164,1395,1396],{},[167,1397,1037],{},[171,1399,1037],{"encoding":173},[148,1401,1403],{"className":1402,"ariaHidden":179},[178],[148,1404,1406,1409],{"className":1405},[183],[148,1407],{"className":1408,"style":1049},[187],[148,1410,1037],{"className":1411,"style":970},[192,193],[148,1413,1415,1428],{"className":1414},[151],[148,1416,1418],{"className":1417},[155],[157,1419,1420],{"xmlns":159},[161,1421,1422,1426],{},[164,1423,1424],{},[167,1425,297],{},[171,1427,297],{"encoding":173},[148,1429,1431],{"className":1430,"ariaHidden":179},[178],[148,1432,1434,1437],{"className":1433},[183],[148,1435],{"className":1436,"style":278},[187],[148,1438,297],{"className":1439,"style":312},[192,193]," 轴，但数学对 ",[148,1442,1444,1457],{"className":1443},[151],[148,1445,1447],{"className":1446},[155],[157,1448,1449],{"xmlns":159},[161,1450,1451,1455],{},[164,1452,1453],{},[167,1454,266],{},[171,1456,266],{"encoding":173},[148,1458,1460],{"className":1459,"ariaHidden":179},[178],[148,1461,1463,1466],{"className":1462},[183],[148,1464],{"className":1465,"style":278},[187],[148,1467,266],{"className":1468},[192,193]," 轴同样适用（只需把这当作俯视图）。这个投影很容易得到：注意原点、",[148,1471,1473,1486],{"className":1472},[151],[148,1474,1476],{"className":1475},[155],[157,1477,1478],{"xmlns":159},[161,1479,1480,1484],{},[164,1481,1482],{},[167,1483,1037],{},[171,1485,1037],{"encoding":173},[148,1487,1489],{"className":1488,"ariaHidden":179},[178],[148,1490,1492,1495],{"className":1491},[183],[148,1493],{"className":1494,"style":1049},[187],[148,1496,1037],{"className":1497,"style":970},[192,193]," 轴和点 ",[148,1500,1502,1527],{"className":1501},[151],[148,1503,1505],{"className":1504},[155],[157,1506,1507],{"xmlns":159},[161,1508,1509,1525],{},[164,1510,1511,1513,1515,1517,1519,1521,1523],{},[339,1512,1140],{"stretchy":1139},[167,1514,266],{},[339,1516,346],{"separator":179},[167,1518,1037],{},[339,1520,346],{"separator":179},[167,1522,297],{},[339,1524,1153],{"stretchy":1139},[171,1526,1156],{"encoding":173},[148,1528,1530],{"className":1529,"ariaHidden":179},[178],[148,1531,1533,1536,1539,1542,1545,1548,1551,1554,1557,1560],{"className":1532},[183],[148,1534],{"className":1535,"style":902},[187],[148,1537,1140],{"className":1538},[1169],[148,1540,266],{"className":1541},[192,193],[148,1543,346],{"className":1544},[381],[148,1546],{"className":1547,"style":374},[373],[148,1549,1037],{"className":1550,"style":970},[192,193],[148,1552,346],{"className":1553},[381],[148,1555],{"className":1556,"style":374},[373],[148,1558,297],{"className":1559,"style":312},[192,193],[148,1561,1153],{"className":1562},[1194]," 形成一个直角三角形，而 ",[148,1565,1567,1605],{"className":1566},[151],[148,1568,1570],{"className":1569},[155],[157,1571,1572],{"xmlns":159},[161,1573,1574,1602],{},[164,1575,1576,1578,1584,1586,1592,1594,1600],{},[339,1577,1140],{"stretchy":1139},[1209,1579,1580,1582],{},[167,1581,266],{},[339,1583,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,1585,346],{"separator":179},[1209,1587,1588,1590],{},[167,1589,1037],{},[339,1591,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,1593,346],{"separator":179},[1209,1595,1596,1598],{},[167,1597,297],{},[339,1599,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,1601,1153],{"stretchy":1139},[171,1603,1604],{"encoding":173},"(x',y',z')",[148,1606,1608],{"className":1607,"ariaHidden":179},[178],[148,1609,1611,1614,1617,1649,1652,1655,1687,1690,1693,1725],{"className":1610},[183],[148,1612],{"className":1613,"style":1306},[187],[148,1615,1140],{"className":1616},[1169],[148,1618,1620,1623],{"className":1619},[192],[148,1621,266],{"className":1622},[192,193],[148,1624,1626],{"className":1625},[679],[148,1627,1629],{"className":1628},[683],[148,1630,1632],{"className":1631},[688],[148,1633,1635],{"className":1634,"style":1229},[692],[148,1636,1637,1640],{"style":1250},[148,1638],{"className":1639,"style":701},[700],[148,1641,1643],{"className":1642},[705,706,707,708],[148,1644,1646],{"className":1645},[192,708],[148,1647,1216],{"className":1648},[192,708],[148,1650,346],{"className":1651},[381],[148,1653],{"className":1654,"style":374},[373],[148,1656,1658,1661],{"className":1657},[192],[148,1659,1037],{"className":1660,"style":970},[192,193],[148,1662,1664],{"className":1663},[679],[148,1665,1667],{"className":1666},[683],[148,1668,1670],{"className":1669},[688],[148,1671,1673],{"className":1672,"style":1229},[692],[148,1674,1675,1678],{"style":1250},[148,1676],{"className":1677,"style":701},[700],[148,1679,1681],{"className":1680},[705,706,707,708],[148,1682,1684],{"className":1683},[192,708],[148,1685,1216],{"className":1686},[192,708],[148,1688,346],{"className":1689},[381],[148,1691],{"className":1692,"style":374},[373],[148,1694,1696,1699],{"className":1695},[192],[148,1697,297],{"className":1698,"style":312},[192,193],[148,1700,1702],{"className":1701},[679],[148,1703,1705],{"className":1704},[683],[148,1706,1708],{"className":1707},[688],[148,1709,1711],{"className":1710,"style":1229},[692],[148,1712,1713,1716],{"style":1250},[148,1714],{"className":1715,"style":701},[700],[148,1717,1719],{"className":1718},[705,706,707,708],[148,1720,1722],{"className":1721},[192,708],[148,1723,1216],{"className":1724},[192,708],[148,1726,1153],{"className":1727},[1194]," 形成一个相似的直角三角形。因此相对比例得以保持：",[148,1730,1733],{"className":1731},[1732],"katex-display",[148,1734,1736,1830],{"className":1735},[151],[148,1737,1739],{"className":1738},[155],[157,1740,1742],{"xmlns":159,"display":1741},"block",[161,1743,1744,1827],{},[1745,1746,1749,1791],"mtable",{"rowspacing":1747,"columnalign":1748,"columnspacing":1215},"0.25em","right left",[1750,1751,1752,1774],"mtr",{},[1753,1754,1755],"mtd",{},[1756,1757,1759],"mstyle",{"scriptlevel":1758,"displaystyle":179},"0",[1760,1761,1762,1768],"mfrac",{},[1209,1763,1764,1766],{},[167,1765,1037],{},[339,1767,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[1209,1769,1770,1772],{},[167,1771,297],{},[339,1773,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[1753,1775,1776],{},[1756,1777,1778],{"scriptlevel":1758,"displaystyle":179},[164,1779,1780,1782,1785],{},[164,1781],{},[339,1783,1784],{},"=",[1760,1786,1787,1789],{},[167,1788,1037],{},[167,1790,297],{},[1750,1792,1793,1803],{},[1753,1794,1795],{},[1756,1796,1797],{"scriptlevel":1758,"displaystyle":179},[1209,1798,1799,1801],{},[167,1800,1037],{},[339,1802,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[1753,1804,1805],{},[1756,1806,1807],{"scriptlevel":1758,"displaystyle":179},[164,1808,1809,1811,1813],{},[164,1810],{},[339,1812,1784],{},[1760,1814,1815,1825],{},[164,1816,1817,1819],{},[167,1818,1037],{},[1209,1820,1821,1823],{},[167,1822,297],{},[339,1824,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[167,1826,297],{},[171,1828,1829],{"encoding":173},"\\begin{aligned}\n\\frac{y'}{z'} &= \\frac{y}{z} \\\\\ny' &= \\frac{y z'}{z}\n\\end{aligned}",[148,1831,1833],{"className":1832,"ariaHidden":179},[178],[148,1834,1836,1840],{"className":1835},[183],[148,1837],{"className":1838,"style":1839},[187],"height:4.5298em;vertical-align:-2.0149em;",[148,1841,1843],{"className":1842},[192],[148,1844,1846,2056],{"className":1845},[1745],[148,1847,1850],{"className":1848},[1849],"col-align-r",[148,1851,1853,2047],{"className":1852},[683,684],[148,1854,1856,2044],{"className":1855},[688],[148,1857,1860,2001],{"className":1858,"style":1859},[692],"height:2.5149em;",[148,1861,1863,1867],{"style":1862},"top:-4.5149em;",[148,1864],{"className":1865,"style":1866},[700],"height:3.4289em;",[148,1868,1870],{"className":1869},[192],[148,1871,1873,1877,1998],{"className":1872},[192],[148,1874],{"className":1875},[1169,1876],"nulldelimiter",[148,1878,1880],{"className":1879},[1760],[148,1881,1883,1989],{"className":1882},[683,684],[148,1884,1886,1986],{"className":1885},[688],[148,1887,1890,1934,1945],{"className":1888,"style":1889},[692],"height:1.4289em;",[148,1891,1893,1897],{"style":1892},"top:-2.314em;",[148,1894],{"className":1895,"style":1896},[700],"height:3em;",[148,1898,1900],{"className":1899},[192],[148,1901,1903,1906],{"className":1902},[192],[148,1904,297],{"className":1905,"style":312},[192,193],[148,1907,1909],{"className":1908},[679],[148,1910,1912],{"className":1911},[683],[148,1913,1915],{"className":1914},[688],[148,1916,1919],{"className":1917,"style":1918},[692],"height:0.6779em;",[148,1920,1922,1925],{"style":1921},"top:-2.989em;margin-right:0.05em;",[148,1923],{"className":1924,"style":701},[700],[148,1926,1928],{"className":1927},[705,706,707,708],[148,1929,1931],{"className":1930},[192,708],[148,1932,1216],{"className":1933},[192,708],[148,1935,1937,1940],{"style":1936},"top:-3.23em;",[148,1938],{"className":1939,"style":1896},[700],[148,1941],{"className":1942,"style":1944},[1943],"frac-line","border-bottom-width:0.04em;",[148,1946,1948,1951],{"style":1947},"top:-3.677em;",[148,1949],{"className":1950,"style":1896},[700],[148,1952,1954],{"className":1953},[192],[148,1955,1957,1960],{"className":1956},[192],[148,1958,1037],{"className":1959,"style":970},[192,193],[148,1961,1963],{"className":1962},[679],[148,1964,1966],{"className":1965},[683],[148,1967,1969],{"className":1968},[688],[148,1970,1972],{"className":1971,"style":1229},[692],[148,1973,1974,1977],{"style":1250},[148,1975],{"className":1976,"style":701},[700],[148,1978,1980],{"className":1979},[705,706,707,708],[148,1981,1983],{"className":1982},[192,708],[148,1984,1216],{"className":1985},[192,708],[148,1987,716],{"className":1988},[715],[148,1990,1992],{"className":1991},[688],[148,1993,1996],{"className":1994,"style":1995},[692],"height:0.686em;",[148,1997],{},[148,1999],{"className":2000},[1194,1876],[148,2002,2004,2007],{"style":2003},"top:-2.1em;",[148,2005],{"className":2006,"style":1866},[700],[148,2008,2010],{"className":2009},[192],[148,2011,2013,2016],{"className":2012},[192],[148,2014,1037],{"className":2015,"style":970},[192,193],[148,2017,2019],{"className":2018},[679],[148,2020,2022],{"className":2021},[683],[148,2023,2025],{"className":2024},[688],[148,2026,2029],{"className":2027,"style":2028},[692],"height:0.8019em;",[148,2030,2032,2035],{"style":2031},"top:-3.113em;margin-right:0.05em;",[148,2033],{"className":2034,"style":701},[700],[148,2036,2038],{"className":2037},[705,706,707,708],[148,2039,2041],{"className":2040},[192,708],[148,2042,1216],{"className":2043},[192,708],[148,2045,716],{"className":2046},[715],[148,2048,2050],{"className":2049},[688],[148,2051,2054],{"className":2052,"style":2053},[692],"height:2.0149em;",[148,2055],{},[148,2057,2060],{"className":2058},[2059],"col-align-l",[148,2061,2063,2271],{"className":2062},[683,684],[148,2064,2066,2268],{"className":2065},[688],[148,2067,2069,2154],{"className":2068,"style":1859},[692],[148,2070,2071,2074],{"style":1862},[148,2072],{"className":2073,"style":1866},[700],[148,2075,2077,2080,2084,2088,2091],{"className":2076},[192],[148,2078],{"className":2079},[192],[148,2081],{"className":2082,"style":2083},[373],"margin-right:0.2778em;",[148,2085,1784],{"className":2086},[2087],"mrel",[148,2089],{"className":2090,"style":2083},[373],[148,2092,2094,2097,2151],{"className":2093},[192],[148,2095],{"className":2096},[1169,1876],[148,2098,2100],{"className":2099},[1760],[148,2101,2103,2143],{"className":2102},[683,684],[148,2104,2106,2140],{"className":2105},[688],[148,2107,2110,2121,2129],{"className":2108,"style":2109},[692],"height:1.1076em;",[148,2111,2112,2115],{"style":1892},[148,2113],{"className":2114,"style":1896},[700],[148,2116,2118],{"className":2117},[192],[148,2119,297],{"className":2120,"style":312},[192,193],[148,2122,2123,2126],{"style":1936},[148,2124],{"className":2125,"style":1896},[700],[148,2127],{"className":2128,"style":1944},[1943],[148,2130,2131,2134],{"style":1947},[148,2132],{"className":2133,"style":1896},[700],[148,2135,2137],{"className":2136},[192],[148,2138,1037],{"className":2139,"style":970},[192,193],[148,2141,716],{"className":2142},[715],[148,2144,2146],{"className":2145},[688],[148,2147,2149],{"className":2148,"style":1995},[692],[148,2150],{},[148,2152],{"className":2153},[1194,1876],[148,2155,2156,2159],{"style":2003},[148,2157],{"className":2158,"style":1866},[700],[148,2160,2162,2165,2168,2171,2174],{"className":2161},[192],[148,2163],{"className":2164},[192],[148,2166],{"className":2167,"style":2083},[373],[148,2169,1784],{"className":2170},[2087],[148,2172],{"className":2173,"style":2083},[373],[148,2175,2177,2180,2265],{"className":2176},[192],[148,2178],{"className":2179},[1169,1876],[148,2181,2183],{"className":2182},[1760],[148,2184,2186,2257],{"className":2185},[683,684],[148,2187,2189,2254],{"className":2188},[688],[148,2190,2192,2203,2211],{"className":2191,"style":1889},[692],[148,2193,2194,2197],{"style":1892},[148,2195],{"className":2196,"style":1896},[700],[148,2198,2200],{"className":2199},[192],[148,2201,297],{"className":2202,"style":312},[192,193],[148,2204,2205,2208],{"style":1936},[148,2206],{"className":2207,"style":1896},[700],[148,2209],{"className":2210,"style":1944},[1943],[148,2212,2213,2216],{"style":1947},[148,2214],{"className":2215,"style":1896},[700],[148,2217,2219,2222],{"className":2218},[192],[148,2220,1037],{"className":2221,"style":970},[192,193],[148,2223,2225,2228],{"className":2224},[192],[148,2226,297],{"className":2227,"style":312},[192,193],[148,2229,2231],{"className":2230},[679],[148,2232,2234],{"className":2233},[683],[148,2235,2237],{"className":2236},[688],[148,2238,2240],{"className":2239,"style":1229},[692],[148,2241,2242,2245],{"style":1250},[148,2243],{"className":2244,"style":701},[700],[148,2246,2248],{"className":2247},[705,706,707,708],[148,2249,2251],{"className":2250},[192,708],[148,2252,1216],{"className":2253},[192,708],[148,2255,716],{"className":2256},[715],[148,2258,2260],{"className":2259},[688],[148,2261,2263],{"className":2262,"style":1995},[692],[148,2264],{},[148,2266],{"className":2267},[1194,1876],[148,2269,716],{"className":2270},[715],[148,2272,2274],{"className":2273},[688],[148,2275,2277],{"className":2276,"style":2053},[692],[148,2278],{},[13,2280,2281,2282,2343,2344,2405,2406,2479],{},"所以要将 3D 坐标投影到 2D，用屏幕距离 ",[148,2283,2285,2302],{"className":2284},[151],[148,2286,2288],{"className":2287},[155],[157,2289,2290],{"xmlns":159},[161,2291,2292,2300],{},[164,2293,2294],{},[1209,2295,2296,2298],{},[167,2297,297],{},[339,2299,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[171,2301,1219],{"encoding":173},[148,2303,2305],{"className":2304,"ariaHidden":179},[178],[148,2306,2308,2311],{"className":2307},[183],[148,2309],{"className":2310,"style":1229},[187],[148,2312,2314,2317],{"className":2313},[192],[148,2315,297],{"className":2316,"style":312},[192,193],[148,2318,2320],{"className":2319},[679],[148,2321,2323],{"className":2322},[683],[148,2324,2326],{"className":2325},[688],[148,2327,2329],{"className":2328,"style":1229},[692],[148,2330,2331,2334],{"style":1250},[148,2332],{"className":2333,"style":701},[700],[148,2335,2337],{"className":2336},[705,706,707,708],[148,2338,2340],{"className":2339},[192,708],[148,2341,1216],{"className":2342},[192,708]," 来缩放坐标。由于 ",[148,2345,2347,2364],{"className":2346},[151],[148,2348,2350],{"className":2349},[155],[157,2351,2352],{"xmlns":159},[161,2353,2354,2362],{},[164,2355,2356],{},[1209,2357,2358,2360],{},[167,2359,297],{},[339,2361,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[171,2363,1219],{"encoding":173},[148,2365,2367],{"className":2366,"ariaHidden":179},[178],[148,2368,2370,2373],{"className":2369},[183],[148,2371],{"className":2372,"style":1229},[187],[148,2374,2376,2379],{"className":2375},[192],[148,2377,297],{"className":2378,"style":312},[192,193],[148,2380,2382],{"className":2381},[679],[148,2383,2385],{"className":2384},[683],[148,2386,2388],{"className":2387},[688],[148,2389,2391],{"className":2390,"style":1229},[692],[148,2392,2393,2396],{"style":1250},[148,2394],{"className":2395,"style":701},[700],[148,2397,2399],{"className":2398},[705,706,707,708],[148,2400,2402],{"className":2401},[192,708],[148,2403,1216],{"className":2404},[192,708]," 是一个固定常数，而不是一个功能性的坐标，可以重命名为 ",[148,2407,2409,2428],{"className":2408},[151],[148,2410,2412],{"className":2411},[155],[157,2413,2414],{"xmlns":159},[161,2415,2416,2425],{},[164,2417,2418],{},[631,2419,2420,2423],{},[167,2421,2422],{},"K",[637,2424,649],{},[171,2426,2427],{"encoding":173},"K_1",[148,2429,2431],{"className":2430,"ariaHidden":179},[178],[148,2432,2434,2437],{"className":2433},[183],[148,2435],{"className":2436,"style":668},[187],[148,2438,2440,2444],{"className":2439},[192],[148,2441,2422],{"className":2442,"style":2443},[192,193],"margin-right:0.0715em;",[148,2445,2447],{"className":2446},[679],[148,2448,2450,2471],{"className":2449},[683,684],[148,2451,2453,2468],{"className":2452},[688],[148,2454,2456],{"className":2455,"style":693},[692],[148,2457,2459,2462],{"style":2458},"top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;",[148,2460],{"className":2461,"style":701},[700],[148,2463,2465],{"className":2464},[705,706,707,708],[148,2466,649],{"className":2467},[192,708],[148,2469,716],{"className":2470},[715],[148,2472,2474],{"className":2473},[688],[148,2475,2477],{"className":2476,"style":723},[692],[148,2478],{},"，所以投影方程变为：",[148,2481,2483],{"className":2482},[1732],[148,2484,2486,2554],{"className":2485},[151],[148,2487,2489],{"className":2488},[155],[157,2490,2491],{"xmlns":159,"display":1741},[161,2492,2493,2551],{},[164,2494,2495,2497,2503,2505,2511,2513,2515],{},[339,2496,1140],{"stretchy":1139},[1209,2498,2499,2501],{},[167,2500,266],{},[339,2502,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,2504,346],{"separator":179},[1209,2506,2507,2509],{},[167,2508,1037],{},[339,2510,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,2512,1153],{"stretchy":1139},[339,2514,1784],{},[164,2516,2517,2519,2533,2535,2549],{},[339,2518,1140],{"fence":179},[1760,2520,2521,2531],{},[164,2522,2523,2529],{},[631,2524,2525,2527],{},[167,2526,2422],{},[637,2528,649],{},[167,2530,266],{},[167,2532,297],{},[339,2534,346],{"separator":179},[1760,2536,2537,2547],{},[164,2538,2539,2545],{},[631,2540,2541,2543],{},[167,2542,2422],{},[637,2544,649],{},[167,2546,1037],{},[167,2548,297],{},[339,2550,1153],{"fence":179},[171,2552,2553],{"encoding":173},"(x',y') = \\left(\\frac{K_1 x}{z}, \\frac{K_1 y}{z}\\right)",[148,2555,2557,2649],{"className":2556,"ariaHidden":179},[178],[148,2558,2560,2564,2567,2599,2602,2605,2637,2640,2643,2646],{"className":2559},[183],[148,2561],{"className":2562,"style":2563},[187],"height:1.0519em;vertical-align:-0.25em;",[148,2565,1140],{"className":2566},[1169],[148,2568,2570,2573],{"className":2569},[192],[148,2571,266],{"className":2572},[192,193],[148,2574,2576],{"className":2575},[679],[148,2577,2579],{"className":2578},[683],[148,2580,2582],{"className":2581},[688],[148,2583,2585],{"className":2584,"style":2028},[692],[148,2586,2587,2590],{"style":2031},[148,2588],{"className":2589,"style":701},[700],[148,2591,2593],{"className":2592},[705,706,707,708],[148,2594,2596],{"className":2595},[192,708],[148,2597,1216],{"className":2598},[192,708],[148,2600,346],{"className":2601},[381],[148,2603],{"className":2604,"style":374},[373],[148,2606,2608,2611],{"className":2607},[192],[148,2609,1037],{"className":2610,"style":970},[192,193],[148,2612,2614],{"className":2613},[679],[148,2615,2617],{"className":2616},[683],[148,2618,2620],{"className":2619},[688],[148,2621,2623],{"className":2622,"style":2028},[692],[148,2624,2625,2628],{"style":2031},[148,2626],{"className":2627,"style":701},[700],[148,2629,2631],{"className":2630},[705,706,707,708],[148,2632,2634],{"className":2633},[192,708],[148,2635,1216],{"className":2636},[192,708],[148,2638,1153],{"className":2639},[1194],[148,2641],{"className":2642,"style":2083},[373],[148,2644,1784],{"className":2645},[2087],[148,2647],{"className":2648,"style":2083},[373],[148,2650,2652,2656],{"className":2651},[183],[148,2653],{"className":2654,"style":2655},[187],"height:2.4em;vertical-align:-0.95em;",[148,2657,2660,2669,2772,2775,2778,2880],{"className":2658},[2659],"minner",[148,2661,2665],{"className":2662,"style":2664},[1169,2663],"delimcenter","top:0em;",[148,2666,1140],{"className":2667},[2668,707],"delimsizing",[148,2670,2672,2675,2769],{"className":2671},[192],[148,2673],{"className":2674},[1169,1876],[148,2676,2678],{"className":2677},[1760],[148,2679,2681,2761],{"className":2680},[683,684],[148,2682,2684,2758],{"className":2683},[688],[148,2685,2688,2699,2707],{"className":2686,"style":2687},[692],"height:1.3603em;",[148,2689,2690,2693],{"style":1892},[148,2691],{"className":2692,"style":1896},[700],[148,2694,2696],{"className":2695},[192],[148,2697,297],{"className":2698,"style":312},[192,193],[148,2700,2701,2704],{"style":1936},[148,2702],{"className":2703,"style":1896},[700],[148,2705],{"className":2706,"style":1944},[1943],[148,2708,2709,2712],{"style":1947},[148,2710],{"className":2711,"style":1896},[700],[148,2713,2715,2755],{"className":2714},[192],[148,2716,2718,2721],{"className":2717},[192],[148,2719,2422],{"className":2720,"style":2443},[192,193],[148,2722,2724],{"className":2723},[679],[148,2725,2727,2747],{"className":2726},[683,684],[148,2728,2730,2744],{"className":2729},[688],[148,2731,2733],{"className":2732,"style":693},[692],[148,2734,2735,2738],{"style":2458},[148,2736],{"className":2737,"style":701},[700],[148,2739,2741],{"className":2740},[705,706,707,708],[148,2742,649],{"className":2743},[192,708],[148,2745,716],{"className":2746},[715],[148,2748,2750],{"className":2749},[688],[148,2751,2753],{"className":2752,"style":723},[692],[148,2754],{},[148,2756,266],{"className":2757},[192,193],[148,2759,716],{"className":2760},[715],[148,2762,2764],{"className":2763},[688],[148,2765,2767],{"className":2766,"style":1995},[692],[148,2768],{},[148,2770],{"className":2771},[1194,1876],[148,2773,346],{"className":2774},[381],[148,2776],{"className":2777,"style":374},[373],[148,2779,2781,2784,2877],{"className":2780},[192],[148,2782],{"className":2783},[1169,1876],[148,2785,2787],{"className":2786},[1760],[148,2788,2790,2869],{"className":2789},[683,684],[148,2791,2793,2866],{"className":2792},[688],[148,2794,2796,2807,2815],{"className":2795,"style":2687},[692],[148,2797,2798,2801],{"style":1892},[148,2799],{"className":2800,"style":1896},[700],[148,2802,2804],{"className":2803},[192],[148,2805,297],{"className":2806,"style":312},[192,193],[148,2808,2809,2812],{"style":1936},[148,2810],{"className":2811,"style":1896},[700],[148,2813],{"className":2814,"style":1944},[1943],[148,2816,2817,2820],{"style":1947},[148,2818],{"className":2819,"style":1896},[700],[148,2821,2823,2863],{"className":2822},[192],[148,2824,2826,2829],{"className":2825},[192],[148,2827,2422],{"className":2828,"style":2443},[192,193],[148,2830,2832],{"className":2831},[679],[148,2833,2835,2855],{"className":2834},[683,684],[148,2836,2838,2852],{"className":2837},[688],[148,2839,2841],{"className":2840,"style":693},[692],[148,2842,2843,2846],{"style":2458},[148,2844],{"className":2845,"style":701},[700],[148,2847,2849],{"className":2848},[705,706,707,708],[148,2850,649],{"className":2851},[192,708],[148,2853,716],{"className":2854},[715],[148,2856,2858],{"className":2857},[688],[148,2859,2861],{"className":2860,"style":723},[692],[148,2862],{},[148,2864,1037],{"className":2865,"style":970},[192,193],[148,2867,716],{"className":2868},[715],[148,2870,2872],{"className":2871},[688],[148,2873,2875],{"className":2874,"style":1995},[692],[148,2876],{},[148,2878],{"className":2879},[1194,1876],[148,2881,2883],{"className":2882,"style":2664},[1194,2663],[148,2884,1153],{"className":2885},[2668,707],[13,2887,2888,2957,2958,3027,3028,102,3080,3132,3133,3220,3221,3326,3327,3420],{},[148,2889,2891,2908],{"className":2890},[151],[148,2892,2894],{"className":2893},[155],[157,2895,2896],{"xmlns":159},[161,2897,2898,2906],{},[164,2899,2900],{},[631,2901,2902,2904],{},[167,2903,2422],{},[637,2905,649],{},[171,2907,2427],{"encoding":173},[148,2909,2911],{"className":2910,"ariaHidden":179},[178],[148,2912,2914,2917],{"className":2913},[183],[148,2915],{"className":2916,"style":668},[187],[148,2918,2920,2923],{"className":2919},[192],[148,2921,2422],{"className":2922,"style":2443},[192,193],[148,2924,2926],{"className":2925},[679],[148,2927,2929,2949],{"className":2928},[683,684],[148,2930,2932,2946],{"className":2931},[688],[148,2933,2935],{"className":2934,"style":693},[692],[148,2936,2937,2940],{"style":2458},[148,2938],{"className":2939,"style":701},[700],[148,2941,2943],{"className":2942},[705,706,707,708],[148,2944,649],{"className":2945},[192,708],[148,2947,716],{"className":2948},[715],[148,2950,2952],{"className":2951},[688],[148,2953,2955],{"className":2954,"style":723},[692],[148,2956],{}," 可以根据想要在 2D 窗口中显示的视野来自由选择。例如，如果有一个 100×100 的像素窗口，那么视图中心在（50,50）；如果想看到一个在 3D 空间中宽 10 个单位、距观察者 5 个单位的物体，那么 ",[148,2959,2961,2978],{"className":2960},[151],[148,2962,2964],{"className":2963},[155],[157,2965,2966],{"xmlns":159},[161,2967,2968,2976],{},[164,2969,2970],{},[631,2971,2972,2974],{},[167,2973,2422],{},[637,2975,649],{},[171,2977,2427],{"encoding":173},[148,2979,2981],{"className":2980,"ariaHidden":179},[178],[148,2982,2984,2987],{"className":2983},[183],[148,2985],{"className":2986,"style":668},[187],[148,2988,2990,2993],{"className":2989},[192],[148,2991,2422],{"className":2992,"style":2443},[192,193],[148,2994,2996],{"className":2995},[679],[148,2997,2999,3019],{"className":2998},[683,684],[148,3000,3002,3016],{"className":3001},[688],[148,3003,3005],{"className":3004,"style":693},[692],[148,3006,3007,3010],{"style":2458},[148,3008],{"className":3009,"style":701},[700],[148,3011,3013],{"className":3012},[705,706,707,708],[148,3014,649],{"className":3015},[192,708],[148,3017,716],{"className":3018},[715],[148,3020,3022],{"className":3021},[688],[148,3023,3025],{"className":3024,"style":723},[692],[148,3026],{}," 应该选择使得点 ",[148,3029,3031,3050],{"className":3030},[151],[148,3032,3034],{"className":3033},[155],[157,3035,3036],{"xmlns":159},[161,3037,3038,3047],{},[164,3039,3040,3042,3044],{},[167,3041,266],{},[339,3043,1784],{},[637,3045,3046],{},"10",[171,3048,3049],{"encoding":173},"x=10",[148,3051,3053,3071],{"className":3052,"ariaHidden":179},[178],[148,3054,3056,3059,3062,3065,3068],{"className":3055},[183],[148,3057],{"className":3058,"style":278},[187],[148,3060,266],{"className":3061},[192,193],[148,3063],{"className":3064,"style":2083},[373],[148,3066,1784],{"className":3067},[2087],[148,3069],{"className":3070,"style":2083},[373],[148,3072,3074,3077],{"className":3073},[183],[148,3075],{"className":3076,"style":856},[187],[148,3078,3046],{"className":3079},[192],[148,3081,3083,3102],{"className":3082},[151],[148,3084,3086],{"className":3085},[155],[157,3087,3088],{"xmlns":159},[161,3089,3090,3099],{},[164,3091,3092,3094,3096],{},[167,3093,297],{},[339,3095,1784],{},[637,3097,3098],{},"5",[171,3100,3101],{"encoding":173},"z=5",[148,3103,3105,3123],{"className":3104,"ariaHidden":179},[178],[148,3106,3108,3111,3114,3117,3120],{"className":3107},[183],[148,3109],{"className":3110,"style":278},[187],[148,3112,297],{"className":3113,"style":312},[192,193],[148,3115],{"className":3116,"style":2083},[373],[148,3118,1784],{"className":3119},[2087],[148,3121],{"className":3122,"style":2083},[373],[148,3124,3126,3129],{"className":3125},[183],[148,3127],{"className":3128,"style":856},[187],[148,3130,3098],{"className":3131},[192]," 的投影仍在屏幕上，即 ",[148,3134,3136,3160],{"className":3135},[151],[148,3137,3139],{"className":3138},[155],[157,3140,3141],{"xmlns":159},[161,3142,3143,3157],{},[164,3144,3145,3151,3154],{},[1209,3146,3147,3149],{},[167,3148,266],{},[339,3150,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,3152,3153],{},"\u003C",[637,3155,3156],{},"50",[171,3158,3159],{"encoding":173},"x' \u003C 50",[148,3161,3163,3211],{"className":3162,"ariaHidden":179},[178],[148,3164,3166,3170,3202,3205,3208],{"className":3165},[183],[148,3167],{"className":3168,"style":3169},[187],"height:0.791em;vertical-align:-0.0391em;",[148,3171,3173,3176],{"className":3172},[192],[148,3174,266],{"className":3175},[192,193],[148,3177,3179],{"className":3178},[679],[148,3180,3182],{"className":3181},[683],[148,3183,3185],{"className":3184},[688],[148,3186,3188],{"className":3187,"style":1229},[692],[148,3189,3190,3193],{"style":1250},[148,3191],{"className":3192,"style":701},[700],[148,3194,3196],{"className":3195},[705,706,707,708],[148,3197,3199],{"className":3198},[192,708],[148,3200,1216],{"className":3201},[192,708],[148,3203],{"className":3204,"style":2083},[373],[148,3206,3153],{"className":3207},[2087],[148,3209],{"className":3210,"style":2083},[373],[148,3212,3214,3217],{"className":3213},[183],[148,3215],{"className":3216,"style":856},[187],[148,3218,3156],{"className":3219},[192],"：",[148,3222,3224,3252],{"className":3223},[151],[148,3225,3227],{"className":3226},[155],[157,3228,3229],{"xmlns":159},[161,3230,3231,3249],{},[164,3232,3233,3235,3241,3243,3245,3247],{},[637,3234,3046],{},[631,3236,3237,3239],{},[167,3238,2422],{},[637,3240,649],{},[167,3242,887],{"mathvariant":886},[637,3244,3098],{},[339,3246,3153],{},[637,3248,3156],{},[171,3250,3251],{"encoding":173},"10K_1\u002F5 \u003C 50",[148,3253,3255,3317],{"className":3254,"ariaHidden":179},[178],[148,3256,3258,3261,3264,3304,3308,3311,3314],{"className":3257},[183],[148,3259],{"className":3260,"style":902},[187],[148,3262,3046],{"className":3263},[192],[148,3265,3267,3270],{"className":3266},[192],[148,3268,2422],{"className":3269,"style":2443},[192,193],[148,3271,3273],{"className":3272},[679],[148,3274,3276,3296],{"className":3275},[683,684],[148,3277,3279,3293],{"className":3278},[688],[148,3280,3282],{"className":3281,"style":693},[692],[148,3283,3284,3287],{"style":2458},[148,3285],{"className":3286,"style":701},[700],[148,3288,3290],{"className":3289},[705,706,707,708],[148,3291,649],{"className":3292},[192,708],[148,3294,716],{"className":3295},[715],[148,3297,3299],{"className":3298},[688],[148,3300,3302],{"className":3301,"style":723},[692],[148,3303],{},[148,3305,3307],{"className":3306},[192],"\u002F5",[148,3309],{"className":3310,"style":2083},[373],[148,3312,3153],{"className":3313},[2087],[148,3315],{"className":3316,"style":2083},[373],[148,3318,3320,3323],{"className":3319},[183],[148,3321],{"className":3322,"style":856},[187],[148,3324,3156],{"className":3325},[192],"，即 ",[148,3328,3330,3353],{"className":3329},[151],[148,3331,3333],{"className":3332},[155],[157,3334,3335],{"xmlns":159},[161,3336,3337,3350],{},[164,3338,3339,3345,3347],{},[631,3340,3341,3343],{},[167,3342,2422],{},[637,3344,649],{},[339,3346,3153],{},[637,3348,3349],{},"25",[171,3351,3352],{"encoding":173},"K_1 \u003C 25",[148,3354,3356,3411],{"className":3355,"ariaHidden":179},[178],[148,3357,3359,3362,3402,3405,3408],{"className":3358},[183],[148,3360],{"className":3361,"style":668},[187],[148,3363,3365,3368],{"className":3364},[192],[148,3366,2422],{"className":3367,"style":2443},[192,193],[148,3369,3371],{"className":3370},[679],[148,3372,3374,3394],{"className":3373},[683,684],[148,3375,3377,3391],{"className":3376},[688],[148,3378,3380],{"className":3379,"style":693},[692],[148,3381,3382,3385],{"style":2458},[148,3383],{"className":3384,"style":701},[700],[148,3386,3388],{"className":3387},[705,706,707,708],[148,3389,649],{"className":3390},[192,708],[148,3392,716],{"className":3393},[715],[148,3395,3397],{"className":3396},[688],[148,3398,3400],{"className":3399,"style":723},[692],[148,3401],{},[148,3403],{"className":3404,"style":2083},[373],[148,3406,3153],{"className":3407},[2087],[148,3409],{"className":3410,"style":2083},[373],[148,3412,3414,3417],{"className":3413},[183],[148,3415],{"className":3416,"style":856},[187],[148,3418,3349],{"className":3419},[192],"。",[13,3422,3423,3424,3541,3542,3547,3548,3714],{},"当绘制一堆点时，可能会在相同的 ",[148,3425,3427,3456],{"className":3426},[151],[148,3428,3430],{"className":3429},[155],[157,3431,3432],{"xmlns":159},[161,3433,3434,3454],{},[164,3435,3436,3438,3444,3446,3452],{},[339,3437,1140],{"stretchy":1139},[1209,3439,3440,3442],{},[167,3441,266],{},[339,3443,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,3445,346],{"separator":179},[1209,3447,3448,3450],{},[167,3449,1037],{},[339,3451,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,3453,1153],{"stretchy":1139},[171,3455,1296],{"encoding":173},[148,3457,3459],{"className":3458,"ariaHidden":179},[178],[148,3460,3462,3465,3468,3500,3503,3506,3538],{"className":3461},[183],[148,3463],{"className":3464,"style":1306},[187],[148,3466,1140],{"className":3467},[1169],[148,3469,3471,3474],{"className":3470},[192],[148,3472,266],{"className":3473},[192,193],[148,3475,3477],{"className":3476},[679],[148,3478,3480],{"className":3479},[683],[148,3481,3483],{"className":3482},[688],[148,3484,3486],{"className":3485,"style":1229},[692],[148,3487,3488,3491],{"style":1250},[148,3489],{"className":3490,"style":701},[700],[148,3492,3494],{"className":3493},[705,706,707,708],[148,3495,3497],{"className":3496},[192,708],[148,3498,1216],{"className":3499},[192,708],[148,3501,346],{"className":3502},[381],[148,3504],{"className":3505,"style":374},[373],[148,3507,3509,3512],{"className":3508},[192],[148,3510,1037],{"className":3511,"style":970},[192,193],[148,3513,3515],{"className":3514},[679],[148,3516,3518],{"className":3517},[683],[148,3519,3521],{"className":3520},[688],[148,3522,3524],{"className":3523,"style":1229},[692],[148,3525,3526,3529],{"style":1250},[148,3527],{"className":3528,"style":701},[700],[148,3530,3532],{"className":3531},[705,706,707,708],[148,3533,3535],{"className":3534},[192,708],[148,3536,1216],{"className":3537},[192,708],[148,3539,1153],{"className":3540},[1194]," 位置绘制不同深度的点，因此需要维护一个 ",[17,3543,3546],{"href":3544,"rel":3545},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FZ-buffering",[21],"Z 缓冲区"," 记录每个屏幕位置当前最靠前的深度。如果需要绘制某个位置，首先检查是否在已绘制内容的前面。在这个程序里，实际比较的是 ",[148,3549,3551,3581],{"className":3550},[151],[148,3552,3554],{"className":3553},[155],[157,3555,3556],{"xmlns":159},[161,3557,3558,3578],{},[164,3559,3560,3570,3572],{},[1209,3561,3562,3564],{},[167,3563,297],{},[164,3565,3566,3568],{},[339,3567,942],{},[637,3569,649],{},[339,3571,1784],{},[1760,3573,3574,3576],{},[637,3575,649],{},[167,3577,297],{},[171,3579,3580],{"encoding":173},"z^{-1} = \\frac{1}{z}",[148,3582,3584,3635],{"className":3583,"ariaHidden":179},[178],[148,3585,3587,3591,3626,3629,3632],{"className":3586},[183],[148,3588],{"className":3589,"style":3590},[187],"height:0.8141em;",[148,3592,3594,3597],{"className":3593},[192],[148,3595,297],{"className":3596,"style":312},[192,193],[148,3598,3600],{"className":3599},[679],[148,3601,3603],{"className":3602},[683],[148,3604,3606],{"className":3605},[688],[148,3607,3609],{"className":3608,"style":3590},[692],[148,3610,3611,3614],{"style":1250},[148,3612],{"className":3613,"style":701},[700],[148,3615,3617],{"className":3616},[705,706,707,708],[148,3618,3620,3623],{"className":3619},[192,708],[148,3621,942],{"className":3622},[192,708],[148,3624,649],{"className":3625},[192,708],[148,3627],{"className":3628,"style":2083},[373],[148,3630,1784],{"className":3631},[2087],[148,3633],{"className":3634,"style":2083},[373],[148,3636,3638,3642],{"className":3637},[183],[148,3639],{"className":3640,"style":3641},[187],"height:1.1901em;vertical-align:-0.345em;",[148,3643,3645,3648,3711],{"className":3644},[192],[148,3646],{"className":3647},[1169,1876],[148,3649,3651],{"className":3650},[1760],[148,3652,3654,3702],{"className":3653},[683,684],[148,3655,3657,3699],{"className":3656},[688],[148,3658,3661,3676,3684],{"className":3659,"style":3660},[692],"height:0.8451em;",[148,3662,3664,3667],{"style":3663},"top:-2.655em;",[148,3665],{"className":3666,"style":1896},[700],[148,3668,3670],{"className":3669},[705,706,707,708],[148,3671,3673],{"className":3672},[192,708],[148,3674,297],{"className":3675,"style":312},[192,193,708],[148,3677,3678,3681],{"style":1936},[148,3679],{"className":3680,"style":1896},[700],[148,3682],{"className":3683,"style":1944},[1943],[148,3685,3687,3690],{"style":3686},"top:-3.394em;",[148,3688],{"className":3689,"style":1896},[700],[148,3691,3693],{"className":3692},[705,706,707,708],[148,3694,3696],{"className":3695},[192,708],[148,3697,649],{"className":3698},[192,708],[148,3700,716],{"className":3701},[715],[148,3703,3705],{"className":3704},[688],[148,3706,3709],{"className":3707,"style":3708},[692],"height:0.345em;",[148,3710],{},[148,3712],{"className":3713},[1194,1876],"，这样很方便，因为：",[93,3716,3717],{"type":95},[3718,3719,3720,3815,4112],"ul",{},[3721,3722,3723,3814],"li",{},[148,3724,3726,3752],{"className":3725},[151],[148,3727,3729],{"className":3728},[155],[157,3730,3731],{"xmlns":159},[161,3732,3733,3749],{},[164,3734,3735,3745,3747],{},[1209,3736,3737,3739],{},[167,3738,297],{},[164,3740,3741,3743],{},[339,3742,942],{},[637,3744,649],{},[339,3746,1784],{},[637,3748,1758],{},[171,3750,3751],{"encoding":173},"z^{-1} = 0",[148,3753,3755,3805],{"className":3754,"ariaHidden":179},[178],[148,3756,3758,3761,3796,3799,3802],{"className":3757},[183],[148,3759],{"className":3760,"style":3590},[187],[148,3762,3764,3767],{"className":3763},[192],[148,3765,297],{"className":3766,"style":312},[192,193],[148,3768,3770],{"className":3769},[679],[148,3771,3773],{"className":3772},[683],[148,3774,3776],{"className":3775},[688],[148,3777,3779],{"className":3778,"style":3590},[692],[148,3780,3781,3784],{"style":1250},[148,3782],{"className":3783,"style":701},[700],[148,3785,3787],{"className":3786},[705,706,707,708],[148,3788,3790,3793],{"className":3789},[192,708],[148,3791,942],{"className":3792},[192,708],[148,3794,649],{"className":3795},[192,708],[148,3797],{"className":3798,"style":2083},[373],[148,3800,1784],{"className":3801},[2087],[148,3803],{"className":3804,"style":2083},[373],[148,3806,3808,3811],{"className":3807},[183],[148,3809],{"className":3810,"style":856},[187],[148,3812,1758],{"className":3813},[192]," 对应无限深度，所以可以将 Z 缓冲区预初始化为 0，让背景在无限远处",[3721,3816,3817,3818,1022,3880,3943,3944,4013,4014,4082,4083,4111],{},"可以在计算 ",[148,3819,3821,3839],{"className":3820},[151],[148,3822,3824],{"className":3823},[155],[157,3825,3826],{"xmlns":159},[161,3827,3828,3836],{},[164,3829,3830],{},[1209,3831,3832,3834],{},[167,3833,266],{},[339,3835,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[171,3837,3838],{"encoding":173},"x'",[148,3840,3842],{"className":3841,"ariaHidden":179},[178],[148,3843,3845,3848],{"className":3844},[183],[148,3846],{"className":3847,"style":1229},[187],[148,3849,3851,3854],{"className":3850},[192],[148,3852,266],{"className":3853},[192,193],[148,3855,3857],{"className":3856},[679],[148,3858,3860],{"className":3859},[683],[148,3861,3863],{"className":3862},[688],[148,3864,3866],{"className":3865,"style":1229},[692],[148,3867,3868,3871],{"style":1250},[148,3869],{"className":3870,"style":701},[700],[148,3872,3874],{"className":3873},[705,706,707,708],[148,3875,3877],{"className":3876},[192,708],[148,3878,1216],{"className":3879},[192,708],[148,3881,3883,3901],{"className":3882},[151],[148,3884,3886],{"className":3885},[155],[157,3887,3888],{"xmlns":159},[161,3889,3890,3898],{},[164,3891,3892],{},[1209,3893,3894,3896],{},[167,3895,1037],{},[339,3897,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[171,3899,3900],{"encoding":173},"y'",[148,3902,3904],{"className":3903,"ariaHidden":179},[178],[148,3905,3907,3911],{"className":3906},[183],[148,3908],{"className":3909,"style":3910},[187],"height:0.9463em;vertical-align:-0.1944em;",[148,3912,3914,3917],{"className":3913},[192],[148,3915,1037],{"className":3916,"style":970},[192,193],[148,3918,3920],{"className":3919},[679],[148,3921,3923],{"className":3922},[683],[148,3924,3926],{"className":3925},[688],[148,3927,3929],{"className":3928,"style":1229},[692],[148,3930,3931,3934],{"style":1250},[148,3932],{"className":3933,"style":701},[700],[148,3935,3937],{"className":3936},[705,706,707,708],[148,3938,3940],{"className":3939},[192,708],[148,3941,1216],{"className":3942},[192,708]," 时重用 ",[148,3945,3947,3969],{"className":3946},[151],[148,3948,3950],{"className":3949},[155],[157,3951,3952],{"xmlns":159},[161,3953,3954,3966],{},[164,3955,3956],{},[1209,3957,3958,3960],{},[167,3959,297],{},[164,3961,3962,3964],{},[339,3963,942],{},[637,3965,649],{},[171,3967,3968],{"encoding":173},"z^{-1}",[148,3970,3972],{"className":3971,"ariaHidden":179},[178],[148,3973,3975,3978],{"className":3974},[183],[148,3976],{"className":3977,"style":3590},[187],[148,3979,3981,3984],{"className":3980},[192],[148,3982,297],{"className":3983,"style":312},[192,193],[148,3985,3987],{"className":3986},[679],[148,3988,3990],{"className":3989},[683],[148,3991,3993],{"className":3992},[688],[148,3994,3996],{"className":3995,"style":3590},[692],[148,3997,3998,4001],{"style":1250},[148,3999],{"className":4000,"style":701},[700],[148,4002,4004],{"className":4003},[705,706,707,708],[148,4005,4007,4010],{"className":4006},[192,708],[148,4008,942],{"className":4009},[192,708],[148,4011,649],{"className":4012},[192,708],"：除法一次然后乘以 ",[148,4015,4017,4038],{"className":4016},[151],[148,4018,4020],{"className":4019},[155],[157,4021,4022],{"xmlns":159},[161,4023,4024,4036],{},[164,4025,4026],{},[1209,4027,4028,4030],{},[167,4029,297],{},[164,4031,4032,4034],{},[339,4033,942],{},[637,4035,649],{},[171,4037,3968],{"encoding":173},[148,4039,4041],{"className":4040,"ariaHidden":179},[178],[148,4042,4044,4047],{"className":4043},[183],[148,4045],{"className":4046,"style":3590},[187],[148,4048,4050,4053],{"className":4049},[192],[148,4051,297],{"className":4052,"style":312},[192,193],[148,4054,4056],{"className":4055},[679],[148,4057,4059],{"className":4058},[683],[148,4060,4062],{"className":4061},[688],[148,4063,4065],{"className":4064,"style":3590},[692],[148,4066,4067,4070],{"style":1250},[148,4068],{"className":4069,"style":701},[700],[148,4071,4073],{"className":4072},[705,706,707,708],[148,4074,4076,4079],{"className":4075},[192,708],[148,4077,942],{"className":4078},[192,708],[148,4080,649],{"className":4081},[192,708]," 两次，比除以 ",[148,4084,4086,4099],{"className":4085},[151],[148,4087,4089],{"className":4088},[155],[157,4090,4091],{"xmlns":159},[161,4092,4093,4097],{},[164,4094,4095],{},[167,4096,297],{},[171,4098,297],{"encoding":173},[148,4100,4102],{"className":4101,"ariaHidden":179},[178],[148,4103,4105,4108],{"className":4104},[183],[148,4106],{"className":4107,"style":278},[187],[148,4109,297],{"className":4110,"style":312},[192,193]," 两次更便宜",[3721,4113,4114,4115,4183,4184,4212,4213,4281,4282,4183,4285],{},"存储 ",[148,4116,4118,4139],{"className":4117},[151],[148,4119,4121],{"className":4120},[155],[157,4122,4123],{"xmlns":159},[161,4124,4125,4137],{},[164,4126,4127],{},[1209,4128,4129,4131],{},[167,4130,297],{},[164,4132,4133,4135],{},[339,4134,942],{},[637,4136,649],{},[171,4138,3968],{"encoding":173},[148,4140,4142],{"className":4141,"ariaHidden":179},[178],[148,4143,4145,4148],{"className":4144},[183],[148,4146],{"className":4147,"style":3590},[187],[148,4149,4151,4154],{"className":4150},[192],[148,4152,297],{"className":4153,"style":312},[192,193],[148,4155,4157],{"className":4156},[679],[148,4158,4160],{"className":4159},[683],[148,4161,4163],{"className":4162},[688],[148,4164,4166],{"className":4165,"style":3590},[692],[148,4167,4168,4171],{"style":1250},[148,4169],{"className":4170,"style":701},[700],[148,4172,4174],{"className":4173},[705,706,707,708],[148,4175,4177,4180],{"className":4176},[192,708],[148,4178,942],{"className":4179},[192,708],[148,4181,649],{"className":4182},[192,708]," 而非 ",[148,4185,4187,4200],{"className":4186},[151],[148,4188,4190],{"className":4189},[155],[157,4191,4192],{"xmlns":159},[161,4193,4194,4198],{},[164,4195,4196],{},[167,4197,297],{},[171,4199,297],{"encoding":173},[148,4201,4203],{"className":4202,"ariaHidden":179},[178],[148,4204,4206,4209],{"className":4205},[183],[148,4207],{"className":4208,"style":278},[187],[148,4210,297],{"className":4211,"style":312},[192,193],"，意味着比较方向和常规 Z 缓冲相反：",[148,4214,4216,4237],{"className":4215},[151],[148,4217,4219],{"className":4218},[155],[157,4220,4221],{"xmlns":159},[161,4222,4223,4235],{},[164,4224,4225],{},[1209,4226,4227,4229],{},[167,4228,297],{},[164,4230,4231,4233],{},[339,4232,942],{},[637,4234,649],{},[171,4236,3968],{"encoding":173},[148,4238,4240],{"className":4239,"ariaHidden":179},[178],[148,4241,4243,4246],{"className":4242},[183],[148,4244],{"className":4245,"style":3590},[187],[148,4247,4249,4252],{"className":4248},[192],[148,4250,297],{"className":4251,"style":312},[192,193],[148,4253,4255],{"className":4254},[679],[148,4256,4258],{"className":4257},[683],[148,4259,4261],{"className":4260},[688],[148,4262,4264],{"className":4263,"style":3590},[692],[148,4265,4266,4269],{"style":1250},[148,4267],{"className":4268,"style":701},[700],[148,4270,4272],{"className":4271},[705,706,707,708],[148,4273,4275,4278],{"className":4274},[192,708],[148,4276,942],{"className":4277},[192,708],[148,4279,649],{"className":4280},[192,708]," 越大表示越近（而不是越小），所以代码中用 ",[69,4283,4284],{"code":4284},"D > z[o]",[69,4286,4287],{"code":4287},"D \u003C z[o]",[13,4289,4290],{},"到这里，我们已经知道了如何把 3D 点投影到 2D 屏幕；下一步是搞清楚甜甜圈的 3D 形状从哪来。",[1111,4292,4293],{"id":4293},"环面参数化",[13,4295,4296,4297,4302,4303,4308],{},"如何绘制甜甜圈，也就是",[17,4298,4301],{"href":4299,"rel":4300},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTorus",[21],"环面","？环面是一个",[17,4304,4307],{"href":4305,"rel":4306},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSolid_of_revolution",[21],"旋转体","。一种方法是在 3D 空间中的某个点周围绘制一个 2D 圆，然后绕环面的中心轴旋转它。下面是通过环面中心的横截面：",[80,4310],{":height":82,"caption":4311,"src":4312},"环面横截面","https:\u002F\u002Fbu.dusays.com\u002F2026\u002F06\u002F09\u002F6a27d288c4a28.webp",[13,4314,4315,4316,4386,4387,4493,4494,4528,4529,4557,4558,4586,4587,4622],{},"有一个半径为 ",[148,4317,4319,4337],{"className":4318},[151],[148,4320,4322],{"className":4321},[155],[157,4323,4324],{"xmlns":159},[161,4325,4326,4334],{},[164,4327,4328],{},[631,4329,4330,4332],{},[167,4331,635],{},[637,4333,649],{},[171,4335,4336],{"encoding":173},"R_1",[148,4338,4340],{"className":4339,"ariaHidden":179},[178],[148,4341,4343,4346],{"className":4342},[183],[148,4344],{"className":4345,"style":668},[187],[148,4347,4349,4352],{"className":4348},[192],[148,4350,635],{"className":4351,"style":675},[192,193],[148,4353,4355],{"className":4354},[679],[148,4356,4358,4378],{"className":4357},[683,684],[148,4359,4361,4375],{"className":4360},[688],[148,4362,4364],{"className":4363,"style":693},[692],[148,4365,4366,4369],{"style":696},[148,4367],{"className":4368,"style":701},[700],[148,4370,4372],{"className":4371},[705,706,707,708],[148,4373,649],{"className":4374},[192,708],[148,4376,716],{"className":4377},[715],[148,4379,4381],{"className":4380},[688],[148,4382,4384],{"className":4383,"style":723},[692],[148,4385],{}," 的圆，圆心在 ",[148,4388,4390,4420],{"className":4389},[151],[148,4391,4393],{"className":4392},[155],[157,4394,4395],{"xmlns":159},[161,4396,4397,4417],{},[164,4398,4399,4401,4407,4409,4411,4413,4415],{},[339,4400,1140],{"stretchy":1139},[631,4402,4403,4405],{},[167,4404,635],{},[637,4406,639],{},[339,4408,346],{"separator":179},[637,4410,1758],{},[339,4412,346],{"separator":179},[637,4414,1758],{},[339,4416,1153],{"stretchy":1139},[171,4418,4419],{"encoding":173},"(R_2,0,0)",[148,4421,4423],{"className":4422,"ariaHidden":179},[178],[148,4424,4426,4429,4432,4472,4475,4478,4481,4484,4487,4490],{"className":4425},[183],[148,4427],{"className":4428,"style":902},[187],[148,4430,1140],{"className":4431},[1169],[148,4433,4435,4438],{"className":4434},[192],[148,4436,635],{"className":4437,"style":675},[192,193],[148,4439,4441],{"className":4440},[679],[148,4442,4444,4464],{"className":4443},[683,684],[148,4445,4447,4461],{"className":4446},[688],[148,4448,4450],{"className":4449,"style":693},[692],[148,4451,4452,4455],{"style":696},[148,4453],{"className":4454,"style":701},[700],[148,4456,4458],{"className":4457},[705,706,707,708],[148,4459,639],{"className":4460},[192,708],[148,4462,716],{"className":4463},[715],[148,4465,4467],{"className":4466},[688],[148,4468,4470],{"className":4469,"style":723},[692],[148,4471],{},[148,4473,346],{"className":4474},[381],[148,4476],{"className":4477,"style":374},[373],[148,4479,1758],{"className":4480},[192],[148,4482,346],{"className":4483},[381],[148,4485],{"className":4486,"style":374},[373],[148,4488,1758],{"className":4489},[192],[148,4491,1153],{"className":4492},[1194],"，绘制在 ",[148,4495,4497,4513],{"className":4496},[151],[148,4498,4500],{"className":4499},[155],[157,4501,4502],{"xmlns":159},[161,4503,4504,4510],{},[164,4505,4506,4508],{},[167,4507,266],{},[167,4509,1037],{},[171,4511,4512],{"encoding":173},"xy",[148,4514,4516],{"className":4515,"ariaHidden":179},[178],[148,4517,4519,4522,4525],{"className":4518},[183],[148,4520],{"className":4521,"style":1049},[187],[148,4523,266],{"className":4524},[192,193],[148,4526,1037],{"className":4527,"style":970},[192,193]," 平面上。可以通过扫过角度——称之为 ",[148,4530,4532,4545],{"className":4531},[151],[148,4533,4535],{"className":4534},[155],[157,4536,4537],{"xmlns":159},[161,4538,4539,4543],{},[164,4540,4541],{},[167,4542,169],{},[171,4544,174],{"encoding":173},[148,4546,4548],{"className":4547,"ariaHidden":179},[178],[148,4549,4551,4554],{"className":4550},[183],[148,4552],{"className":4553,"style":188},[187],[148,4555,169],{"className":4556,"style":194},[192,193],"——从 ",[148,4559,4561,4574],{"className":4560},[151],[148,4562,4564],{"className":4563},[155],[157,4565,4566],{"xmlns":159},[161,4567,4568,4572],{},[164,4569,4570],{},[637,4571,1758],{},[171,4573,1758],{"encoding":173},[148,4575,4577],{"className":4576,"ariaHidden":179},[178],[148,4578,4580,4583],{"className":4579},[183],[148,4581],{"className":4582,"style":856},[187],[148,4584,1758],{"className":4585},[192]," 到 ",[148,4588,4590,4607],{"className":4589},[151],[148,4591,4593],{"className":4592},[155],[157,4594,4595],{"xmlns":159},[161,4596,4597,4604],{},[164,4598,4599,4601],{},[637,4600,639],{},[167,4602,4603],{},"π",[171,4605,4606],{"encoding":173},"2\\pi",[148,4608,4610],{"className":4609,"ariaHidden":179},[178],[148,4611,4613,4616,4619],{"className":4612},[183],[148,4614],{"className":4615,"style":856},[187],[148,4617,639],{"className":4618},[192],[148,4620,4603],{"className":4621,"style":970},[192,193]," 来绘制它：",[148,4624,4626],{"className":4625},[1732],[148,4627,4629,4711],{"className":4628},[151],[148,4630,4632],{"className":4631},[155],[157,4633,4634],{"xmlns":159,"display":1741},[161,4635,4636,4708],{},[164,4637,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4662,4664,4666,4668,4670,4672,4674,4676,4682,4684,4686,4688,4690,4696,4698,4700,4702,4704,4706],{},[339,4639,1140],{"stretchy":1139},[167,4641,266],{},[339,4643,346],{"separator":179},[167,4645,1037],{},[339,4647,346],{"separator":179},[167,4649,297],{},[339,4651,1153],{"stretchy":1139},[339,4653,1784],{},[339,4655,1140],{"stretchy":1139},[631,4657,4658,4660],{},[167,4659,635],{},[637,4661,639],{},[339,4663,346],{"separator":179},[637,4665,1758],{},[339,4667,346],{"separator":179},[637,4669,1758],{},[339,4671,1153],{"stretchy":1139},[339,4673,642],{},[339,4675,1140],{"stretchy":1139},[631,4677,4678,4680],{},[167,4679,635],{},[637,4681,649],{},[167,4683,349],{},[339,4685,341],{},[167,4687,169],{},[339,4689,346],{"separator":179},[631,4691,4692,4694],{},[167,4693,635],{},[637,4695,649],{},[167,4697,337],{},[339,4699,341],{},[167,4701,169],{},[339,4703,346],{"separator":179},[637,4705,1758],{},[339,4707,1153],{"stretchy":1139},[171,4709,4710],{"encoding":173},"(x,y,z) = (R_2,0,0) + (R_1 \\cos \\theta, R_1 \\sin \\theta, 0)",[148,4712,4714,4756,4835],{"className":4713,"ariaHidden":179},[178],[148,4715,4717,4720,4723,4726,4729,4732,4735,4738,4741,4744,4747,4750,4753],{"className":4716},[183],[148,4718],{"className":4719,"style":902},[187],[148,4721,1140],{"className":4722},[1169],[148,4724,266],{"className":4725},[192,193],[148,4727,346],{"className":4728},[381],[148,4730],{"className":4731,"style":374},[373],[148,4733,1037],{"className":4734,"style":970},[192,193],[148,4736,346],{"className":4737},[381],[148,4739],{"className":4740,"style":374},[373],[148,4742,297],{"className":4743,"style":312},[192,193],[148,4745,1153],{"className":4746},[1194],[148,4748],{"className":4749,"style":2083},[373],[148,4751,1784],{"className":4752},[2087],[148,4754],{"className":4755,"style":2083},[373],[148,4757,4759,4762,4765,4805,4808,4811,4814,4817,4820,4823,4826,4829,4832],{"className":4758},[183],[148,4760],{"className":4761,"style":902},[187],[148,4763,1140],{"className":4764},[1169],[148,4766,4768,4771],{"className":4767},[192],[148,4769,635],{"className":4770,"style":675},[192,193],[148,4772,4774],{"className":4773},[679],[148,4775,4777,4797],{"className":4776},[683,684],[148,4778,4780,4794],{"className":4779},[688],[148,4781,4783],{"className":4782,"style":693},[692],[148,4784,4785,4788],{"style":696},[148,4786],{"className":4787,"style":701},[700],[148,4789,4791],{"className":4790},[705,706,707,708],[148,4792,639],{"className":4793},[192,708],[148,4795,716],{"className":4796},[715],[148,4798,4800],{"className":4799},[688],[148,4801,4803],{"className":4802,"style":723},[692],[148,4804],{},[148,4806,346],{"className":4807},[381],[148,4809],{"className":4810,"style":374},[373],[148,4812,1758],{"className":4813},[192],[148,4815,346],{"className":4816},[381],[148,4818],{"className":4819,"style":374},[373],[148,4821,1758],{"className":4822},[192],[148,4824,1153],{"className":4825},[1194],[148,4827],{"className":4828,"style":729},[373],[148,4830,642],{"className":4831},[733],[148,4833],{"className":4834,"style":729},[373],[148,4836,4838,4841,4844,4884,4887,4890,4893,4896,4899,4902,4942,4945,4948,4951,4954,4957,4960,4963],{"className":4837},[183],[148,4839],{"className":4840,"style":902},[187],[148,4842,1140],{"className":4843},[1169],[148,4845,4847,4850],{"className":4846},[192],[148,4848,635],{"className":4849,"style":675},[192,193],[148,4851,4853],{"className":4852},[679],[148,4854,4856,4876],{"className":4855},[683,684],[148,4857,4859,4873],{"className":4858},[688],[148,4860,4862],{"className":4861,"style":693},[692],[148,4863,4864,4867],{"style":696},[148,4865],{"className":4866,"style":701},[700],[148,4868,4870],{"className":4869},[705,706,707,708],[148,4871,649],{"className":4872},[192,708],[148,4874,716],{"className":4875},[715],[148,4877,4879],{"className":4878},[688],[148,4880,4882],{"className":4881,"style":723},[692],[148,4883],{},[148,4885],{"className":4886,"style":374},[373],[148,4888,349],{"className":4889},[369],[148,4891],{"className":4892,"style":374},[373],[148,4894,169],{"className":4895,"style":194},[192,193],[148,4897,346],{"className":4898},[381],[148,4900],{"className":4901,"style":374},[373],[148,4903,4905,4908],{"className":4904},[192],[148,4906,635],{"className":4907,"style":675},[192,193],[148,4909,4911],{"className":4910},[679],[148,4912,4914,4934],{"className":4913},[683,684],[148,4915,4917,4931],{"className":4916},[688],[148,4918,4920],{"className":4919,"style":693},[692],[148,4921,4922,4925],{"style":696},[148,4923],{"className":4924,"style":701},[700],[148,4926,4928],{"className":4927},[705,706,707,708],[148,4929,649],{"className":4930},[192,708],[148,4932,716],{"className":4933},[715],[148,4935,4937],{"className":4936},[688],[148,4938,4940],{"className":4939,"style":723},[692],[148,4941],{},[148,4943],{"className":4944,"style":374},[373],[148,4946,337],{"className":4947},[369],[148,4949],{"className":4950,"style":374},[373],[148,4952,169],{"className":4953,"style":194},[192,193],[148,4955,346],{"className":4956},[381],[148,4958],{"className":4959,"style":374},[373],[148,4961,1758],{"className":4962},[192],[148,4964,1153],{"className":4965},[1194],[13,4967,4968,4969,4997,4998,5026,5027,5032,5033,5061],{},"然后取这个圆并绕 ",[148,4970,4972,4985],{"className":4971},[151],[148,4973,4975],{"className":4974},[155],[157,4976,4977],{"xmlns":159},[161,4978,4979,4983],{},[164,4980,4981],{},[167,4982,1037],{},[171,4984,1037],{"encoding":173},[148,4986,4988],{"className":4987,"ariaHidden":179},[178],[148,4989,4991,4994],{"className":4990},[183],[148,4992],{"className":4993,"style":1049},[187],[148,4995,1037],{"className":4996,"style":970},[192,193]," 轴旋转另一个角度——称之为 ",[148,4999,5001,5014],{"className":5000},[151],[148,5002,5004],{"className":5003},[155],[157,5005,5006],{"xmlns":159},[161,5007,5008,5012],{},[164,5009,5010],{},[167,5011,220],{},[171,5013,223],{"encoding":173},[148,5015,5017],{"className":5016,"ariaHidden":179},[178],[148,5018,5020,5023],{"className":5019},[183],[148,5021],{"className":5022,"style":233},[187],[148,5024,220],{"className":5025},[192,193],"。要将任意 3D 点绕某个主轴旋转，标准技术是乘以一个",[17,5028,5031],{"href":5029,"rel":5030},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRotation_matrix",[21],"旋转矩阵","。所以如果取之前的点并绕 ",[148,5034,5036,5049],{"className":5035},[151],[148,5037,5039],{"className":5038},[155],[157,5040,5041],{"xmlns":159},[161,5042,5043,5047],{},[164,5044,5045],{},[167,5046,1037],{},[171,5048,1037],{"encoding":173},[148,5050,5052],{"className":5051,"ariaHidden":179},[178],[148,5053,5055,5058],{"className":5054},[183],[148,5056],{"className":5057,"style":1049},[187],[148,5059,1037],{"className":5060,"style":970},[192,193]," 轴旋转，得到：",[148,5063,5065],{"className":5064},[1732],[148,5066,5068,5244],{"className":5067},[151],[148,5069,5071],{"className":5070},[155],[157,5072,5073],{"xmlns":159,"display":1741},[161,5074,5075,5241],{},[164,5076,5077,5144,5147],{},[164,5078,5079,5081,5142],{},[339,5080,1140],{"fence":179},[1745,5082,5086],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},"0.16em","center center center","1em",[1750,5087,5088,5116,5136],{},[1753,5089,5090],{},[1756,5091,5092],{"scriptlevel":1758,"displaystyle":1139},[164,5093,5094,5100,5102,5108,5110,5112,5114],{},[631,5095,5096,5098],{},[167,5097,635],{},[637,5099,639],{},[339,5101,642],{},[631,5103,5104,5106],{},[167,5105,635],{},[637,5107,649],{},[167,5109,349],{},[339,5111,341],{},[167,5113,169],{},[339,5115,346],{"separator":179},[1753,5117,5118],{},[1756,5119,5120],{"scriptlevel":1758,"displaystyle":1139},[164,5121,5122,5128,5130,5132,5134],{},[631,5123,5124,5126],{},[167,5125,635],{},[637,5127,649],{},[167,5129,337],{},[339,5131,341],{},[167,5133,169],{},[339,5135,346],{"separator":179},[1753,5137,5138],{},[1756,5139,5140],{"scriptlevel":1758,"displaystyle":1139},[637,5141,1758],{},[339,5143,1153],{"fence":179},[339,5145,5146],{},"⋅",[164,5148,5149,5151,5239],{},[339,5150,1140],{"fence":179},[1745,5152,5153,5185,5205],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,5154,5155,5167,5173],{},[1753,5156,5157],{},[1756,5158,5159],{"scriptlevel":1758,"displaystyle":1139},[164,5160,5161,5163,5165],{},[167,5162,349],{},[339,5164,341],{},[167,5166,220],{},[1753,5168,5169],{},[1756,5170,5171],{"scriptlevel":1758,"displaystyle":1139},[637,5172,1758],{},[1753,5174,5175],{},[1756,5176,5177],{"scriptlevel":1758,"displaystyle":1139},[164,5178,5179,5181,5183],{},[167,5180,337],{},[339,5182,341],{},[167,5184,220],{},[1750,5186,5187,5193,5199],{},[1753,5188,5189],{},[1756,5190,5191],{"scriptlevel":1758,"displaystyle":1139},[637,5192,1758],{},[1753,5194,5195],{},[1756,5196,5197],{"scriptlevel":1758,"displaystyle":1139},[637,5198,649],{},[1753,5200,5201],{},[1756,5202,5203],{"scriptlevel":1758,"displaystyle":1139},[637,5204,1758],{},[1750,5206,5207,5221,5227],{},[1753,5208,5209],{},[1756,5210,5211],{"scriptlevel":1758,"displaystyle":1139},[164,5212,5213,5215,5217,5219],{},[339,5214,942],{},[167,5216,337],{},[339,5218,341],{},[167,5220,220],{},[1753,5222,5223],{},[1756,5224,5225],{"scriptlevel":1758,"displaystyle":1139},[637,5226,1758],{},[1753,5228,5229],{},[1756,5230,5231],{"scriptlevel":1758,"displaystyle":1139},[164,5232,5233,5235,5237],{},[167,5234,349],{},[339,5236,341],{},[167,5238,220],{},[339,5240,1153],{"fence":179},[171,5242,5243],{"encoding":173},"\\left( \\begin{matrix}\nR_2 + R_1 \\cos \\theta, &\nR_1 \\sin \\theta, &\n0 \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n\\cos \\phi & 0 & \\sin \\phi \\\\\n0 & 1 & 0 \\\\\n-\\sin \\phi & 0 & \\cos \\phi \\end{matrix} \\right)",[148,5245,5247,5558],{"className":5246,"ariaHidden":179},[178],[148,5248,5250,5254,5549,5552,5555],{"className":5249},[183],[148,5251],{"className":5252,"style":5253},[187],"height:1.2em;vertical-align:-0.35em;",[148,5255,5257,5264,5543],{"className":5256},[2659],[148,5258,5260],{"className":5259,"style":2664},[1169,2663],[148,5261,1140],{"className":5262},[2668,5263],"size1",[148,5265,5267],{"className":5266},[192],[148,5268,5270,5409,5414,5417,5503,5506,5509],{"className":5269},[1745],[148,5271,5274],{"className":5272},[5273],"col-align-c",[148,5275,5277,5400],{"className":5276},[683,684],[148,5278,5280,5397],{"className":5279},[688],[148,5281,5284],{"className":5282,"style":5283},[692],"height:0.85em;",[148,5285,5287,5290],{"style":5286},"top:-3.01em;",[148,5288],{"className":5289,"style":1896},[700],[148,5291,5293,5333,5336,5339,5342,5382,5385,5388,5391,5394],{"className":5292},[192],[148,5294,5296,5299],{"className":5295},[192],[148,5297,635],{"className":5298,"style":675},[192,193],[148,5300,5302],{"className":5301},[679],[148,5303,5305,5325],{"className":5304},[683,684],[148,5306,5308,5322],{"className":5307},[688],[148,5309,5311],{"className":5310,"style":693},[692],[148,5312,5313,5316],{"style":696},[148,5314],{"className":5315,"style":701},[700],[148,5317,5319],{"className":5318},[705,706,707,708],[148,5320,639],{"className":5321},[192,708],[148,5323,716],{"className":5324},[715],[148,5326,5328],{"className":5327},[688],[148,5329,5331],{"className":5330,"style":723},[692],[148,5332],{},[148,5334],{"className":5335,"style":729},[373],[148,5337,642],{"className":5338},[733],[148,5340],{"className":5341,"style":729},[373],[148,5343,5345,5348],{"className":5344},[192],[148,5346,635],{"className":5347,"style":675},[192,193],[148,5349,5351],{"className":5350},[679],[148,5352,5354,5374],{"className":5353},[683,684],[148,5355,5357,5371],{"className":5356},[688],[148,5358,5360],{"className":5359,"style":693},[692],[148,5361,5362,5365],{"style":696},[148,5363],{"className":5364,"style":701},[700],[148,5366,5368],{"className":5367},[705,706,707,708],[148,5369,649],{"className":5370},[192,708],[148,5372,716],{"className":5373},[715],[148,5375,5377],{"className":5376},[688],[148,5378,5380],{"className":5379,"style":723},[692],[148,5381],{},[148,5383],{"className":5384,"style":374},[373],[148,5386,349],{"className":5387},[369],[148,5389],{"className":5390,"style":374},[373],[148,5392,169],{"className":5393,"style":194},[192,193],[148,5395,346],{"className":5396},[381],[148,5398,716],{"className":5399},[715],[148,5401,5403],{"className":5402},[688],[148,5404,5407],{"className":5405,"style":5406},[692],"height:0.35em;",[148,5408],{},[148,5410],{"className":5411,"style":5413},[5412],"arraycolsep","width:0.5em;",[148,5415],{"className":5416,"style":5413},[5412],[148,5418,5420],{"className":5419},[5273],[148,5421,5423,5495],{"className":5422},[683,684],[148,5424,5426,5492],{"className":5425},[688],[148,5427,5429],{"className":5428,"style":5283},[692],[148,5430,5431,5434],{"style":5286},[148,5432],{"className":5433,"style":1896},[700],[148,5435,5437,5477,5480,5483,5486,5489],{"className":5436},[192],[148,5438,5440,5443],{"className":5439},[192],[148,5441,635],{"className":5442,"style":675},[192,193],[148,5444,5446],{"className":5445},[679],[148,5447,5449,5469],{"className":5448},[683,684],[148,5450,5452,5466],{"className":5451},[688],[148,5453,5455],{"className":5454,"style":693},[692],[148,5456,5457,5460],{"style":696},[148,5458],{"className":5459,"style":701},[700],[148,5461,5463],{"className":5462},[705,706,707,708],[148,5464,649],{"className":5465},[192,708],[148,5467,716],{"className":5468},[715],[148,5470,5472],{"className":5471},[688],[148,5473,5475],{"className":5474,"style":723},[692],[148,5476],{},[148,5478],{"className":5479,"style":374},[373],[148,5481,337],{"className":5482},[369],[148,5484],{"className":5485,"style":374},[373],[148,5487,169],{"className":5488,"style":194},[192,193],[148,5490,346],{"className":5491},[381],[148,5493,716],{"className":5494},[715],[148,5496,5498],{"className":5497},[688],[148,5499,5501],{"className":5500,"style":5406},[692],[148,5502],{},[148,5504],{"className":5505,"style":5413},[5412],[148,5507],{"className":5508,"style":5413},[5412],[148,5510,5512],{"className":5511},[5273],[148,5513,5515,5535],{"className":5514},[683,684],[148,5516,5518,5532],{"className":5517},[688],[148,5519,5521],{"className":5520,"style":5283},[692],[148,5522,5523,5526],{"style":5286},[148,5524],{"className":5525,"style":1896},[700],[148,5527,5529],{"className":5528},[192],[148,5530,1758],{"className":5531},[192],[148,5533,716],{"className":5534},[715],[148,5536,5538],{"className":5537},[688],[148,5539,5541],{"className":5540,"style":5406},[692],[148,5542],{},[148,5544,5546],{"className":5545,"style":2664},[1194,2663],[148,5547,1153],{"className":5548},[2668,5263],[148,5550],{"className":5551,"style":729},[373],[148,5553,5146],{"className":5554},[733],[148,5556],{"className":5557,"style":729},[373],[148,5559,5561,5565],{"className":5560},[183],[148,5562],{"className":5563,"style":5564},[187],"height:3.6em;vertical-align:-1.55em;",[148,5566,5568,5618,5836],{"className":5567},[2659],[148,5569,5571],{"className":5570},[1169],[148,5572,5575],{"className":5573},[2668,5574],"mult",[148,5576,5578,5609],{"className":5577},[683,684],[148,5579,5581,5606],{"className":5580},[688],[148,5582,5585],{"className":5583,"style":5584},[692],"height:2.05em;",[148,5586,5588,5592],{"style":5587},"top:-4.05em;",[148,5589],{"className":5590,"style":5591},[700],"height:5.6em;",[148,5593,5595],{"style":5594},"width:0.875em;height:3.6em;",[5596,5597,5602],"svg",{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","0.875em","3.6em","0 0 875 3600",[5603,5604],"path",{"d":5605},"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,84c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-92c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z",[148,5607,716],{"className":5608},[715],[148,5610,5612],{"className":5611},[688],[148,5613,5616],{"className":5614,"style":5615},[692],"height:1.55em;",[148,5617],{},[148,5619,5621],{"className":5620},[192],[148,5622,5624,5700,5703,5706,5762,5765,5768],{"className":5623},[1745],[148,5625,5627],{"className":5626},[5273],[148,5628,5630,5692],{"className":5629},[683,684],[148,5631,5633,5689],{"className":5632},[688],[148,5634,5636,5654,5665],{"className":5635,"style":5584},[692],[148,5637,5639,5642],{"style":5638},"top:-4.21em;",[148,5640],{"className":5641,"style":1896},[700],[148,5643,5645,5648,5651],{"className":5644},[192],[148,5646,349],{"className":5647},[369],[148,5649],{"className":5650,"style":374},[373],[148,5652,220],{"className":5653},[192,193],[148,5655,5656,5659],{"style":5286},[148,5657],{"className":5658,"style":1896},[700],[148,5660,5662],{"className":5661},[192],[148,5663,1758],{"className":5664},[192],[148,5666,5668,5671],{"style":5667},"top:-1.81em;",[148,5669],{"className":5670,"style":1896},[700],[148,5672,5674,5677,5680,5683,5686],{"className":5673},[192],[148,5675,942],{"className":5676},[192],[148,5678],{"className":5679,"style":374},[373],[148,5681,337],{"className":5682},[369],[148,5684],{"className":5685,"style":374},[373],[148,5687,220],{"className":5688},[192,193],[148,5690,716],{"className":5691},[715],[148,5693,5695],{"className":5694},[688],[148,5696,5698],{"className":5697,"style":5615},[692],[148,5699],{},[148,5701],{"className":5702,"style":5413},[5412],[148,5704],{"className":5705,"style":5413},[5412],[148,5707,5709],{"className":5708},[5273],[148,5710,5712,5754],{"className":5711},[683,684],[148,5713,5715,5751],{"className":5714},[688],[148,5716,5718,5729,5740],{"className":5717,"style":5584},[692],[148,5719,5720,5723],{"style":5638},[148,5721],{"className":5722,"style":1896},[700],[148,5724,5726],{"className":5725},[192],[148,5727,1758],{"className":5728},[192],[148,5730,5731,5734],{"style":5286},[148,5732],{"className":5733,"style":1896},[700],[148,5735,5737],{"className":5736},[192],[148,5738,649],{"className":5739},[192],[148,5741,5742,5745],{"style":5667},[148,5743],{"className":5744,"style":1896},[700],[148,5746,5748],{"className":5747},[192],[148,5749,1758],{"className":5750},[192],[148,5752,716],{"className":5753},[715],[148,5755,5757],{"className":5756},[688],[148,5758,5760],{"className":5759,"style":5615},[692],[148,5761],{},[148,5763],{"className":5764,"style":5413},[5412],[148,5766],{"className":5767,"style":5413},[5412],[148,5769,5771],{"className":5770},[5273],[148,5772,5774,5828],{"className":5773},[683,684],[148,5775,5777,5825],{"className":5776},[688],[148,5778,5780,5797,5808],{"className":5779,"style":5584},[692],[148,5781,5782,5785],{"style":5638},[148,5783],{"className":5784,"style":1896},[700],[148,5786,5788,5791,5794],{"className":5787},[192],[148,5789,337],{"className":5790},[369],[148,5792],{"className":5793,"style":374},[373],[148,5795,220],{"className":5796},[192,193],[148,5798,5799,5802],{"style":5286},[148,5800],{"className":5801,"style":1896},[700],[148,5803,5805],{"className":5804},[192],[148,5806,1758],{"className":5807},[192],[148,5809,5810,5813],{"style":5667},[148,5811],{"className":5812,"style":1896},[700],[148,5814,5816,5819,5822],{"className":5815},[192],[148,5817,349],{"className":5818},[369],[148,5820],{"className":5821,"style":374},[373],[148,5823,220],{"className":5824},[192,193],[148,5826,716],{"className":5827},[715],[148,5829,5831],{"className":5830},[688],[148,5832,5834],{"className":5833,"style":5615},[692],[148,5835],{},[148,5837,5839],{"className":5838},[1194],[148,5840,5842],{"className":5841},[2668,5574],[148,5843,5845,5866],{"className":5844},[683,684],[148,5846,5848,5863],{"className":5847},[688],[148,5849,5851],{"className":5850,"style":5584},[692],[148,5852,5853,5856],{"style":5587},[148,5854],{"className":5855,"style":5591},[700],[148,5857,5858],{"style":5594},[5596,5859,5860],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,5861],{"d":5862},"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,9\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-144c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z",[148,5864,716],{"className":5865},[715],[148,5867,5869],{"className":5868},[688],[148,5870,5872],{"className":5871,"style":5615},[692],[148,5873],{},[148,5875,5877],{"className":5876},[1732],[148,5878,5880,6000],{"className":5879},[151],[148,5881,5883],{"className":5882},[155],[157,5884,5885],{"xmlns":159,"display":1741},[161,5886,5887,5997],{},[164,5888,5889,5891],{},[339,5890,1784],{},[164,5892,5893,5895,5995],{},[339,5894,1140],{"fence":179},[1745,5896,5897],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,5898,5899,5937,5957],{},[1753,5900,5901],{},[1756,5902,5903],{"scriptlevel":1758,"displaystyle":1139},[164,5904,5905,5907,5913,5915,5921,5923,5925,5927,5929,5931,5933,5935],{},[339,5906,1140],{"stretchy":1139},[631,5908,5909,5911],{},[167,5910,635],{},[637,5912,639],{},[339,5914,642],{},[631,5916,5917,5919],{},[167,5918,635],{},[637,5920,649],{},[167,5922,349],{},[339,5924,341],{},[167,5926,169],{},[339,5928,1153],{"stretchy":1139},[167,5930,349],{},[339,5932,341],{},[167,5934,220],{},[339,5936,346],{"separator":179},[1753,5938,5939],{},[1756,5940,5941],{"scriptlevel":1758,"displaystyle":1139},[164,5942,5943,5949,5951,5953,5955],{},[631,5944,5945,5947],{},[167,5946,635],{},[637,5948,649],{},[167,5950,337],{},[339,5952,341],{},[167,5954,169],{},[339,5956,346],{"separator":179},[1753,5958,5959],{},[1756,5960,5961],{"scriptlevel":1758,"displaystyle":1139},[164,5962,5963,5965,5967,5973,5975,5981,5983,5985,5987,5989,5991,5993],{},[339,5964,942],{},[339,5966,1140],{"stretchy":1139},[631,5968,5969,5971],{},[167,5970,635],{},[637,5972,639],{},[339,5974,642],{},[631,5976,5977,5979],{},[167,5978,635],{},[637,5980,649],{},[167,5982,349],{},[339,5984,341],{},[167,5986,169],{},[339,5988,1153],{"stretchy":1139},[167,5990,337],{},[339,5992,341],{},[167,5994,220],{},[339,5996,1153],{"fence":179},[171,5998,5999],{"encoding":173},"= \\left( \\begin{matrix}\n(R_2 + R_1 \\cos \\theta)\\cos \\phi, &\nR_1 \\sin \\theta, &\n-(R_2 + R_1 \\cos \\theta)\\sin \\phi \\end{matrix} \\right)",[148,6001,6003,6016],{"className":6002,"ariaHidden":179},[178],[148,6004,6006,6010,6013],{"className":6005},[183],[148,6007],{"className":6008,"style":6009},[187],"height:0.3669em;",[148,6011,1784],{"className":6012},[2087],[148,6014],{"className":6015,"style":2083},[373],[148,6017,6019,6022],{"className":6018},[183],[148,6020],{"className":6021,"style":5253},[187],[148,6023,6025,6031,6441],{"className":6024},[2659],[148,6026,6028],{"className":6027,"style":2664},[1169,2663],[148,6029,1140],{"className":6030},[2668,5263],[148,6032,6034],{"className":6033},[192],[148,6035,6037,6190,6193,6196,6282,6285,6288],{"className":6036},[1745],[148,6038,6040],{"className":6039},[5273],[148,6041,6043,6182],{"className":6042},[683,684],[148,6044,6046,6179],{"className":6045},[688],[148,6047,6049],{"className":6048,"style":5283},[692],[148,6050,6051,6054],{"style":5286},[148,6052],{"className":6053,"style":1896},[700],[148,6055,6057,6060,6100,6103,6106,6109,6149,6152,6155,6158,6161,6164,6167,6170,6173,6176],{"className":6056},[192],[148,6058,1140],{"className":6059},[1169],[148,6061,6063,6066],{"className":6062},[192],[148,6064,635],{"className":6065,"style":675},[192,193],[148,6067,6069],{"className":6068},[679],[148,6070,6072,6092],{"className":6071},[683,684],[148,6073,6075,6089],{"className":6074},[688],[148,6076,6078],{"className":6077,"style":693},[692],[148,6079,6080,6083],{"style":696},[148,6081],{"className":6082,"style":701},[700],[148,6084,6086],{"className":6085},[705,706,707,708],[148,6087,639],{"className":6088},[192,708],[148,6090,716],{"className":6091},[715],[148,6093,6095],{"className":6094},[688],[148,6096,6098],{"className":6097,"style":723},[692],[148,6099],{},[148,6101],{"className":6102,"style":729},[373],[148,6104,642],{"className":6105},[733],[148,6107],{"className":6108,"style":729},[373],[148,6110,6112,6115],{"className":6111},[192],[148,6113,635],{"className":6114,"style":675},[192,193],[148,6116,6118],{"className":6117},[679],[148,6119,6121,6141],{"className":6120},[683,684],[148,6122,6124,6138],{"className":6123},[688],[148,6125,6127],{"className":6126,"style":693},[692],[148,6128,6129,6132],{"style":696},[148,6130],{"className":6131,"style":701},[700],[148,6133,6135],{"className":6134},[705,706,707,708],[148,6136,649],{"className":6137},[192,708],[148,6139,716],{"className":6140},[715],[148,6142,6144],{"className":6143},[688],[148,6145,6147],{"className":6146,"style":723},[692],[148,6148],{},[148,6150],{"className":6151,"style":374},[373],[148,6153,349],{"className":6154},[369],[148,6156],{"className":6157,"style":374},[373],[148,6159,169],{"className":6160,"style":194},[192,193],[148,6162,1153],{"className":6163},[1194],[148,6165],{"className":6166,"style":374},[373],[148,6168,349],{"className":6169},[369],[148,6171],{"className":6172,"style":374},[373],[148,6174,220],{"className":6175},[192,193],[148,6177,346],{"className":6178},[381],[148,6180,716],{"className":6181},[715],[148,6183,6185],{"className":6184},[688],[148,6186,6188],{"className":6187,"style":5406},[692],[148,6189],{},[148,6191],{"className":6192,"style":5413},[5412],[148,6194],{"className":6195,"style":5413},[5412],[148,6197,6199],{"className":6198},[5273],[148,6200,6202,6274],{"className":6201},[683,684],[148,6203,6205,6271],{"className":6204},[688],[148,6206,6208],{"className":6207,"style":5283},[692],[148,6209,6210,6213],{"style":5286},[148,6211],{"className":6212,"style":1896},[700],[148,6214,6216,6256,6259,6262,6265,6268],{"className":6215},[192],[148,6217,6219,6222],{"className":6218},[192],[148,6220,635],{"className":6221,"style":675},[192,193],[148,6223,6225],{"className":6224},[679],[148,6226,6228,6248],{"className":6227},[683,684],[148,6229,6231,6245],{"className":6230},[688],[148,6232,6234],{"className":6233,"style":693},[692],[148,6235,6236,6239],{"style":696},[148,6237],{"className":6238,"style":701},[700],[148,6240,6242],{"className":6241},[705,706,707,708],[148,6243,649],{"className":6244},[192,708],[148,6246,716],{"className":6247},[715],[148,6249,6251],{"className":6250},[688],[148,6252,6254],{"className":6253,"style":723},[692],[148,6255],{},[148,6257],{"className":6258,"style":374},[373],[148,6260,337],{"className":6261},[369],[148,6263],{"className":6264,"style":374},[373],[148,6266,169],{"className":6267,"style":194},[192,193],[148,6269,346],{"className":6270},[381],[148,6272,716],{"className":6273},[715],[148,6275,6277],{"className":6276},[688],[148,6278,6280],{"className":6279,"style":5406},[692],[148,6281],{},[148,6283],{"className":6284,"style":5413},[5412],[148,6286],{"className":6287,"style":5413},[5412],[148,6289,6291],{"className":6290},[5273],[148,6292,6294,6433],{"className":6293},[683,684],[148,6295,6297,6430],{"className":6296},[688],[148,6298,6300],{"className":6299,"style":5283},[692],[148,6301,6302,6305],{"style":5286},[148,6303],{"className":6304,"style":1896},[700],[148,6306,6308,6311,6314,6354,6357,6360,6363,6403,6406,6409,6412,6415,6418,6421,6424,6427],{"className":6307},[192],[148,6309,942],{"className":6310},[192],[148,6312,1140],{"className":6313},[1169],[148,6315,6317,6320],{"className":6316},[192],[148,6318,635],{"className":6319,"style":675},[192,193],[148,6321,6323],{"className":6322},[679],[148,6324,6326,6346],{"className":6325},[683,684],[148,6327,6329,6343],{"className":6328},[688],[148,6330,6332],{"className":6331,"style":693},[692],[148,6333,6334,6337],{"style":696},[148,6335],{"className":6336,"style":701},[700],[148,6338,6340],{"className":6339},[705,706,707,708],[148,6341,639],{"className":6342},[192,708],[148,6344,716],{"className":6345},[715],[148,6347,6349],{"className":6348},[688],[148,6350,6352],{"className":6351,"style":723},[692],[148,6353],{},[148,6355],{"className":6356,"style":729},[373],[148,6358,642],{"className":6359},[733],[148,6361],{"className":6362,"style":729},[373],[148,6364,6366,6369],{"className":6365},[192],[148,6367,635],{"className":6368,"style":675},[192,193],[148,6370,6372],{"className":6371},[679],[148,6373,6375,6395],{"className":6374},[683,684],[148,6376,6378,6392],{"className":6377},[688],[148,6379,6381],{"className":6380,"style":693},[692],[148,6382,6383,6386],{"style":696},[148,6384],{"className":6385,"style":701},[700],[148,6387,6389],{"className":6388},[705,706,707,708],[148,6390,649],{"className":6391},[192,708],[148,6393,716],{"className":6394},[715],[148,6396,6398],{"className":6397},[688],[148,6399,6401],{"className":6400,"style":723},[692],[148,6402],{},[148,6404],{"className":6405,"style":374},[373],[148,6407,349],{"className":6408},[369],[148,6410],{"className":6411,"style":374},[373],[148,6413,169],{"className":6414,"style":194},[192,193],[148,6416,1153],{"className":6417},[1194],[148,6419],{"className":6420,"style":374},[373],[148,6422,337],{"className":6423},[369],[148,6425],{"className":6426,"style":374},[373],[148,6428,220],{"className":6429},[192,193],[148,6431,716],{"className":6432},[715],[148,6434,6436],{"className":6435},[688],[148,6437,6439],{"className":6438,"style":5406},[692],[148,6440],{},[148,6442,6444],{"className":6443,"style":2664},[1194,2663],[148,6445,1153],{"className":6446},[2668,5263],[13,6448,6449],{},"到这里，我们已经有了环面上每个点的 3D 坐标；下一步是把整个环面旋转起来。",[10,6451,6452],{},[13,6453,6454,6455,6483,6484,6488,6489,6517,6518,1022,6547,6483,6575,6488,6578,282,6606,6634],{},"注意区分两层旋转：",[148,6456,6458,6471],{"className":6457},[151],[148,6459,6461],{"className":6460},[155],[157,6462,6463],{"xmlns":159},[161,6464,6465,6469],{},[164,6466,6467],{},[167,6468,220],{},[171,6470,223],{"encoding":173},[148,6472,6474],{"className":6473,"ariaHidden":179},[178],[148,6475,6477,6480],{"className":6476},[183],[148,6478],{"className":6479,"style":233},[187],[148,6481,220],{"className":6482},[192,193]," 是",[6485,6486,6487],"strong",{},"建模旋转","——绕 ",[148,6490,6492,6505],{"className":6491},[151],[148,6493,6495],{"className":6494},[155],[157,6496,6497],{"xmlns":159},[161,6498,6499,6503],{},[164,6500,6501],{},[167,6502,1037],{},[171,6504,1037],{"encoding":173},[148,6506,6508],{"className":6507,"ariaHidden":179},[178],[148,6509,6511,6514],{"className":6510},[183],[148,6512],{"className":6513,"style":1049},[187],[148,6515,1037],{"className":6516,"style":970},[192,193]," 轴将截面圆旋转一圈，构造出环面的形状。接下来要做的 ",[148,6519,6521,6534],{"className":6520},[151],[148,6522,6524],{"className":6523},[155],[157,6525,6526],{"xmlns":159},[161,6527,6528,6532],{},[164,6529,6530],{},[167,6531,244],{},[171,6533,244],{"encoding":173},[148,6535,6537],{"className":6536,"ariaHidden":179},[178],[148,6538,6540,6544],{"className":6539},[183],[148,6541],{"className":6542,"style":6543},[187],"height:0.6833em;",[148,6545,244],{"className":6546},[192,193],[148,6548,6550,6563],{"className":6549},[151],[148,6551,6553],{"className":6552},[155],[157,6554,6555],{"xmlns":159},[161,6556,6557,6561],{},[164,6558,6559],{},[167,6560,248],{},[171,6562,248],{"encoding":173},[148,6564,6566],{"className":6565,"ariaHidden":179},[178],[148,6567,6569,6572],{"className":6568},[183],[148,6570],{"className":6571,"style":6543},[187],[148,6573,248],{"className":6574,"style":593},[192,193],[6485,6576,6577],{},"动画旋转",[148,6579,6581,6594],{"className":6580},[151],[148,6582,6584],{"className":6583},[155],[157,6585,6586],{"xmlns":159},[161,6587,6588,6592],{},[164,6589,6590],{},[167,6591,266],{},[171,6593,266],{"encoding":173},[148,6595,6597],{"className":6596,"ariaHidden":179},[178],[148,6598,6600,6603],{"className":6599},[183],[148,6601],{"className":6602,"style":278},[187],[148,6604,266],{"className":6605},[192,193],[148,6607,6609,6622],{"className":6608},[151],[148,6610,6612],{"className":6611},[155],[157,6613,6614],{"xmlns":159},[161,6615,6616,6620],{},[164,6617,6618],{},[167,6619,297],{},[171,6621,297],{"encoding":173},[148,6623,6625],{"className":6624,"ariaHidden":179},[178],[148,6626,6628,6631],{"className":6627},[183],[148,6629],{"className":6630,"style":278},[187],[148,6632,297],{"className":6633,"style":312},[192,193]," 轴旋转整个环面，产生我们看到的三维旋转效果。这两层旋转在矩阵乘法中是叠加在一起的。",[1111,6636,6637],{"id":6637},"旋转与展开",[13,6639,6640,6641,1022,6669,6697,6698,6726,6727,6755,6756,6726,6784,6812],{},"但是还需要让整个甜甜圈绕至少两个轴旋转来实现动画。它们在原始代码中被称为 ",[148,6642,6644,6657],{"className":6643},[151],[148,6645,6647],{"className":6646},[155],[157,6648,6649],{"xmlns":159},[161,6650,6651,6655],{},[164,6652,6653],{},[167,6654,244],{},[171,6656,244],{"encoding":173},[148,6658,6660],{"className":6659,"ariaHidden":179},[178],[148,6661,6663,6666],{"className":6662},[183],[148,6664],{"className":6665,"style":6543},[187],[148,6667,244],{"className":6668},[192,193],[148,6670,6672,6685],{"className":6671},[151],[148,6673,6675],{"className":6674},[155],[157,6676,6677],{"xmlns":159},[161,6678,6679,6683],{},[164,6680,6681],{},[167,6682,248],{},[171,6684,248],{"encoding":173},[148,6686,6688],{"className":6687,"ariaHidden":179},[178],[148,6689,6691,6694],{"className":6690},[183],[148,6692],{"className":6693,"style":6543},[187],[148,6695,248],{"className":6696,"style":593},[192,193],"：一个是绕 ",[148,6699,6701,6714],{"className":6700},[151],[148,6702,6704],{"className":6703},[155],[157,6705,6706],{"xmlns":159},[161,6707,6708,6712],{},[164,6709,6710],{},[167,6711,266],{},[171,6713,266],{"encoding":173},[148,6715,6717],{"className":6716,"ariaHidden":179},[178],[148,6718,6720,6723],{"className":6719},[183],[148,6721],{"className":6722,"style":278},[187],[148,6724,266],{"className":6725},[192,193]," 轴旋转 ",[148,6728,6730,6743],{"className":6729},[151],[148,6731,6733],{"className":6732},[155],[157,6734,6735],{"xmlns":159},[161,6736,6737,6741],{},[164,6738,6739],{},[167,6740,244],{},[171,6742,244],{"encoding":173},[148,6744,6746],{"className":6745,"ariaHidden":179},[178],[148,6747,6749,6752],{"className":6748},[183],[148,6750],{"className":6751,"style":6543},[187],[148,6753,244],{"className":6754},[192,193],"，另一个是绕 ",[148,6757,6759,6772],{"className":6758},[151],[148,6760,6762],{"className":6761},[155],[157,6763,6764],{"xmlns":159},[161,6765,6766,6770],{},[164,6767,6768],{},[167,6769,297],{},[171,6771,297],{"encoding":173},[148,6773,6775],{"className":6774,"ariaHidden":179},[178],[148,6776,6778,6781],{"className":6777},[183],[148,6779],{"className":6780,"style":278},[187],[148,6782,297],{"className":6783,"style":312},[192,193],[148,6785,6787,6800],{"className":6786},[151],[148,6788,6790],{"className":6789},[155],[157,6791,6792],{"xmlns":159},[161,6793,6794,6798],{},[164,6795,6796],{},[167,6797,248],{},[171,6799,248],{"encoding":173},[148,6801,6803],{"className":6802,"ariaHidden":179},[178],[148,6804,6806,6809],{"className":6805},[183],[148,6807],{"className":6808,"style":6543},[187],[148,6810,248],{"className":6811,"style":593},[192,193],"。这更复杂一些，但它是一堆矩阵乘法：",[148,6814,6816],{"className":6815},[1732],[148,6817,6819,7183],{"className":6818},[151],[148,6820,6822],{"className":6821},[155],[157,6823,6824],{"xmlns":159,"display":1741},[161,6825,6826,7180],{},[164,6827,6828,6892,6894,6988,6990,7084,7086],{},[164,6829,6830,6832,6890],{},[339,6831,1140],{"fence":179},[1745,6833,6834],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,6835,6836,6864,6884],{},[1753,6837,6838],{},[1756,6839,6840],{"scriptlevel":1758,"displaystyle":1139},[164,6841,6842,6848,6850,6856,6858,6860,6862],{},[631,6843,6844,6846],{},[167,6845,635],{},[637,6847,639],{},[339,6849,642],{},[631,6851,6852,6854],{},[167,6853,635],{},[637,6855,649],{},[167,6857,349],{},[339,6859,341],{},[167,6861,169],{},[339,6863,346],{"separator":179},[1753,6865,6866],{},[1756,6867,6868],{"scriptlevel":1758,"displaystyle":1139},[164,6869,6870,6876,6878,6880,6882],{},[631,6871,6872,6874],{},[167,6873,635],{},[637,6875,649],{},[167,6877,337],{},[339,6879,341],{},[167,6881,169],{},[339,6883,346],{"separator":179},[1753,6885,6886],{},[1756,6887,6888],{"scriptlevel":1758,"displaystyle":1139},[637,6889,1758],{},[339,6891,1153],{"fence":179},[339,6893,5146],{},[164,6895,6896,6898,6986],{},[339,6897,1140],{"fence":179},[1745,6899,6900,6932,6952],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,6901,6902,6914,6920],{},[1753,6903,6904],{},[1756,6905,6906],{"scriptlevel":1758,"displaystyle":1139},[164,6907,6908,6910,6912],{},[167,6909,349],{},[339,6911,341],{},[167,6913,220],{},[1753,6915,6916],{},[1756,6917,6918],{"scriptlevel":1758,"displaystyle":1139},[637,6919,1758],{},[1753,6921,6922],{},[1756,6923,6924],{"scriptlevel":1758,"displaystyle":1139},[164,6925,6926,6928,6930],{},[167,6927,337],{},[339,6929,341],{},[167,6931,220],{},[1750,6933,6934,6940,6946],{},[1753,6935,6936],{},[1756,6937,6938],{"scriptlevel":1758,"displaystyle":1139},[637,6939,1758],{},[1753,6941,6942],{},[1756,6943,6944],{"scriptlevel":1758,"displaystyle":1139},[637,6945,649],{},[1753,6947,6948],{},[1756,6949,6950],{"scriptlevel":1758,"displaystyle":1139},[637,6951,1758],{},[1750,6953,6954,6968,6974],{},[1753,6955,6956],{},[1756,6957,6958],{"scriptlevel":1758,"displaystyle":1139},[164,6959,6960,6962,6964,6966],{},[339,6961,942],{},[167,6963,337],{},[339,6965,341],{},[167,6967,220],{},[1753,6969,6970],{},[1756,6971,6972],{"scriptlevel":1758,"displaystyle":1139},[637,6973,1758],{},[1753,6975,6976],{},[1756,6977,6978],{"scriptlevel":1758,"displaystyle":1139},[164,6979,6980,6982,6984],{},[167,6981,349],{},[339,6983,341],{},[167,6985,220],{},[339,6987,1153],{"fence":179},[339,6989,5146],{},[164,6991,6992,6994,7082],{},[339,6993,1140],{"fence":179},[1745,6995,6996,7016,7048],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,6997,6998,7004,7010],{},[1753,6999,7000],{},[1756,7001,7002],{"scriptlevel":1758,"displaystyle":1139},[637,7003,649],{},[1753,7005,7006],{},[1756,7007,7008],{"scriptlevel":1758,"displaystyle":1139},[637,7009,1758],{},[1753,7011,7012],{},[1756,7013,7014],{"scriptlevel":1758,"displaystyle":1139},[637,7015,1758],{},[1750,7017,7018,7024,7036],{},[1753,7019,7020],{},[1756,7021,7022],{"scriptlevel":1758,"displaystyle":1139},[637,7023,1758],{},[1753,7025,7026],{},[1756,7027,7028],{"scriptlevel":1758,"displaystyle":1139},[164,7029,7030,7032,7034],{},[167,7031,349],{},[339,7033,341],{},[167,7035,244],{},[1753,7037,7038],{},[1756,7039,7040],{"scriptlevel":1758,"displaystyle":1139},[164,7041,7042,7044,7046],{},[167,7043,337],{},[339,7045,341],{},[167,7047,244],{},[1750,7049,7050,7056,7070],{},[1753,7051,7052],{},[1756,7053,7054],{"scriptlevel":1758,"displaystyle":1139},[637,7055,1758],{},[1753,7057,7058],{},[1756,7059,7060],{"scriptlevel":1758,"displaystyle":1139},[164,7061,7062,7064,7066,7068],{},[339,7063,942],{},[167,7065,337],{},[339,7067,341],{},[167,7069,244],{},[1753,7071,7072],{},[1756,7073,7074],{"scriptlevel":1758,"displaystyle":1139},[164,7075,7076,7078,7080],{},[167,7077,349],{},[339,7079,341],{},[167,7081,244],{},[339,7083,1153],{"fence":179},[339,7085,5146],{},[164,7087,7088,7090,7178],{},[339,7089,1140],{"fence":179},[1745,7091,7092,7124,7158],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,7093,7094,7106,7118],{},[1753,7095,7096],{},[1756,7097,7098],{"scriptlevel":1758,"displaystyle":1139},[164,7099,7100,7102,7104],{},[167,7101,349],{},[339,7103,341],{},[167,7105,248],{},[1753,7107,7108],{},[1756,7109,7110],{"scriptlevel":1758,"displaystyle":1139},[164,7111,7112,7114,7116],{},[167,7113,337],{},[339,7115,341],{},[167,7117,248],{},[1753,7119,7120],{},[1756,7121,7122],{"scriptlevel":1758,"displaystyle":1139},[637,7123,1758],{},[1750,7125,7126,7140,7152],{},[1753,7127,7128],{},[1756,7129,7130],{"scriptlevel":1758,"displaystyle":1139},[164,7131,7132,7134,7136,7138],{},[339,7133,942],{},[167,7135,337],{},[339,7137,341],{},[167,7139,248],{},[1753,7141,7142],{},[1756,7143,7144],{"scriptlevel":1758,"displaystyle":1139},[164,7145,7146,7148,7150],{},[167,7147,349],{},[339,7149,341],{},[167,7151,248],{},[1753,7153,7154],{},[1756,7155,7156],{"scriptlevel":1758,"displaystyle":1139},[637,7157,1758],{},[1750,7159,7160,7166,7172],{},[1753,7161,7162],{},[1756,7163,7164],{"scriptlevel":1758,"displaystyle":1139},[637,7165,1758],{},[1753,7167,7168],{},[1756,7169,7170],{"scriptlevel":1758,"displaystyle":1139},[637,7171,1758],{},[1753,7173,7174],{},[1756,7175,7176],{"scriptlevel":1758,"displaystyle":1139},[637,7177,649],{},[339,7179,1153],{"fence":179},[171,7181,7182],{"encoding":173},"\\left( \\begin{matrix}\nR_2 + R_1 \\cos \\theta, &\nR_1 \\sin \\theta, &\n0 \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n\\cos \\phi & 0 & \\sin \\phi \\\\\n0 & 1 & 0 \\\\\n-\\sin \\phi & 0 & \\cos \\phi \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n1 & 0 & 0 \\\\\n0 & \\cos A & \\sin A \\\\\n0 & -\\sin A & \\cos A \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n\\cos B & \\sin B & 0 \\\\\n-\\sin B & \\cos B & 0 \\\\\n0 & 0 & 1 \\end{matrix} \\right)",[148,7184,7186,7489,7797,8105],{"className":7185,"ariaHidden":179},[178],[148,7187,7189,7192,7480,7483,7486],{"className":7188},[183],[148,7190],{"className":7191,"style":5253},[187],[148,7193,7195,7201,7474],{"className":7194},[2659],[148,7196,7198],{"className":7197,"style":2664},[1169,2663],[148,7199,1140],{"className":7200},[2668,5263],[148,7202,7204],{"className":7203},[192],[148,7205,7207,7342,7345,7348,7434,7437,7440],{"className":7206},[1745],[148,7208,7210],{"className":7209},[5273],[148,7211,7213,7334],{"className":7212},[683,684],[148,7214,7216,7331],{"className":7215},[688],[148,7217,7219],{"className":7218,"style":5283},[692],[148,7220,7221,7224],{"style":5286},[148,7222],{"className":7223,"style":1896},[700],[148,7225,7227,7267,7270,7273,7276,7316,7319,7322,7325,7328],{"className":7226},[192],[148,7228,7230,7233],{"className":7229},[192],[148,7231,635],{"className":7232,"style":675},[192,193],[148,7234,7236],{"className":7235},[679],[148,7237,7239,7259],{"className":7238},[683,684],[148,7240,7242,7256],{"className":7241},[688],[148,7243,7245],{"className":7244,"style":693},[692],[148,7246,7247,7250],{"style":696},[148,7248],{"className":7249,"style":701},[700],[148,7251,7253],{"className":7252},[705,706,707,708],[148,7254,639],{"className":7255},[192,708],[148,7257,716],{"className":7258},[715],[148,7260,7262],{"className":7261},[688],[148,7263,7265],{"className":7264,"style":723},[692],[148,7266],{},[148,7268],{"className":7269,"style":729},[373],[148,7271,642],{"className":7272},[733],[148,7274],{"className":7275,"style":729},[373],[148,7277,7279,7282],{"className":7278},[192],[148,7280,635],{"className":7281,"style":675},[192,193],[148,7283,7285],{"className":7284},[679],[148,7286,7288,7308],{"className":7287},[683,684],[148,7289,7291,7305],{"className":7290},[688],[148,7292,7294],{"className":7293,"style":693},[692],[148,7295,7296,7299],{"style":696},[148,7297],{"className":7298,"style":701},[700],[148,7300,7302],{"className":7301},[705,706,707,708],[148,7303,649],{"className":7304},[192,708],[148,7306,716],{"className":7307},[715],[148,7309,7311],{"className":7310},[688],[148,7312,7314],{"className":7313,"style":723},[692],[148,7315],{},[148,7317],{"className":7318,"style":374},[373],[148,7320,349],{"className":7321},[369],[148,7323],{"className":7324,"style":374},[373],[148,7326,169],{"className":7327,"style":194},[192,193],[148,7329,346],{"className":7330},[381],[148,7332,716],{"className":7333},[715],[148,7335,7337],{"className":7336},[688],[148,7338,7340],{"className":7339,"style":5406},[692],[148,7341],{},[148,7343],{"className":7344,"style":5413},[5412],[148,7346],{"className":7347,"style":5413},[5412],[148,7349,7351],{"className":7350},[5273],[148,7352,7354,7426],{"className":7353},[683,684],[148,7355,7357,7423],{"className":7356},[688],[148,7358,7360],{"className":7359,"style":5283},[692],[148,7361,7362,7365],{"style":5286},[148,7363],{"className":7364,"style":1896},[700],[148,7366,7368,7408,7411,7414,7417,7420],{"className":7367},[192],[148,7369,7371,7374],{"className":7370},[192],[148,7372,635],{"className":7373,"style":675},[192,193],[148,7375,7377],{"className":7376},[679],[148,7378,7380,7400],{"className":7379},[683,684],[148,7381,7383,7397],{"className":7382},[688],[148,7384,7386],{"className":7385,"style":693},[692],[148,7387,7388,7391],{"style":696},[148,7389],{"className":7390,"style":701},[700],[148,7392,7394],{"className":7393},[705,706,707,708],[148,7395,649],{"className":7396},[192,708],[148,7398,716],{"className":7399},[715],[148,7401,7403],{"className":7402},[688],[148,7404,7406],{"className":7405,"style":723},[692],[148,7407],{},[148,7409],{"className":7410,"style":374},[373],[148,7412,337],{"className":7413},[369],[148,7415],{"className":7416,"style":374},[373],[148,7418,169],{"className":7419,"style":194},[192,193],[148,7421,346],{"className":7422},[381],[148,7424,716],{"className":7425},[715],[148,7427,7429],{"className":7428},[688],[148,7430,7432],{"className":7431,"style":5406},[692],[148,7433],{},[148,7435],{"className":7436,"style":5413},[5412],[148,7438],{"className":7439,"style":5413},[5412],[148,7441,7443],{"className":7442},[5273],[148,7444,7446,7466],{"className":7445},[683,684],[148,7447,7449,7463],{"className":7448},[688],[148,7450,7452],{"className":7451,"style":5283},[692],[148,7453,7454,7457],{"style":5286},[148,7455],{"className":7456,"style":1896},[700],[148,7458,7460],{"className":7459},[192],[148,7461,1758],{"className":7462},[192],[148,7464,716],{"className":7465},[715],[148,7467,7469],{"className":7468},[688],[148,7470,7472],{"className":7471,"style":5406},[692],[148,7473],{},[148,7475,7477],{"className":7476,"style":2664},[1194,2663],[148,7478,1153],{"className":7479},[2668,5263],[148,7481],{"className":7482,"style":729},[373],[148,7484,5146],{"className":7485},[733],[148,7487],{"className":7488,"style":729},[373],[148,7490,7492,7495,7788,7791,7794],{"className":7491},[183],[148,7493],{"className":7494,"style":5564},[187],[148,7496,7498,7535,7751],{"className":7497},[2659],[148,7499,7501],{"className":7500},[1169],[148,7502,7504],{"className":7503},[2668,5574],[148,7505,7507,7527],{"className":7506},[683,684],[148,7508,7510,7524],{"className":7509},[688],[148,7511,7513],{"className":7512,"style":5584},[692],[148,7514,7515,7518],{"style":5587},[148,7516],{"className":7517,"style":5591},[700],[148,7519,7520],{"style":5594},[5596,7521,7522],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,7523],{"d":5605},[148,7525,716],{"className":7526},[715],[148,7528,7530],{"className":7529},[688],[148,7531,7533],{"className":7532,"style":5615},[692],[148,7534],{},[148,7536,7538],{"className":7537},[192],[148,7539,7541,7615,7618,7621,7677,7680,7683],{"className":7540},[1745],[148,7542,7544],{"className":7543},[5273],[148,7545,7547,7607],{"className":7546},[683,684],[148,7548,7550,7604],{"className":7549},[688],[148,7551,7553,7570,7581],{"className":7552,"style":5584},[692],[148,7554,7555,7558],{"style":5638},[148,7556],{"className":7557,"style":1896},[700],[148,7559,7561,7564,7567],{"className":7560},[192],[148,7562,349],{"className":7563},[369],[148,7565],{"className":7566,"style":374},[373],[148,7568,220],{"className":7569},[192,193],[148,7571,7572,7575],{"style":5286},[148,7573],{"className":7574,"style":1896},[700],[148,7576,7578],{"className":7577},[192],[148,7579,1758],{"className":7580},[192],[148,7582,7583,7586],{"style":5667},[148,7584],{"className":7585,"style":1896},[700],[148,7587,7589,7592,7595,7598,7601],{"className":7588},[192],[148,7590,942],{"className":7591},[192],[148,7593],{"className":7594,"style":374},[373],[148,7596,337],{"className":7597},[369],[148,7599],{"className":7600,"style":374},[373],[148,7602,220],{"className":7603},[192,193],[148,7605,716],{"className":7606},[715],[148,7608,7610],{"className":7609},[688],[148,7611,7613],{"className":7612,"style":5615},[692],[148,7614],{},[148,7616],{"className":7617,"style":5413},[5412],[148,7619],{"className":7620,"style":5413},[5412],[148,7622,7624],{"className":7623},[5273],[148,7625,7627,7669],{"className":7626},[683,684],[148,7628,7630,7666],{"className":7629},[688],[148,7631,7633,7644,7655],{"className":7632,"style":5584},[692],[148,7634,7635,7638],{"style":5638},[148,7636],{"className":7637,"style":1896},[700],[148,7639,7641],{"className":7640},[192],[148,7642,1758],{"className":7643},[192],[148,7645,7646,7649],{"style":5286},[148,7647],{"className":7648,"style":1896},[700],[148,7650,7652],{"className":7651},[192],[148,7653,649],{"className":7654},[192],[148,7656,7657,7660],{"style":5667},[148,7658],{"className":7659,"style":1896},[700],[148,7661,7663],{"className":7662},[192],[148,7664,1758],{"className":7665},[192],[148,7667,716],{"className":7668},[715],[148,7670,7672],{"className":7671},[688],[148,7673,7675],{"className":7674,"style":5615},[692],[148,7676],{},[148,7678],{"className":7679,"style":5413},[5412],[148,7681],{"className":7682,"style":5413},[5412],[148,7684,7686],{"className":7685},[5273],[148,7687,7689,7743],{"className":7688},[683,684],[148,7690,7692,7740],{"className":7691},[688],[148,7693,7695,7712,7723],{"className":7694,"style":5584},[692],[148,7696,7697,7700],{"style":5638},[148,7698],{"className":7699,"style":1896},[700],[148,7701,7703,7706,7709],{"className":7702},[192],[148,7704,337],{"className":7705},[369],[148,7707],{"className":7708,"style":374},[373],[148,7710,220],{"className":7711},[192,193],[148,7713,7714,7717],{"style":5286},[148,7715],{"className":7716,"style":1896},[700],[148,7718,7720],{"className":7719},[192],[148,7721,1758],{"className":7722},[192],[148,7724,7725,7728],{"style":5667},[148,7726],{"className":7727,"style":1896},[700],[148,7729,7731,7734,7737],{"className":7730},[192],[148,7732,349],{"className":7733},[369],[148,7735],{"className":7736,"style":374},[373],[148,7738,220],{"className":7739},[192,193],[148,7741,716],{"className":7742},[715],[148,7744,7746],{"className":7745},[688],[148,7747,7749],{"className":7748,"style":5615},[692],[148,7750],{},[148,7752,7754],{"className":7753},[1194],[148,7755,7757],{"className":7756},[2668,5574],[148,7758,7760,7780],{"className":7759},[683,684],[148,7761,7763,7777],{"className":7762},[688],[148,7764,7766],{"className":7765,"style":5584},[692],[148,7767,7768,7771],{"style":5587},[148,7769],{"className":7770,"style":5591},[700],[148,7772,7773],{"style":5594},[5596,7774,7775],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,7776],{"d":5862},[148,7778,716],{"className":7779},[715],[148,7781,7783],{"className":7782},[688],[148,7784,7786],{"className":7785,"style":5615},[692],[148,7787],{},[148,7789],{"className":7790,"style":729},[373],[148,7792,5146],{"className":7793},[733],[148,7795],{"className":7796,"style":729},[373],[148,7798,7800,7803,8096,8099,8102],{"className":7799},[183],[148,7801],{"className":7802,"style":5564},[187],[148,7804,7806,7843,8059],{"className":7805},[2659],[148,7807,7809],{"className":7808},[1169],[148,7810,7812],{"className":7811},[2668,5574],[148,7813,7815,7835],{"className":7814},[683,684],[148,7816,7818,7832],{"className":7817},[688],[148,7819,7821],{"className":7820,"style":5584},[692],[148,7822,7823,7826],{"style":5587},[148,7824],{"className":7825,"style":5591},[700],[148,7827,7828],{"style":5594},[5596,7829,7830],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,7831],{"d":5605},[148,7833,716],{"className":7834},[715],[148,7836,7838],{"className":7837},[688],[148,7839,7841],{"className":7840,"style":5615},[692],[148,7842],{},[148,7844,7846],{"className":7845},[192],[148,7847,7849,7905,7908,7911,7985,7988,7991],{"className":7848},[1745],[148,7850,7852],{"className":7851},[5273],[148,7853,7855,7897],{"className":7854},[683,684],[148,7856,7858,7894],{"className":7857},[688],[148,7859,7861,7872,7883],{"className":7860,"style":5584},[692],[148,7862,7863,7866],{"style":5638},[148,7864],{"className":7865,"style":1896},[700],[148,7867,7869],{"className":7868},[192],[148,7870,649],{"className":7871},[192],[148,7873,7874,7877],{"style":5286},[148,7875],{"className":7876,"style":1896},[700],[148,7878,7880],{"className":7879},[192],[148,7881,1758],{"className":7882},[192],[148,7884,7885,7888],{"style":5667},[148,7886],{"className":7887,"style":1896},[700],[148,7889,7891],{"className":7890},[192],[148,7892,1758],{"className":7893},[192],[148,7895,716],{"className":7896},[715],[148,7898,7900],{"className":7899},[688],[148,7901,7903],{"className":7902,"style":5615},[692],[148,7904],{},[148,7906],{"className":7907,"style":5413},[5412],[148,7909],{"className":7910,"style":5413},[5412],[148,7912,7914],{"className":7913},[5273],[148,7915,7917,7977],{"className":7916},[683,684],[148,7918,7920,7974],{"className":7919},[688],[148,7921,7923,7934,7951],{"className":7922,"style":5584},[692],[148,7924,7925,7928],{"style":5638},[148,7926],{"className":7927,"style":1896},[700],[148,7929,7931],{"className":7930},[192],[148,7932,1758],{"className":7933},[192],[148,7935,7936,7939],{"style":5286},[148,7937],{"className":7938,"style":1896},[700],[148,7940,7942,7945,7948],{"className":7941},[192],[148,7943,349],{"className":7944},[369],[148,7946],{"className":7947,"style":374},[373],[148,7949,244],{"className":7950},[192,193],[148,7952,7953,7956],{"style":5667},[148,7954],{"className":7955,"style":1896},[700],[148,7957,7959,7962,7965,7968,7971],{"className":7958},[192],[148,7960,942],{"className":7961},[192],[148,7963],{"className":7964,"style":374},[373],[148,7966,337],{"className":7967},[369],[148,7969],{"className":7970,"style":374},[373],[148,7972,244],{"className":7973},[192,193],[148,7975,716],{"className":7976},[715],[148,7978,7980],{"className":7979},[688],[148,7981,7983],{"className":7982,"style":5615},[692],[148,7984],{},[148,7986],{"className":7987,"style":5413},[5412],[148,7989],{"className":7990,"style":5413},[5412],[148,7992,7994],{"className":7993},[5273],[148,7995,7997,8051],{"className":7996},[683,684],[148,7998,8000,8048],{"className":7999},[688],[148,8001,8003,8014,8031],{"className":8002,"style":5584},[692],[148,8004,8005,8008],{"style":5638},[148,8006],{"className":8007,"style":1896},[700],[148,8009,8011],{"className":8010},[192],[148,8012,1758],{"className":8013},[192],[148,8015,8016,8019],{"style":5286},[148,8017],{"className":8018,"style":1896},[700],[148,8020,8022,8025,8028],{"className":8021},[192],[148,8023,337],{"className":8024},[369],[148,8026],{"className":8027,"style":374},[373],[148,8029,244],{"className":8030},[192,193],[148,8032,8033,8036],{"style":5667},[148,8034],{"className":8035,"style":1896},[700],[148,8037,8039,8042,8045],{"className":8038},[192],[148,8040,349],{"className":8041},[369],[148,8043],{"className":8044,"style":374},[373],[148,8046,244],{"className":8047},[192,193],[148,8049,716],{"className":8050},[715],[148,8052,8054],{"className":8053},[688],[148,8055,8057],{"className":8056,"style":5615},[692],[148,8058],{},[148,8060,8062],{"className":8061},[1194],[148,8063,8065],{"className":8064},[2668,5574],[148,8066,8068,8088],{"className":8067},[683,684],[148,8069,8071,8085],{"className":8070},[688],[148,8072,8074],{"className":8073,"style":5584},[692],[148,8075,8076,8079],{"style":5587},[148,8077],{"className":8078,"style":5591},[700],[148,8080,8081],{"style":5594},[5596,8082,8083],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,8084],{"d":5862},[148,8086,716],{"className":8087},[715],[148,8089,8091],{"className":8090},[688],[148,8092,8094],{"className":8093,"style":5615},[692],[148,8095],{},[148,8097],{"className":8098,"style":729},[373],[148,8100,5146],{"className":8101},[733],[148,8103],{"className":8104,"style":729},[373],[148,8106,8108,8111],{"className":8107},[183],[148,8109],{"className":8110,"style":5564},[187],[148,8112,8114,8151,8367],{"className":8113},[2659],[148,8115,8117],{"className":8116},[1169],[148,8118,8120],{"className":8119},[2668,5574],[148,8121,8123,8143],{"className":8122},[683,684],[148,8124,8126,8140],{"className":8125},[688],[148,8127,8129],{"className":8128,"style":5584},[692],[148,8130,8131,8134],{"style":5587},[148,8132],{"className":8133,"style":5591},[700],[148,8135,8136],{"style":5594},[5596,8137,8138],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,8139],{"d":5605},[148,8141,716],{"className":8142},[715],[148,8144,8146],{"className":8145},[688],[148,8147,8149],{"className":8148,"style":5615},[692],[148,8150],{},[148,8152,8154],{"className":8153},[192],[148,8155,8157,8231,8234,8237,8305,8308,8311],{"className":8156},[1745],[148,8158,8160],{"className":8159},[5273],[148,8161,8163,8223],{"className":8162},[683,684],[148,8164,8166,8220],{"className":8165},[688],[148,8167,8169,8186,8209],{"className":8168,"style":5584},[692],[148,8170,8171,8174],{"style":5638},[148,8172],{"className":8173,"style":1896},[700],[148,8175,8177,8180,8183],{"className":8176},[192],[148,8178,349],{"className":8179},[369],[148,8181],{"className":8182,"style":374},[373],[148,8184,248],{"className":8185,"style":593},[192,193],[148,8187,8188,8191],{"style":5286},[148,8189],{"className":8190,"style":1896},[700],[148,8192,8194,8197,8200,8203,8206],{"className":8193},[192],[148,8195,942],{"className":8196},[192],[148,8198],{"className":8199,"style":374},[373],[148,8201,337],{"className":8202},[369],[148,8204],{"className":8205,"style":374},[373],[148,8207,248],{"className":8208,"style":593},[192,193],[148,8210,8211,8214],{"style":5667},[148,8212],{"className":8213,"style":1896},[700],[148,8215,8217],{"className":8216},[192],[148,8218,1758],{"className":8219},[192],[148,8221,716],{"className":8222},[715],[148,8224,8226],{"className":8225},[688],[148,8227,8229],{"className":8228,"style":5615},[692],[148,8230],{},[148,8232],{"className":8233,"style":5413},[5412],[148,8235],{"className":8236,"style":5413},[5412],[148,8238,8240],{"className":8239},[5273],[148,8241,8243,8297],{"className":8242},[683,684],[148,8244,8246,8294],{"className":8245},[688],[148,8247,8249,8266,8283],{"className":8248,"style":5584},[692],[148,8250,8251,8254],{"style":5638},[148,8252],{"className":8253,"style":1896},[700],[148,8255,8257,8260,8263],{"className":8256},[192],[148,8258,337],{"className":8259},[369],[148,8261],{"className":8262,"style":374},[373],[148,8264,248],{"className":8265,"style":593},[192,193],[148,8267,8268,8271],{"style":5286},[148,8269],{"className":8270,"style":1896},[700],[148,8272,8274,8277,8280],{"className":8273},[192],[148,8275,349],{"className":8276},[369],[148,8278],{"className":8279,"style":374},[373],[148,8281,248],{"className":8282,"style":593},[192,193],[148,8284,8285,8288],{"style":5667},[148,8286],{"className":8287,"style":1896},[700],[148,8289,8291],{"className":8290},[192],[148,8292,1758],{"className":8293},[192],[148,8295,716],{"className":8296},[715],[148,8298,8300],{"className":8299},[688],[148,8301,8303],{"className":8302,"style":5615},[692],[148,8304],{},[148,8306],{"className":8307,"style":5413},[5412],[148,8309],{"className":8310,"style":5413},[5412],[148,8312,8314],{"className":8313},[5273],[148,8315,8317,8359],{"className":8316},[683,684],[148,8318,8320,8356],{"className":8319},[688],[148,8321,8323,8334,8345],{"className":8322,"style":5584},[692],[148,8324,8325,8328],{"style":5638},[148,8326],{"className":8327,"style":1896},[700],[148,8329,8331],{"className":8330},[192],[148,8332,1758],{"className":8333},[192],[148,8335,8336,8339],{"style":5286},[148,8337],{"className":8338,"style":1896},[700],[148,8340,8342],{"className":8341},[192],[148,8343,1758],{"className":8344},[192],[148,8346,8347,8350],{"style":5667},[148,8348],{"className":8349,"style":1896},[700],[148,8351,8353],{"className":8352},[192],[148,8354,649],{"className":8355},[192],[148,8357,716],{"className":8358},[715],[148,8360,8362],{"className":8361},[688],[148,8363,8365],{"className":8364,"style":5615},[692],[148,8366],{},[148,8368,8370],{"className":8369},[1194],[148,8371,8373],{"className":8372},[2668,5574],[148,8374,8376,8396],{"className":8375},[683,684],[148,8377,8379,8393],{"className":8378},[688],[148,8380,8382],{"className":8381,"style":5584},[692],[148,8383,8384,8387],{"style":5587},[148,8385],{"className":8386,"style":5591},[700],[148,8388,8389],{"style":5594},[5596,8390,8391],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,8392],{"d":5862},[148,8394,716],{"className":8395},[715],[148,8397,8399],{"className":8398},[688],[148,8400,8402],{"className":8401,"style":5615},[692],[148,8403],{},[13,8405,8406,8407,8471],{},"通过以上计算，得到了环面上的一个 ",[148,8408,8410,8435],{"className":8409},[151],[148,8411,8413],{"className":8412},[155],[157,8414,8415],{"xmlns":159},[161,8416,8417,8433],{},[164,8418,8419,8421,8423,8425,8427,8429,8431],{},[339,8420,1140],{"stretchy":1139},[167,8422,266],{},[339,8424,346],{"separator":179},[167,8426,1037],{},[339,8428,346],{"separator":179},[167,8430,297],{},[339,8432,1153],{"stretchy":1139},[171,8434,1156],{"encoding":173},[148,8436,8438],{"className":8437,"ariaHidden":179},[178],[148,8439,8441,8444,8447,8450,8453,8456,8459,8462,8465,8468],{"className":8440},[183],[148,8442],{"className":8443,"style":902},[187],[148,8445,1140],{"className":8446},[1169],[148,8448,266],{"className":8449},[192,193],[148,8451,346],{"className":8452},[381],[148,8454],{"className":8455,"style":374},[373],[148,8457,1037],{"className":8458,"style":970},[192,193],[148,8460,346],{"className":8461},[381],[148,8463],{"className":8464,"style":374},[373],[148,8466,297],{"className":8467,"style":312},[192,193],[148,8469,1153],{"className":8470},[1194]," 点，绕两个轴旋转，以原点为中心。要实际获得屏幕坐标，需要：",[3718,8473,8474,8506],{},[3721,8475,8476,8477,8505],{},"将环面移到观察者前方（观察者在原点）——只需给 ",[148,8478,8480,8493],{"className":8479},[151],[148,8481,8483],{"className":8482},[155],[157,8484,8485],{"xmlns":159},[161,8486,8487,8491],{},[164,8488,8489],{},[167,8490,297],{},[171,8492,297],{"encoding":173},[148,8494,8496],{"className":8495,"ariaHidden":179},[178],[148,8497,8499,8502],{"className":8498},[183],[148,8500],{"className":8501,"style":278},[187],[148,8503,297],{"className":8504,"style":312},[192,193]," 加上某个常数使其向后移动",[3721,8507,8508],{},"从 3D 投影到 2D 屏幕",[13,8510,8511,8512,8582],{},"所以有另一个常数需要选择，称之为 ",[148,8513,8515,8533],{"className":8514},[151],[148,8516,8518],{"className":8517},[155],[157,8519,8520],{"xmlns":159},[161,8521,8522,8530],{},[164,8523,8524],{},[631,8525,8526,8528],{},[167,8527,2422],{},[637,8529,639],{},[171,8531,8532],{"encoding":173},"K_2",[148,8534,8536],{"className":8535,"ariaHidden":179},[178],[148,8537,8539,8542],{"className":8538},[183],[148,8540],{"className":8541,"style":668},[187],[148,8543,8545,8548],{"className":8544},[192],[148,8546,2422],{"className":8547,"style":2443},[192,193],[148,8549,8551],{"className":8550},[679],[148,8552,8554,8574],{"className":8553},[683,684],[148,8555,8557,8571],{"className":8556},[688],[148,8558,8560],{"className":8559,"style":693},[692],[148,8561,8562,8565],{"style":2458},[148,8563],{"className":8564,"style":701},[700],[148,8566,8568],{"className":8567},[705,706,707,708],[148,8569,639],{"className":8570},[192,708],[148,8572,716],{"className":8573},[715],[148,8575,8577],{"className":8576},[688],[148,8578,8580],{"className":8579,"style":723},[692],[148,8581],{},"，表示甜甜圈到观察者的距离，投影公式变为：",[148,8584,8586],{"className":8585},[1732],[148,8587,8589,8679],{"className":8588},[151],[148,8590,8592],{"className":8591},[155],[157,8593,8594],{"xmlns":159,"display":1741},[161,8595,8596,8676],{},[164,8597,8598,8618,8620],{},[164,8599,8600,8602,8608,8610,8616],{},[339,8601,1140],{"fence":179},[1209,8603,8604,8606],{},[167,8605,266],{},[339,8607,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,8609,346],{"separator":179},[1209,8611,8612,8614],{},[167,8613,1037],{},[339,8615,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,8617,1153],{"fence":179},[339,8619,1784],{},[164,8621,8622,8624,8648,8650,8674],{},[339,8623,1140],{"fence":179},[1760,8625,8626,8636],{},[164,8627,8628,8634],{},[631,8629,8630,8632],{},[167,8631,2422],{},[637,8633,649],{},[167,8635,266],{},[164,8637,8638,8644,8646],{},[631,8639,8640,8642],{},[167,8641,2422],{},[637,8643,639],{},[339,8645,642],{},[167,8647,297],{},[339,8649,346],{"separator":179},[1760,8651,8652,8662],{},[164,8653,8654,8660],{},[631,8655,8656,8658],{},[167,8657,2422],{},[637,8659,649],{},[167,8661,1037],{},[164,8663,8664,8670,8672],{},[631,8665,8666,8668],{},[167,8667,2422],{},[637,8669,639],{},[339,8671,642],{},[167,8673,297],{},[339,8675,1153],{"fence":179},[171,8677,8678],{"encoding":173},"\\left( x', y' \\right)\n=\n\\left( \\frac{K_1 x}{K_2 + z}, \\frac{K_1 y}{K_2 + z} \\right)",[148,8680,8682,8776],{"className":8681,"ariaHidden":179},[178],[148,8683,8685,8688,8767,8770,8773],{"className":8684},[183],[148,8686],{"className":8687,"style":2563},[187],[148,8689,8691,8694,8726,8729,8732,8764],{"className":8690},[2659],[148,8692,1140],{"className":8693,"style":2664},[1169,2663],[148,8695,8697,8700],{"className":8696},[192],[148,8698,266],{"className":8699},[192,193],[148,8701,8703],{"className":8702},[679],[148,8704,8706],{"className":8705},[683],[148,8707,8709],{"className":8708},[688],[148,8710,8712],{"className":8711,"style":2028},[692],[148,8713,8714,8717],{"style":2031},[148,8715],{"className":8716,"style":701},[700],[148,8718,8720],{"className":8719},[705,706,707,708],[148,8721,8723],{"className":8722},[192,708],[148,8724,1216],{"className":8725},[192,708],[148,8727,346],{"className":8728},[381],[148,8730],{"className":8731,"style":374},[373],[148,8733,8735,8738],{"className":8734},[192],[148,8736,1037],{"className":8737,"style":970},[192,193],[148,8739,8741],{"className":8740},[679],[148,8742,8744],{"className":8743},[683],[148,8745,8747],{"className":8746},[688],[148,8748,8750],{"className":8749,"style":2028},[692],[148,8751,8752,8755],{"style":2031},[148,8753],{"className":8754,"style":701},[700],[148,8756,8758],{"className":8757},[705,706,707,708],[148,8759,8761],{"className":8760},[192,708],[148,8762,1216],{"className":8763},[192,708],[148,8765,1153],{"className":8766,"style":2664},[1194,2663],[148,8768],{"className":8769,"style":2083},[373],[148,8771,1784],{"className":8772},[2087],[148,8774],{"className":8775,"style":2083},[373],[148,8777,8779,8782],{"className":8778},[183],[148,8780],{"className":8781,"style":2655},[187],[148,8783,8785,8791,8943,8946,8949,9100],{"className":8784},[2659],[148,8786,8788],{"className":8787,"style":2664},[1169,2663],[148,8789,1140],{"className":8790},[2668,707],[148,8792,8794,8797,8940],{"className":8793},[192],[148,8795],{"className":8796},[1169,1876],[148,8798,8800],{"className":8799},[1760],[148,8801,8803,8931],{"className":8802},[683,684],[148,8804,8806,8928],{"className":8805},[688],[148,8807,8809,8869,8877],{"className":8808,"style":2687},[692],[148,8810,8811,8814],{"style":1892},[148,8812],{"className":8813,"style":1896},[700],[148,8815,8817,8857,8860,8863,8866],{"className":8816},[192],[148,8818,8820,8823],{"className":8819},[192],[148,8821,2422],{"className":8822,"style":2443},[192,193],[148,8824,8826],{"className":8825},[679],[148,8827,8829,8849],{"className":8828},[683,684],[148,8830,8832,8846],{"className":8831},[688],[148,8833,8835],{"className":8834,"style":693},[692],[148,8836,8837,8840],{"style":2458},[148,8838],{"className":8839,"style":701},[700],[148,8841,8843],{"className":8842},[705,706,707,708],[148,8844,639],{"className":8845},[192,708],[148,8847,716],{"className":8848},[715],[148,8850,8852],{"className":8851},[688],[148,8853,8855],{"className":8854,"style":723},[692],[148,8856],{},[148,8858],{"className":8859,"style":729},[373],[148,8861,642],{"className":8862},[733],[148,8864],{"className":8865,"style":729},[373],[148,8867,297],{"className":8868,"style":312},[192,193],[148,8870,8871,8874],{"style":1936},[148,8872],{"className":8873,"style":1896},[700],[148,8875],{"className":8876,"style":1944},[1943],[148,8878,8879,8882],{"style":1947},[148,8880],{"className":8881,"style":1896},[700],[148,8883,8885,8925],{"className":8884},[192],[148,8886,8888,8891],{"className":8887},[192],[148,8889,2422],{"className":8890,"style":2443},[192,193],[148,8892,8894],{"className":8893},[679],[148,8895,8897,8917],{"className":8896},[683,684],[148,8898,8900,8914],{"className":8899},[688],[148,8901,8903],{"className":8902,"style":693},[692],[148,8904,8905,8908],{"style":2458},[148,8906],{"className":8907,"style":701},[700],[148,8909,8911],{"className":8910},[705,706,707,708],[148,8912,649],{"className":8913},[192,708],[148,8915,716],{"className":8916},[715],[148,8918,8920],{"className":8919},[688],[148,8921,8923],{"className":8922,"style":723},[692],[148,8924],{},[148,8926,266],{"className":8927},[192,193],[148,8929,716],{"className":8930},[715],[148,8932,8934],{"className":8933},[688],[148,8935,8938],{"className":8936,"style":8937},[692],"height:0.836em;",[148,8939],{},[148,8941],{"className":8942},[1194,1876],[148,8944,346],{"className":8945},[381],[148,8947],{"className":8948,"style":374},[373],[148,8950,8952,8955,9097],{"className":8951},[192],[148,8953],{"className":8954},[1169,1876],[148,8956,8958],{"className":8957},[1760],[148,8959,8961,9089],{"className":8960},[683,684],[148,8962,8964,9086],{"className":8963},[688],[148,8965,8967,9027,9035],{"className":8966,"style":2687},[692],[148,8968,8969,8972],{"style":1892},[148,8970],{"className":8971,"style":1896},[700],[148,8973,8975,9015,9018,9021,9024],{"className":8974},[192],[148,8976,8978,8981],{"className":8977},[192],[148,8979,2422],{"className":8980,"style":2443},[192,193],[148,8982,8984],{"className":8983},[679],[148,8985,8987,9007],{"className":8986},[683,684],[148,8988,8990,9004],{"className":8989},[688],[148,8991,8993],{"className":8992,"style":693},[692],[148,8994,8995,8998],{"style":2458},[148,8996],{"className":8997,"style":701},[700],[148,8999,9001],{"className":9000},[705,706,707,708],[148,9002,639],{"className":9003},[192,708],[148,9005,716],{"className":9006},[715],[148,9008,9010],{"className":9009},[688],[148,9011,9013],{"className":9012,"style":723},[692],[148,9014],{},[148,9016],{"className":9017,"style":729},[373],[148,9019,642],{"className":9020},[733],[148,9022],{"className":9023,"style":729},[373],[148,9025,297],{"className":9026,"style":312},[192,193],[148,9028,9029,9032],{"style":1936},[148,9030],{"className":9031,"style":1896},[700],[148,9033],{"className":9034,"style":1944},[1943],[148,9036,9037,9040],{"style":1947},[148,9038],{"className":9039,"style":1896},[700],[148,9041,9043,9083],{"className":9042},[192],[148,9044,9046,9049],{"className":9045},[192],[148,9047,2422],{"className":9048,"style":2443},[192,193],[148,9050,9052],{"className":9051},[679],[148,9053,9055,9075],{"className":9054},[683,684],[148,9056,9058,9072],{"className":9057},[688],[148,9059,9061],{"className":9060,"style":693},[692],[148,9062,9063,9066],{"style":2458},[148,9064],{"className":9065,"style":701},[700],[148,9067,9069],{"className":9068},[705,706,707,708],[148,9070,649],{"className":9071},[192,708],[148,9073,716],{"className":9074},[715],[148,9076,9078],{"className":9077},[688],[148,9079,9081],{"className":9080,"style":723},[692],[148,9082],{},[148,9084,1037],{"className":9085,"style":970},[192,193],[148,9087,716],{"className":9088},[715],[148,9090,9092],{"className":9091},[688],[148,9093,9095],{"className":9094,"style":8937},[692],[148,9096],{},[148,9098],{"className":9099},[1194,1876],[148,9101,9103],{"className":9102,"style":2664},[1194,2663],[148,9104,1153],{"className":9105},[2668,707],[13,9107,9108,1022,9177,9246],{},[148,9109,9111,9128],{"className":9110},[151],[148,9112,9114],{"className":9113},[155],[157,9115,9116],{"xmlns":159},[161,9117,9118,9126],{},[164,9119,9120],{},[631,9121,9122,9124],{},[167,9123,2422],{},[637,9125,649],{},[171,9127,2427],{"encoding":173},[148,9129,9131],{"className":9130,"ariaHidden":179},[178],[148,9132,9134,9137],{"className":9133},[183],[148,9135],{"className":9136,"style":668},[187],[148,9138,9140,9143],{"className":9139},[192],[148,9141,2422],{"className":9142,"style":2443},[192,193],[148,9144,9146],{"className":9145},[679],[148,9147,9149,9169],{"className":9148},[683,684],[148,9150,9152,9166],{"className":9151},[688],[148,9153,9155],{"className":9154,"style":693},[692],[148,9156,9157,9160],{"style":2458},[148,9158],{"className":9159,"style":701},[700],[148,9161,9163],{"className":9162},[705,706,707,708],[148,9164,649],{"className":9165},[192,708],[148,9167,716],{"className":9168},[715],[148,9170,9172],{"className":9171},[688],[148,9173,9175],{"className":9174,"style":723},[692],[148,9176],{},[148,9178,9180,9197],{"className":9179},[151],[148,9181,9183],{"className":9182},[155],[157,9184,9185],{"xmlns":159},[161,9186,9187,9195],{},[164,9188,9189],{},[631,9190,9191,9193],{},[167,9192,2422],{},[637,9194,639],{},[171,9196,8532],{"encoding":173},[148,9198,9200],{"className":9199,"ariaHidden":179},[178],[148,9201,9203,9206],{"className":9202},[183],[148,9204],{"className":9205,"style":668},[187],[148,9207,9209,9212],{"className":9208},[192],[148,9210,2422],{"className":9211,"style":2443},[192,193],[148,9213,9215],{"className":9214},[679],[148,9216,9218,9238],{"className":9217},[683,684],[148,9219,9221,9235],{"className":9220},[688],[148,9222,9224],{"className":9223,"style":693},[692],[148,9225,9226,9229],{"style":2458},[148,9227],{"className":9228,"style":701},[700],[148,9230,9232],{"className":9231},[705,706,707,708],[148,9233,639],{"className":9234},[192,708],[148,9236,716],{"className":9237},[715],[148,9239,9241],{"className":9240},[688],[148,9242,9244],{"className":9243,"style":723},[692],[148,9245],{}," 可以一起调整，以改变视野并压缩或拉伸物体的深度。",[13,9248,9249],{},"可以在代码中实现一个 3×3 矩阵乘法程序，然后直接按上述方式实现。但如果目标是尽可能缩小代码，那么矩阵中的每个 0 都是简化的契机。所以把它乘开。通过一大堆代数运算（感谢 Mathematica！）完整结果是：",[148,9251,9253],{"className":9252},[1732],[148,9254,9256,9563],{"className":9255},[151],[148,9257,9259],{"className":9258},[155],[157,9260,9261],{"xmlns":159,"display":1741},[161,9262,9263,9560],{},[164,9264,9265,9298,9300],{},[164,9266,9267,9269,9296],{},[339,9268,1140],{"fence":179},[1745,9270,9272,9280,9288],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},"center",[1750,9273,9274],{},[1753,9275,9276],{},[1756,9277,9278],{"scriptlevel":1758,"displaystyle":1139},[167,9279,266],{},[1750,9281,9282],{},[1753,9283,9284],{},[1756,9285,9286],{"scriptlevel":1758,"displaystyle":1139},[167,9287,1037],{},[1750,9289,9290],{},[1753,9291,9292],{},[1756,9293,9294],{"scriptlevel":1758,"displaystyle":1139},[167,9295,297],{},[339,9297,1153],{"fence":179},[339,9299,1784],{},[164,9301,9302,9304,9558],{},[339,9303,1140],{"fence":179},[1745,9305,9306,9400,9494],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,9307,9308],{},[1753,9309,9310],{},[1756,9311,9312],{"scriptlevel":1758,"displaystyle":1139},[164,9313,9314,9316,9322,9324,9330,9332,9334,9336,9338,9340,9342,9344,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364,9366,9368,9370,9372,9374,9376,9382,9384,9386,9388,9390,9392,9394,9396,9398],{},[339,9315,1140],{"stretchy":1139},[631,9317,9318,9320],{},[167,9319,635],{},[637,9321,639],{},[339,9323,642],{},[631,9325,9326,9328],{},[167,9327,635],{},[637,9329,649],{},[167,9331,349],{},[339,9333,341],{},[167,9335,169],{},[339,9337,1153],{"stretchy":1139},[339,9339,1140],{"stretchy":1139},[167,9341,349],{},[339,9343,341],{},[167,9345,248],{},[167,9347,349],{},[339,9349,341],{},[167,9351,220],{},[339,9353,642],{},[167,9355,337],{},[339,9357,341],{},[167,9359,244],{},[167,9361,337],{},[339,9363,341],{},[167,9365,248],{},[167,9367,337],{},[339,9369,341],{},[167,9371,220],{},[339,9373,1153],{"stretchy":1139},[339,9375,942],{},[631,9377,9378,9380],{},[167,9379,635],{},[637,9381,649],{},[167,9383,349],{},[339,9385,341],{},[167,9387,244],{},[167,9389,337],{},[339,9391,341],{},[167,9393,248],{},[167,9395,337],{},[339,9397,341],{},[167,9399,169],{},[1750,9401,9402],{},[1753,9403,9404],{},[1756,9405,9406],{"scriptlevel":1758,"displaystyle":1139},[164,9407,9408,9410,9416,9418,9424,9426,9428,9430,9432,9434,9436,9438,9440,9442,9444,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464,9466,9468,9470,9476,9478,9480,9482,9484,9486,9488,9490,9492],{},[339,9409,1140],{"stretchy":1139},[631,9411,9412,9414],{},[167,9413,635],{},[637,9415,639],{},[339,9417,642],{},[631,9419,9420,9422],{},[167,9421,635],{},[637,9423,649],{},[167,9425,349],{},[339,9427,341],{},[167,9429,169],{},[339,9431,1153],{"stretchy":1139},[339,9433,1140],{"stretchy":1139},[167,9435,349],{},[339,9437,341],{},[167,9439,220],{},[167,9441,337],{},[339,9443,341],{},[167,9445,248],{},[339,9447,942],{},[167,9449,349],{},[339,9451,341],{},[167,9453,248],{},[167,9455,337],{},[339,9457,341],{},[167,9459,244],{},[167,9461,337],{},[339,9463,341],{},[167,9465,220],{},[339,9467,1153],{"stretchy":1139},[339,9469,642],{},[631,9471,9472,9474],{},[167,9473,635],{},[637,9475,649],{},[167,9477,349],{},[339,9479,341],{},[167,9481,244],{},[167,9483,349],{},[339,9485,341],{},[167,9487,248],{},[167,9489,337],{},[339,9491,341],{},[167,9493,169],{},[1750,9495,9496],{},[1753,9497,9498],{},[1756,9499,9500],{"scriptlevel":1758,"displaystyle":1139},[164,9501,9502,9504,9506,9508,9510,9516,9518,9524,9526,9528,9530,9532,9534,9536,9538,9540,9546,9548,9550,9552,9554,9556],{},[167,9503,349],{},[339,9505,341],{},[167,9507,244],{},[339,9509,1140],{"stretchy":1139},[631,9511,9512,9514],{},[167,9513,635],{},[637,9515,639],{},[339,9517,642],{},[631,9519,9520,9522],{},[167,9521,635],{},[637,9523,649],{},[167,9525,349],{},[339,9527,341],{},[167,9529,169],{},[339,9531,1153],{"stretchy":1139},[167,9533,337],{},[339,9535,341],{},[167,9537,220],{},[339,9539,642],{},[631,9541,9542,9544],{},[167,9543,635],{},[637,9545,649],{},[167,9547,337],{},[339,9549,341],{},[167,9551,244],{},[167,9553,337],{},[339,9555,341],{},[167,9557,169],{},[339,9559,1153],{"fence":179},[171,9561,9562],{"encoding":173},"\\left( \\begin{matrix} x \\\\ y \\\\ z \\end{matrix} \\right) =\n\\left( \\begin{matrix}\n (R_2 + R_1 \\cos \\theta)(\\cos B \\cos \\phi + \\sin A \\sin B \\sin \\phi) - R_1 \\cos A \\sin B \\sin \\theta \\\\\n\n (R_2 + R_1 \\cos \\theta)(\\cos \\phi \\sin B - \\cos B \\sin A \\sin \\phi) + R_1 \\cos A \\cos B \\sin \\theta \\\\\n \\cos A (R_2 + R_1 \\cos \\theta) \\sin \\phi + R_1 \\sin A \\sin \\theta\n\\end{matrix} \\right)",[148,9564,9566,9720],{"className":9565,"ariaHidden":179},[178],[148,9567,9569,9572,9711,9714,9717],{"className":9568},[183],[148,9570],{"className":9571,"style":5564},[187],[148,9573,9575,9612,9674],{"className":9574},[2659],[148,9576,9578],{"className":9577},[1169],[148,9579,9581],{"className":9580},[2668,5574],[148,9582,9584,9604],{"className":9583},[683,684],[148,9585,9587,9601],{"className":9586},[688],[148,9588,9590],{"className":9589,"style":5584},[692],[148,9591,9592,9595],{"style":5587},[148,9593],{"className":9594,"style":5591},[700],[148,9596,9597],{"style":5594},[5596,9598,9599],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,9600],{"d":5605},[148,9602,716],{"className":9603},[715],[148,9605,9607],{"className":9606},[688],[148,9608,9610],{"className":9609,"style":5615},[692],[148,9611],{},[148,9613,9615],{"className":9614},[192],[148,9616,9618],{"className":9617},[1745],[148,9619,9621],{"className":9620},[5273],[148,9622,9624,9666],{"className":9623},[683,684],[148,9625,9627,9663],{"className":9626},[688],[148,9628,9630,9641,9652],{"className":9629,"style":5584},[692],[148,9631,9632,9635],{"style":5638},[148,9633],{"className":9634,"style":1896},[700],[148,9636,9638],{"className":9637},[192],[148,9639,266],{"className":9640},[192,193],[148,9642,9643,9646],{"style":5286},[148,9644],{"className":9645,"style":1896},[700],[148,9647,9649],{"className":9648},[192],[148,9650,1037],{"className":9651,"style":970},[192,193],[148,9653,9654,9657],{"style":5667},[148,9655],{"className":9656,"style":1896},[700],[148,9658,9660],{"className":9659},[192],[148,9661,297],{"className":9662,"style":312},[192,193],[148,9664,716],{"className":9665},[715],[148,9667,9669],{"className":9668},[688],[148,9670,9672],{"className":9671,"style":5615},[692],[148,9673],{},[148,9675,9677],{"className":9676},[1194],[148,9678,9680],{"className":9679},[2668,5574],[148,9681,9683,9703],{"className":9682},[683,684],[148,9684,9686,9700],{"className":9685},[688],[148,9687,9689],{"className":9688,"style":5584},[692],[148,9690,9691,9694],{"style":5587},[148,9692],{"className":9693,"style":5591},[700],[148,9695,9696],{"style":5594},[5596,9697,9698],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,9699],{"d":5862},[148,9701,716],{"className":9702},[715],[148,9704,9706],{"className":9705},[688],[148,9707,9709],{"className":9708,"style":5615},[692],[148,9710],{},[148,9712],{"className":9713,"style":2083},[373],[148,9715,1784],{"className":9716},[2087],[148,9718],{"className":9719,"style":2083},[373],[148,9721,9723,9726],{"className":9722},[183],[148,9724],{"className":9725,"style":5564},[187],[148,9727,9729,9766,10542],{"className":9728},[2659],[148,9730,9732],{"className":9731},[1169],[148,9733,9735],{"className":9734},[2668,5574],[148,9736,9738,9758],{"className":9737},[683,684],[148,9739,9741,9755],{"className":9740},[688],[148,9742,9744],{"className":9743,"style":5584},[692],[148,9745,9746,9749],{"style":5587},[148,9747],{"className":9748,"style":5591},[700],[148,9750,9751],{"style":5594},[5596,9752,9753],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,9754],{"d":5605},[148,9756,716],{"className":9757},[715],[148,9759,9761],{"className":9760},[688],[148,9762,9764],{"className":9763,"style":5615},[692],[148,9765],{},[148,9767,9769],{"className":9768},[192],[148,9770,9772],{"className":9771},[1745],[148,9773,9775],{"className":9774},[5273],[148,9776,9778,10534],{"className":9777},[683,684],[148,9779,9781,10531],{"className":9780},[688],[148,9782,9784,10053,10322],{"className":9783,"style":5584},[692],[148,9785,9786,9789],{"style":5638},[148,9787],{"className":9788,"style":1896},[700],[148,9790,9792,9795,9835,9838,9841,9844,9884,9887,9890,9893,9896,9899,9902,9905,9908,9911,9914,9917,9920,9923,9926,9929,9932,9935,9938,9941,9944,9947,9950,9953,9956,9959,9962,9965,9968,9971,9974,9977,10017,10020,10023,10026,10029,10032,10035,10038,10041,10044,10047,10050],{"className":9791},[192],[148,9793,1140],{"className":9794},[1169],[148,9796,9798,9801],{"className":9797},[192],[148,9799,635],{"className":9800,"style":675},[192,193],[148,9802,9804],{"className":9803},[679],[148,9805,9807,9827],{"className":9806},[683,684],[148,9808,9810,9824],{"className":9809},[688],[148,9811,9813],{"className":9812,"style":693},[692],[148,9814,9815,9818],{"style":696},[148,9816],{"className":9817,"style":701},[700],[148,9819,9821],{"className":9820},[705,706,707,708],[148,9822,639],{"className":9823},[192,708],[148,9825,716],{"className":9826},[715],[148,9828,9830],{"className":9829},[688],[148,9831,9833],{"className":9832,"style":723},[692],[148,9834],{},[148,9836],{"className":9837,"style":729},[373],[148,9839,642],{"className":9840},[733],[148,9842],{"className":9843,"style":729},[373],[148,9845,9847,9850],{"className":9846},[192],[148,9848,635],{"className":9849,"style":675},[192,193],[148,9851,9853],{"className":9852},[679],[148,9854,9856,9876],{"className":9855},[683,684],[148,9857,9859,9873],{"className":9858},[688],[148,9860,9862],{"className":9861,"style":693},[692],[148,9863,9864,9867],{"style":696},[148,9865],{"className":9866,"style":701},[700],[148,9868,9870],{"className":9869},[705,706,707,708],[148,9871,649],{"className":9872},[192,708],[148,9874,716],{"className":9875},[715],[148,9877,9879],{"className":9878},[688],[148,9880,9882],{"className":9881,"style":723},[692],[148,9883],{},[148,9885],{"className":9886,"style":374},[373],[148,9888,349],{"className":9889},[369],[148,9891],{"className":9892,"style":374},[373],[148,9894,169],{"className":9895,"style":194},[192,193],[148,9897,1153],{"className":9898},[1194],[148,9900,1140],{"className":9901},[1169],[148,9903,349],{"className":9904},[369],[148,9906],{"className":9907,"style":374},[373],[148,9909,248],{"className":9910,"style":593},[192,193],[148,9912],{"className":9913,"style":374},[373],[148,9915,349],{"className":9916},[369],[148,9918],{"className":9919,"style":374},[373],[148,9921,220],{"className":9922},[192,193],[148,9924],{"className":9925,"style":729},[373],[148,9927,642],{"className":9928},[733],[148,9930],{"className":9931,"style":729},[373],[148,9933,337],{"className":9934},[369],[148,9936],{"className":9937,"style":374},[373],[148,9939,244],{"className":9940},[192,193],[148,9942],{"className":9943,"style":374},[373],[148,9945,337],{"className":9946},[369],[148,9948],{"className":9949,"style":374},[373],[148,9951,248],{"className":9952,"style":593},[192,193],[148,9954],{"className":9955,"style":374},[373],[148,9957,337],{"className":9958},[369],[148,9960],{"className":9961,"style":374},[373],[148,9963,220],{"className":9964},[192,193],[148,9966,1153],{"className":9967},[1194],[148,9969],{"className":9970,"style":729},[373],[148,9972,942],{"className":9973},[733],[148,9975],{"className":9976,"style":729},[373],[148,9978,9980,9983],{"className":9979},[192],[148,9981,635],{"className":9982,"style":675},[192,193],[148,9984,9986],{"className":9985},[679],[148,9987,9989,10009],{"className":9988},[683,684],[148,9990,9992,10006],{"className":9991},[688],[148,9993,9995],{"className":9994,"style":693},[692],[148,9996,9997,10000],{"style":696},[148,9998],{"className":9999,"style":701},[700],[148,10001,10003],{"className":10002},[705,706,707,708],[148,10004,649],{"className":10005},[192,708],[148,10007,716],{"className":10008},[715],[148,10010,10012],{"className":10011},[688],[148,10013,10015],{"className":10014,"style":723},[692],[148,10016],{},[148,10018],{"className":10019,"style":374},[373],[148,10021,349],{"className":10022},[369],[148,10024],{"className":10025,"style":374},[373],[148,10027,244],{"className":10028},[192,193],[148,10030],{"className":10031,"style":374},[373],[148,10033,337],{"className":10034},[369],[148,10036],{"className":10037,"style":374},[373],[148,10039,248],{"className":10040,"style":593},[192,193],[148,10042],{"className":10043,"style":374},[373],[148,10045,337],{"className":10046},[369],[148,10048],{"className":10049,"style":374},[373],[148,10051,169],{"className":10052,"style":194},[192,193],[148,10054,10055,10058],{"style":5286},[148,10056],{"className":10057,"style":1896},[700],[148,10059,10061,10064,10104,10107,10110,10113,10153,10156,10159,10162,10165,10168,10171,10174,10177,10180,10183,10186,10189,10192,10195,10198,10201,10204,10207,10210,10213,10216,10219,10222,10225,10228,10231,10234,10237,10240,10243,10246,10286,10289,10292,10295,10298,10301,10304,10307,10310,10313,10316,10319],{"className":10060},[192],[148,10062,1140],{"className":10063},[1169],[148,10065,10067,10070],{"className":10066},[192],[148,10068,635],{"className":10069,"style":675},[192,193],[148,10071,10073],{"className":10072},[679],[148,10074,10076,10096],{"className":10075},[683,684],[148,10077,10079,10093],{"className":10078},[688],[148,10080,10082],{"className":10081,"style":693},[692],[148,10083,10084,10087],{"style":696},[148,10085],{"className":10086,"style":701},[700],[148,10088,10090],{"className":10089},[705,706,707,708],[148,10091,639],{"className":10092},[192,708],[148,10094,716],{"className":10095},[715],[148,10097,10099],{"className":10098},[688],[148,10100,10102],{"className":10101,"style":723},[692],[148,10103],{},[148,10105],{"className":10106,"style":729},[373],[148,10108,642],{"className":10109},[733],[148,10111],{"className":10112,"style":729},[373],[148,10114,10116,10119],{"className":10115},[192],[148,10117,635],{"className":10118,"style":675},[192,193],[148,10120,10122],{"className":10121},[679],[148,10123,10125,10145],{"className":10124},[683,684],[148,10126,10128,10142],{"className":10127},[688],[148,10129,10131],{"className":10130,"style":693},[692],[148,10132,10133,10136],{"style":696},[148,10134],{"className":10135,"style":701},[700],[148,10137,10139],{"className":10138},[705,706,707,708],[148,10140,649],{"className":10141},[192,708],[148,10143,716],{"className":10144},[715],[148,10146,10148],{"className":10147},[688],[148,10149,10151],{"className":10150,"style":723},[692],[148,10152],{},[148,10154],{"className":10155,"style":374},[373],[148,10157,349],{"className":10158},[369],[148,10160],{"className":10161,"style":374},[373],[148,10163,169],{"className":10164,"style":194},[192,193],[148,10166,1153],{"className":10167},[1194],[148,10169,1140],{"className":10170},[1169],[148,10172,349],{"className":10173},[369],[148,10175],{"className":10176,"style":374},[373],[148,10178,220],{"className":10179},[192,193],[148,10181],{"className":10182,"style":374},[373],[148,10184,337],{"className":10185},[369],[148,10187],{"className":10188,"style":374},[373],[148,10190,248],{"className":10191,"style":593},[192,193],[148,10193],{"className":10194,"style":729},[373],[148,10196,942],{"className":10197},[733],[148,10199],{"className":10200,"style":729},[373],[148,10202,349],{"className":10203},[369],[148,10205],{"className":10206,"style":374},[373],[148,10208,248],{"className":10209,"style":593},[192,193],[148,10211],{"className":10212,"style":374},[373],[148,10214,337],{"className":10215},[369],[148,10217],{"className":10218,"style":374},[373],[148,10220,244],{"className":10221},[192,193],[148,10223],{"className":10224,"style":374},[373],[148,10226,337],{"className":10227},[369],[148,10229],{"className":10230,"style":374},[373],[148,10232,220],{"className":10233},[192,193],[148,10235,1153],{"className":10236},[1194],[148,10238],{"className":10239,"style":729},[373],[148,10241,642],{"className":10242},[733],[148,10244],{"className":10245,"style":729},[373],[148,10247,10249,10252],{"className":10248},[192],[148,10250,635],{"className":10251,"style":675},[192,193],[148,10253,10255],{"className":10254},[679],[148,10256,10258,10278],{"className":10257},[683,684],[148,10259,10261,10275],{"className":10260},[688],[148,10262,10264],{"className":10263,"style":693},[692],[148,10265,10266,10269],{"style":696},[148,10267],{"className":10268,"style":701},[700],[148,10270,10272],{"className":10271},[705,706,707,708],[148,10273,649],{"className":10274},[192,708],[148,10276,716],{"className":10277},[715],[148,10279,10281],{"className":10280},[688],[148,10282,10284],{"className":10283,"style":723},[692],[148,10285],{},[148,10287],{"className":10288,"style":374},[373],[148,10290,349],{"className":10291},[369],[148,10293],{"className":10294,"style":374},[373],[148,10296,244],{"className":10297},[192,193],[148,10299],{"className":10300,"style":374},[373],[148,10302,349],{"className":10303},[369],[148,10305],{"className":10306,"style":374},[373],[148,10308,248],{"className":10309,"style":593},[192,193],[148,10311],{"className":10312,"style":374},[373],[148,10314,337],{"className":10315},[369],[148,10317],{"className":10318,"style":374},[373],[148,10320,169],{"className":10321,"style":194},[192,193],[148,10323,10324,10327],{"style":5667},[148,10325],{"className":10326,"style":1896},[700],[148,10328,10330,10333,10336,10339,10342,10382,10385,10388,10391,10431,10434,10437,10440,10443,10446,10449,10452,10455,10458,10461,10464,10467,10507,10510,10513,10516,10519,10522,10525,10528],{"className":10329},[192],[148,10331,349],{"className":10332},[369],[148,10334],{"className":10335,"style":374},[373],[148,10337,244],{"className":10338},[192,193],[148,10340,1140],{"className":10341},[1169],[148,10343,10345,10348],{"className":10344},[192],[148,10346,635],{"className":10347,"style":675},[192,193],[148,10349,10351],{"className":10350},[679],[148,10352,10354,10374],{"className":10353},[683,684],[148,10355,10357,10371],{"className":10356},[688],[148,10358,10360],{"className":10359,"style":693},[692],[148,10361,10362,10365],{"style":696},[148,10363],{"className":10364,"style":701},[700],[148,10366,10368],{"className":10367},[705,706,707,708],[148,10369,639],{"className":10370},[192,708],[148,10372,716],{"className":10373},[715],[148,10375,10377],{"className":10376},[688],[148,10378,10380],{"className":10379,"style":723},[692],[148,10381],{},[148,10383],{"className":10384,"style":729},[373],[148,10386,642],{"className":10387},[733],[148,10389],{"className":10390,"style":729},[373],[148,10392,10394,10397],{"className":10393},[192],[148,10395,635],{"className":10396,"style":675},[192,193],[148,10398,10400],{"className":10399},[679],[148,10401,10403,10423],{"className":10402},[683,684],[148,10404,10406,10420],{"className":10405},[688],[148,10407,10409],{"className":10408,"style":693},[692],[148,10410,10411,10414],{"style":696},[148,10412],{"className":10413,"style":701},[700],[148,10415,10417],{"className":10416},[705,706,707,708],[148,10418,649],{"className":10419},[192,708],[148,10421,716],{"className":10422},[715],[148,10424,10426],{"className":10425},[688],[148,10427,10429],{"className":10428,"style":723},[692],[148,10430],{},[148,10432],{"className":10433,"style":374},[373],[148,10435,349],{"className":10436},[369],[148,10438],{"className":10439,"style":374},[373],[148,10441,169],{"className":10442,"style":194},[192,193],[148,10444,1153],{"className":10445},[1194],[148,10447],{"className":10448,"style":374},[373],[148,10450,337],{"className":10451},[369],[148,10453],{"className":10454,"style":374},[373],[148,10456,220],{"className":10457},[192,193],[148,10459],{"className":10460,"style":729},[373],[148,10462,642],{"className":10463},[733],[148,10465],{"className":10466,"style":729},[373],[148,10468,10470,10473],{"className":10469},[192],[148,10471,635],{"className":10472,"style":675},[192,193],[148,10474,10476],{"className":10475},[679],[148,10477,10479,10499],{"className":10478},[683,684],[148,10480,10482,10496],{"className":10481},[688],[148,10483,10485],{"className":10484,"style":693},[692],[148,10486,10487,10490],{"style":696},[148,10488],{"className":10489,"style":701},[700],[148,10491,10493],{"className":10492},[705,706,707,708],[148,10494,649],{"className":10495},[192,708],[148,10497,716],{"className":10498},[715],[148,10500,10502],{"className":10501},[688],[148,10503,10505],{"className":10504,"style":723},[692],[148,10506],{},[148,10508],{"className":10509,"style":374},[373],[148,10511,337],{"className":10512},[369],[148,10514],{"className":10515,"style":374},[373],[148,10517,244],{"className":10518},[192,193],[148,10520],{"className":10521,"style":374},[373],[148,10523,337],{"className":10524},[369],[148,10526],{"className":10527,"style":374},[373],[148,10529,169],{"className":10530,"style":194},[192,193],[148,10532,716],{"className":10533},[715],[148,10535,10537],{"className":10536},[688],[148,10538,10540],{"className":10539,"style":5615},[692],[148,10541],{},[148,10543,10545],{"className":10544},[1194],[148,10546,10548],{"className":10547},[2668,5574],[148,10549,10551,10571],{"className":10550},[683,684],[148,10552,10554,10568],{"className":10553},[688],[148,10555,10557],{"className":10556,"style":5584},[692],[148,10558,10559,10562],{"style":5587},[148,10560],{"className":10561,"style":5591},[700],[148,10563,10564],{"style":5594},[5596,10565,10566],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,10567],{"d":5862},[148,10569,716],{"className":10570},[715],[148,10572,10574],{"className":10573},[688],[148,10575,10577],{"className":10576,"style":5615},[692],[148,10578],{},[13,10580,10581],{},"到这里，我们已经知道每个点画在屏幕上的什么位置；下一步是决定每个点画成什么亮度。",[13,10583,10584,10585,10736],{},"看起来很丑陋，但可以预计算一些公共子表达式（比如所有的正弦和余弦值，以及 ",[148,10586,10588,10620],{"className":10587},[151],[148,10589,10591],{"className":10590},[155],[157,10592,10593],{"xmlns":159},[161,10594,10595,10617],{},[164,10596,10597,10603,10605,10611,10613,10615],{},[631,10598,10599,10601],{},[167,10600,635],{},[637,10602,639],{},[339,10604,642],{},[631,10606,10607,10609],{},[167,10608,635],{},[637,10610,649],{},[167,10612,349],{},[339,10614,341],{},[167,10616,169],{},[171,10618,10619],{"encoding":173},"R_2 + R_1 \\cos \\theta",[148,10621,10623,10678],{"className":10622,"ariaHidden":179},[178],[148,10624,10626,10629,10669,10672,10675],{"className":10625},[183],[148,10627],{"className":10628,"style":668},[187],[148,10630,10632,10635],{"className":10631},[192],[148,10633,635],{"className":10634,"style":675},[192,193],[148,10636,10638],{"className":10637},[679],[148,10639,10641,10661],{"className":10640},[683,684],[148,10642,10644,10658],{"className":10643},[688],[148,10645,10647],{"className":10646,"style":693},[692],[148,10648,10649,10652],{"style":696},[148,10650],{"className":10651,"style":701},[700],[148,10653,10655],{"className":10654},[705,706,707,708],[148,10656,639],{"className":10657},[192,708],[148,10659,716],{"className":10660},[715],[148,10662,10664],{"className":10663},[688],[148,10665,10667],{"className":10666,"style":723},[692],[148,10668],{},[148,10670],{"className":10671,"style":729},[373],[148,10673,642],{"className":10674},[733],[148,10676],{"className":10677,"style":729},[373],[148,10679,10681,10684,10724,10727,10730,10733],{"className":10680},[183],[148,10682],{"className":10683,"style":743},[187],[148,10685,10687,10690],{"className":10686},[192],[148,10688,635],{"className":10689,"style":675},[192,193],[148,10691,10693],{"className":10692},[679],[148,10694,10696,10716],{"className":10695},[683,684],[148,10697,10699,10713],{"className":10698},[688],[148,10700,10702],{"className":10701,"style":693},[692],[148,10703,10704,10707],{"style":696},[148,10705],{"className":10706,"style":701},[700],[148,10708,10710],{"className":10709},[705,706,707,708],[148,10711,649],{"className":10712},[192,708],[148,10714,716],{"className":10715},[715],[148,10717,10719],{"className":10718},[688],[148,10720,10722],{"className":10721,"style":723},[692],[148,10723],{},[148,10725],{"className":10726,"style":374},[373],[148,10728,349],{"className":10729},[369],[148,10731],{"className":10732,"style":374},[373],[148,10734,169],{"className":10735,"style":194},[192,193],"）并在代码中重用它们。事实上，a1k0n 在原始代码中用了完全不同的因式分解方式，这留给读者作为练习。（原始代码还交换了 A 的正弦和余弦，实际上旋转了 90 度，所以最初的推导有些不同，但没关系。）",[1111,10738,10739],{"id":10739},"光照与表面法线",[13,10741,10742,10743,10748,10749,10754],{},"现在知道把像素放在哪里了，但还没有考虑绘制什么色调。要计算光照，需要知道",[17,10744,10747],{"href":10745,"rel":10746},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSurface_normal",[21],"表面法线","——每个点处垂直于表面的方向。如果有了它，就可以取表面法线与光照方向的",[17,10750,10753],{"href":10751,"rel":10752},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDot_product",[21],"点积","，光照方向可以任意选择。这给出了光照方向和表面方向之间夹角的余弦值：如果点积 > 0，表面朝向光源；如果 \u003C 0，表面背离光源。值越高，落在表面上的光越多。",[13,10756,10757,10758,10801],{},"表面法线方向的推导与空间中点的推导几乎相同。从圆上的一个点开始，绕环面的中心轴旋转，然后再做两次旋转。圆上点的表面法线很显然：与以原点为中心的单位圆（半径 ",[148,10759,10761,10777],{"className":10760},[151],[148,10762,10764],{"className":10763},[155],[157,10765,10766],{"xmlns":159},[161,10767,10768,10774],{},[164,10769,10770,10772],{},[339,10771,1784],{},[637,10773,649],{},[171,10775,10776],{"encoding":173},"=1",[148,10778,10780,10792],{"className":10779,"ariaHidden":179},[178],[148,10781,10783,10786,10789],{"className":10782},[183],[148,10784],{"className":10785,"style":6009},[187],[148,10787,1784],{"className":10788},[2087],[148,10790],{"className":10791,"style":2083},[373],[148,10793,10795,10798],{"className":10794},[183],[148,10796],{"className":10797,"style":856},[187],[148,10799,649],{"className":10800},[192],"）上的点相同。",[13,10803,10804,10805,10998,10999,11084],{},"所以表面法线 ",[148,10806,10808,10846],{"className":10807},[151],[148,10809,10811],{"className":10810},[155],[157,10812,10813],{"xmlns":159},[161,10814,10815,10843],{},[164,10816,10817,10819,10825,10827,10833,10835,10841],{},[339,10818,1140],{"stretchy":1139},[631,10820,10821,10823],{},[167,10822,1070],{},[167,10824,266],{},[339,10826,346],{"separator":179},[631,10828,10829,10831],{},[167,10830,1070],{},[167,10832,1037],{},[339,10834,346],{"separator":179},[631,10836,10837,10839],{},[167,10838,1070],{},[167,10840,297],{},[339,10842,1153],{"stretchy":1139},[171,10844,10845],{"encoding":173},"(N_x, N_y, N_z)",[148,10847,10849],{"className":10848,"ariaHidden":179},[178],[148,10850,10852,10856,10859,10902,10905,10908,10949,10952,10955,10995],{"className":10851},[183],[148,10853],{"className":10854,"style":10855},[187],"height:1.0361em;vertical-align:-0.2861em;",[148,10857,1140],{"className":10858},[1169],[148,10860,10862,10866],{"className":10861},[192],[148,10863,1070],{"className":10864,"style":10865},[192,193],"margin-right:0.109em;",[148,10867,10869],{"className":10868},[679],[148,10870,10872,10894],{"className":10871},[683,684],[148,10873,10875,10891],{"className":10874},[688],[148,10876,10879],{"className":10877,"style":10878},[692],"height:0.1514em;",[148,10880,10882,10885],{"style":10881},"top:-2.55em;margin-left:-0.109em;margin-right:0.05em;",[148,10883],{"className":10884,"style":701},[700],[148,10886,10888],{"className":10887},[705,706,707,708],[148,10889,266],{"className":10890},[192,193,708],[148,10892,716],{"className":10893},[715],[148,10895,10897],{"className":10896},[688],[148,10898,10900],{"className":10899,"style":723},[692],[148,10901],{},[148,10903,346],{"className":10904},[381],[148,10906],{"className":10907,"style":374},[373],[148,10909,10911,10914],{"className":10910},[192],[148,10912,1070],{"className":10913,"style":10865},[192,193],[148,10915,10917],{"className":10916},[679],[148,10918,10920,10940],{"className":10919},[683,684],[148,10921,10923,10937],{"className":10922},[688],[148,10924,10926],{"className":10925,"style":10878},[692],[148,10927,10928,10931],{"style":10881},[148,10929],{"className":10930,"style":701},[700],[148,10932,10934],{"className":10933},[705,706,707,708],[148,10935,1037],{"className":10936,"style":970},[192,193,708],[148,10938,716],{"className":10939},[715],[148,10941,10943],{"className":10942},[688],[148,10944,10947],{"className":10945,"style":10946},[692],"height:0.2861em;",[148,10948],{},[148,10950,346],{"className":10951},[381],[148,10953],{"className":10954,"style":374},[373],[148,10956,10958,10961],{"className":10957},[192],[148,10959,1070],{"className":10960,"style":10865},[192,193],[148,10962,10964],{"className":10963},[679],[148,10965,10967,10987],{"className":10966},[683,684],[148,10968,10970,10984],{"className":10969},[688],[148,10971,10973],{"className":10972,"style":10878},[692],[148,10974,10975,10978],{"style":10881},[148,10976],{"className":10977,"style":701},[700],[148,10979,10981],{"className":10980},[705,706,707,708],[148,10982,297],{"className":10983,"style":312},[192,193,708],[148,10985,716],{"className":10986},[715],[148,10988,10990],{"className":10989},[688],[148,10991,10993],{"className":10992,"style":723},[692],[148,10994],{},[148,10996,1153],{"className":10997},[1194]," 的推导与上面相同，只是起始的点是 ",[148,11000,11002,11036],{"className":11001},[151],[148,11003,11005],{"className":11004},[155],[157,11006,11007],{"xmlns":159},[161,11008,11009,11033],{},[164,11010,11011,11013,11015,11017,11019,11021,11023,11025,11027,11029,11031],{},[339,11012,1140],{"stretchy":1139},[167,11014,349],{},[339,11016,341],{},[167,11018,169],{},[339,11020,346],{"separator":179},[167,11022,337],{},[339,11024,341],{},[167,11026,169],{},[339,11028,346],{"separator":179},[637,11030,1758],{},[339,11032,1153],{"stretchy":1139},[171,11034,11035],{"encoding":173},"(\\cos \\theta, \\sin \\theta, 0)",[148,11037,11039],{"className":11038,"ariaHidden":179},[178],[148,11040,11042,11045,11048,11051,11054,11057,11060,11063,11066,11069,11072,11075,11078,11081],{"className":11041},[183],[148,11043],{"className":11044,"style":902},[187],[148,11046,1140],{"className":11047},[1169],[148,11049,349],{"className":11050},[369],[148,11052],{"className":11053,"style":374},[373],[148,11055,169],{"className":11056,"style":194},[192,193],[148,11058,346],{"className":11059},[381],[148,11061],{"className":11062,"style":374},[373],[148,11064,337],{"className":11065},[369],[148,11067],{"className":11068,"style":374},[373],[148,11070,169],{"className":11071,"style":194},[192,193],[148,11073,346],{"className":11074},[381],[148,11076],{"className":11077,"style":374},[373],[148,11079,1758],{"className":11080},[192],[148,11082,1153],{"className":11083},[1194],"。然后应用相同的旋转：",[148,11086,11088],{"className":11087},[1732],[148,11089,11091,11485],{"className":11090},[151],[148,11092,11094],{"className":11093},[155],[157,11095,11096],{"xmlns":159,"display":1741},[161,11097,11098,11482],{},[164,11099,11100,11148,11150,11194,11196,11290,11292,11386,11388],{},[164,11101,11102,11104,11146],{},[339,11103,1140],{"fence":179},[1745,11105,11106],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,11107,11108,11122,11136],{},[1753,11109,11110],{},[1756,11111,11112],{"scriptlevel":1758,"displaystyle":1139},[164,11113,11114,11120],{},[631,11115,11116,11118],{},[167,11117,1070],{},[167,11119,266],{},[339,11121,346],{"separator":179},[1753,11123,11124],{},[1756,11125,11126],{"scriptlevel":1758,"displaystyle":1139},[164,11127,11128,11134],{},[631,11129,11130,11132],{},[167,11131,1070],{},[167,11133,1037],{},[339,11135,346],{"separator":179},[1753,11137,11138],{},[1756,11139,11140],{"scriptlevel":1758,"displaystyle":1139},[631,11141,11142,11144],{},[167,11143,1070],{},[167,11145,297],{},[339,11147,1153],{"fence":179},[339,11149,1784],{},[164,11151,11152,11154,11192],{},[339,11153,1140],{"fence":179},[1745,11155,11156],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,11157,11158,11172,11186],{},[1753,11159,11160],{},[1756,11161,11162],{"scriptlevel":1758,"displaystyle":1139},[164,11163,11164,11166,11168,11170],{},[167,11165,349],{},[339,11167,341],{},[167,11169,169],{},[339,11171,346],{"separator":179},[1753,11173,11174],{},[1756,11175,11176],{"scriptlevel":1758,"displaystyle":1139},[164,11177,11178,11180,11182,11184],{},[167,11179,337],{},[339,11181,341],{},[167,11183,169],{},[339,11185,346],{"separator":179},[1753,11187,11188],{},[1756,11189,11190],{"scriptlevel":1758,"displaystyle":1139},[637,11191,1758],{},[339,11193,1153],{"fence":179},[339,11195,5146],{},[164,11197,11198,11200,11288],{},[339,11199,1140],{"fence":179},[1745,11201,11202,11234,11254],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,11203,11204,11216,11222],{},[1753,11205,11206],{},[1756,11207,11208],{"scriptlevel":1758,"displaystyle":1139},[164,11209,11210,11212,11214],{},[167,11211,349],{},[339,11213,341],{},[167,11215,220],{},[1753,11217,11218],{},[1756,11219,11220],{"scriptlevel":1758,"displaystyle":1139},[637,11221,1758],{},[1753,11223,11224],{},[1756,11225,11226],{"scriptlevel":1758,"displaystyle":1139},[164,11227,11228,11230,11232],{},[167,11229,337],{},[339,11231,341],{},[167,11233,220],{},[1750,11235,11236,11242,11248],{},[1753,11237,11238],{},[1756,11239,11240],{"scriptlevel":1758,"displaystyle":1139},[637,11241,1758],{},[1753,11243,11244],{},[1756,11245,11246],{"scriptlevel":1758,"displaystyle":1139},[637,11247,649],{},[1753,11249,11250],{},[1756,11251,11252],{"scriptlevel":1758,"displaystyle":1139},[637,11253,1758],{},[1750,11255,11256,11270,11276],{},[1753,11257,11258],{},[1756,11259,11260],{"scriptlevel":1758,"displaystyle":1139},[164,11261,11262,11264,11266,11268],{},[339,11263,942],{},[167,11265,337],{},[339,11267,341],{},[167,11269,220],{},[1753,11271,11272],{},[1756,11273,11274],{"scriptlevel":1758,"displaystyle":1139},[637,11275,1758],{},[1753,11277,11278],{},[1756,11279,11280],{"scriptlevel":1758,"displaystyle":1139},[164,11281,11282,11284,11286],{},[167,11283,349],{},[339,11285,341],{},[167,11287,220],{},[339,11289,1153],{"fence":179},[339,11291,5146],{},[164,11293,11294,11296,11384],{},[339,11295,1140],{"fence":179},[1745,11297,11298,11318,11350],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,11299,11300,11306,11312],{},[1753,11301,11302],{},[1756,11303,11304],{"scriptlevel":1758,"displaystyle":1139},[637,11305,649],{},[1753,11307,11308],{},[1756,11309,11310],{"scriptlevel":1758,"displaystyle":1139},[637,11311,1758],{},[1753,11313,11314],{},[1756,11315,11316],{"scriptlevel":1758,"displaystyle":1139},[637,11317,1758],{},[1750,11319,11320,11326,11338],{},[1753,11321,11322],{},[1756,11323,11324],{"scriptlevel":1758,"displaystyle":1139},[637,11325,1758],{},[1753,11327,11328],{},[1756,11329,11330],{"scriptlevel":1758,"displaystyle":1139},[164,11331,11332,11334,11336],{},[167,11333,349],{},[339,11335,341],{},[167,11337,244],{},[1753,11339,11340],{},[1756,11341,11342],{"scriptlevel":1758,"displaystyle":1139},[164,11343,11344,11346,11348],{},[167,11345,337],{},[339,11347,341],{},[167,11349,244],{},[1750,11351,11352,11358,11372],{},[1753,11353,11354],{},[1756,11355,11356],{"scriptlevel":1758,"displaystyle":1139},[637,11357,1758],{},[1753,11359,11360],{},[1756,11361,11362],{"scriptlevel":1758,"displaystyle":1139},[164,11363,11364,11366,11368,11370],{},[339,11365,942],{},[167,11367,337],{},[339,11369,341],{},[167,11371,244],{},[1753,11373,11374],{},[1756,11375,11376],{"scriptlevel":1758,"displaystyle":1139},[164,11377,11378,11380,11382],{},[167,11379,349],{},[339,11381,341],{},[167,11383,244],{},[339,11385,1153],{"fence":179},[339,11387,5146],{},[164,11389,11390,11392,11480],{},[339,11391,1140],{"fence":179},[1745,11393,11394,11426,11460],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,11395,11396,11408,11420],{},[1753,11397,11398],{},[1756,11399,11400],{"scriptlevel":1758,"displaystyle":1139},[164,11401,11402,11404,11406],{},[167,11403,349],{},[339,11405,341],{},[167,11407,248],{},[1753,11409,11410],{},[1756,11411,11412],{"scriptlevel":1758,"displaystyle":1139},[164,11413,11414,11416,11418],{},[167,11415,337],{},[339,11417,341],{},[167,11419,248],{},[1753,11421,11422],{},[1756,11423,11424],{"scriptlevel":1758,"displaystyle":1139},[637,11425,1758],{},[1750,11427,11428,11442,11454],{},[1753,11429,11430],{},[1756,11431,11432],{"scriptlevel":1758,"displaystyle":1139},[164,11433,11434,11436,11438,11440],{},[339,11435,942],{},[167,11437,337],{},[339,11439,341],{},[167,11441,248],{},[1753,11443,11444],{},[1756,11445,11446],{"scriptlevel":1758,"displaystyle":1139},[164,11447,11448,11450,11452],{},[167,11449,349],{},[339,11451,341],{},[167,11453,248],{},[1753,11455,11456],{},[1756,11457,11458],{"scriptlevel":1758,"displaystyle":1139},[637,11459,1758],{},[1750,11461,11462,11468,11474],{},[1753,11463,11464],{},[1756,11465,11466],{"scriptlevel":1758,"displaystyle":1139},[637,11467,1758],{},[1753,11469,11470],{},[1756,11471,11472],{"scriptlevel":1758,"displaystyle":1139},[637,11473,1758],{},[1753,11475,11476],{},[1756,11477,11478],{"scriptlevel":1758,"displaystyle":1139},[637,11479,649],{},[339,11481,1153],{"fence":179},[171,11483,11484],{"encoding":173},"\\left( \\begin{matrix}\nN_x, &\nN_y, &\nN_z \\end{matrix} \\right)\n=\n\\left( \\begin{matrix}\n\\cos \\theta, &\n\\sin \\theta, &\n0 \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n\\cos \\phi & 0 & \\sin \\phi \\\\\n0 & 1 & 0 \\\\\n-\\sin \\phi & 0 & \\cos \\phi \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n1 & 0 & 0 \\\\\n0 & \\cos A & \\sin A \\\\\n0 & -\\sin A & \\cos A \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n\\cos B & \\sin B & 0 \\\\\n-\\sin B & \\cos B & 0 \\\\\n0 & 0 & 1 \\end{matrix} \\right)",[148,11486,11488,11755,11923,12231,12539],{"className":11487,"ariaHidden":179},[178],[148,11489,11491,11494,11746,11749,11752],{"className":11490},[183],[148,11492],{"className":11493,"style":5253},[187],[148,11495,11497,11503,11740],{"className":11496},[2659],[148,11498,11500],{"className":11499,"style":2664},[1169,2663],[148,11501,1140],{"className":11502},[2668,5263],[148,11504,11506],{"className":11505},[192],[148,11507,11509,11583,11586,11589,11663,11666,11669],{"className":11508},[1745],[148,11510,11512],{"className":11511},[5273],[148,11513,11515,11575],{"className":11514},[683,684],[148,11516,11518,11572],{"className":11517},[688],[148,11519,11521],{"className":11520,"style":5283},[692],[148,11522,11523,11526],{"style":5286},[148,11524],{"className":11525,"style":1896},[700],[148,11527,11529,11569],{"className":11528},[192],[148,11530,11532,11535],{"className":11531},[192],[148,11533,1070],{"className":11534,"style":10865},[192,193],[148,11536,11538],{"className":11537},[679],[148,11539,11541,11561],{"className":11540},[683,684],[148,11542,11544,11558],{"className":11543},[688],[148,11545,11547],{"className":11546,"style":10878},[692],[148,11548,11549,11552],{"style":10881},[148,11550],{"className":11551,"style":701},[700],[148,11553,11555],{"className":11554},[705,706,707,708],[148,11556,266],{"className":11557},[192,193,708],[148,11559,716],{"className":11560},[715],[148,11562,11564],{"className":11563},[688],[148,11565,11567],{"className":11566,"style":723},[692],[148,11568],{},[148,11570,346],{"className":11571},[381],[148,11573,716],{"className":11574},[715],[148,11576,11578],{"className":11577},[688],[148,11579,11581],{"className":11580,"style":5406},[692],[148,11582],{},[148,11584],{"className":11585,"style":5413},[5412],[148,11587],{"className":11588,"style":5413},[5412],[148,11590,11592],{"className":11591},[5273],[148,11593,11595,11655],{"className":11594},[683,684],[148,11596,11598,11652],{"className":11597},[688],[148,11599,11601],{"className":11600,"style":5283},[692],[148,11602,11603,11606],{"style":5286},[148,11604],{"className":11605,"style":1896},[700],[148,11607,11609,11649],{"className":11608},[192],[148,11610,11612,11615],{"className":11611},[192],[148,11613,1070],{"className":11614,"style":10865},[192,193],[148,11616,11618],{"className":11617},[679],[148,11619,11621,11641],{"className":11620},[683,684],[148,11622,11624,11638],{"className":11623},[688],[148,11625,11627],{"className":11626,"style":10878},[692],[148,11628,11629,11632],{"style":10881},[148,11630],{"className":11631,"style":701},[700],[148,11633,11635],{"className":11634},[705,706,707,708],[148,11636,1037],{"className":11637,"style":970},[192,193,708],[148,11639,716],{"className":11640},[715],[148,11642,11644],{"className":11643},[688],[148,11645,11647],{"className":11646,"style":10946},[692],[148,11648],{},[148,11650,346],{"className":11651},[381],[148,11653,716],{"className":11654},[715],[148,11656,11658],{"className":11657},[688],[148,11659,11661],{"className":11660,"style":5406},[692],[148,11662],{},[148,11664],{"className":11665,"style":5413},[5412],[148,11667],{"className":11668,"style":5413},[5412],[148,11670,11672],{"className":11671},[5273],[148,11673,11675,11732],{"className":11674},[683,684],[148,11676,11678,11729],{"className":11677},[688],[148,11679,11681],{"className":11680,"style":5283},[692],[148,11682,11683,11686],{"style":5286},[148,11684],{"className":11685,"style":1896},[700],[148,11687,11689],{"className":11688},[192],[148,11690,11692,11695],{"className":11691},[192],[148,11693,1070],{"className":11694,"style":10865},[192,193],[148,11696,11698],{"className":11697},[679],[148,11699,11701,11721],{"className":11700},[683,684],[148,11702,11704,11718],{"className":11703},[688],[148,11705,11707],{"className":11706,"style":10878},[692],[148,11708,11709,11712],{"style":10881},[148,11710],{"className":11711,"style":701},[700],[148,11713,11715],{"className":11714},[705,706,707,708],[148,11716,297],{"className":11717,"style":312},[192,193,708],[148,11719,716],{"className":11720},[715],[148,11722,11724],{"className":11723},[688],[148,11725,11727],{"className":11726,"style":723},[692],[148,11728],{},[148,11730,716],{"className":11731},[715],[148,11733,11735],{"className":11734},[688],[148,11736,11738],{"className":11737,"style":5406},[692],[148,11739],{},[148,11741,11743],{"className":11742,"style":2664},[1194,2663],[148,11744,1153],{"className":11745},[2668,5263],[148,11747],{"className":11748,"style":2083},[373],[148,11750,1784],{"className":11751},[2087],[148,11753],{"className":11754,"style":2083},[373],[148,11756,11758,11761,11914,11917,11920],{"className":11757},[183],[148,11759],{"className":11760,"style":5253},[187],[148,11762,11764,11770,11908],{"className":11763},[2659],[148,11765,11767],{"className":11766,"style":2664},[1169,2663],[148,11768,1140],{"className":11769},[2668,5263],[148,11771,11773],{"className":11772},[192],[148,11774,11776,11819,11822,11825,11868,11871,11874],{"className":11775},[1745],[148,11777,11779],{"className":11778},[5273],[148,11780,11782,11811],{"className":11781},[683,684],[148,11783,11785,11808],{"className":11784},[688],[148,11786,11788],{"className":11787,"style":5283},[692],[148,11789,11790,11793],{"style":5286},[148,11791],{"className":11792,"style":1896},[700],[148,11794,11796,11799,11802,11805],{"className":11795},[192],[148,11797,349],{"className":11798},[369],[148,11800],{"className":11801,"style":374},[373],[148,11803,169],{"className":11804,"style":194},[192,193],[148,11806,346],{"className":11807},[381],[148,11809,716],{"className":11810},[715],[148,11812,11814],{"className":11813},[688],[148,11815,11817],{"className":11816,"style":5406},[692],[148,11818],{},[148,11820],{"className":11821,"style":5413},[5412],[148,11823],{"className":11824,"style":5413},[5412],[148,11826,11828],{"className":11827},[5273],[148,11829,11831,11860],{"className":11830},[683,684],[148,11832,11834,11857],{"className":11833},[688],[148,11835,11837],{"className":11836,"style":5283},[692],[148,11838,11839,11842],{"style":5286},[148,11840],{"className":11841,"style":1896},[700],[148,11843,11845,11848,11851,11854],{"className":11844},[192],[148,11846,337],{"className":11847},[369],[148,11849],{"className":11850,"style":374},[373],[148,11852,169],{"className":11853,"style":194},[192,193],[148,11855,346],{"className":11856},[381],[148,11858,716],{"className":11859},[715],[148,11861,11863],{"className":11862},[688],[148,11864,11866],{"className":11865,"style":5406},[692],[148,11867],{},[148,11869],{"className":11870,"style":5413},[5412],[148,11872],{"className":11873,"style":5413},[5412],[148,11875,11877],{"className":11876},[5273],[148,11878,11880,11900],{"className":11879},[683,684],[148,11881,11883,11897],{"className":11882},[688],[148,11884,11886],{"className":11885,"style":5283},[692],[148,11887,11888,11891],{"style":5286},[148,11889],{"className":11890,"style":1896},[700],[148,11892,11894],{"className":11893},[192],[148,11895,1758],{"className":11896},[192],[148,11898,716],{"className":11899},[715],[148,11901,11903],{"className":11902},[688],[148,11904,11906],{"className":11905,"style":5406},[692],[148,11907],{},[148,11909,11911],{"className":11910,"style":2664},[1194,2663],[148,11912,1153],{"className":11913},[2668,5263],[148,11915],{"className":11916,"style":729},[373],[148,11918,5146],{"className":11919},[733],[148,11921],{"className":11922,"style":729},[373],[148,11924,11926,11929,12222,12225,12228],{"className":11925},[183],[148,11927],{"className":11928,"style":5564},[187],[148,11930,11932,11969,12185],{"className":11931},[2659],[148,11933,11935],{"className":11934},[1169],[148,11936,11938],{"className":11937},[2668,5574],[148,11939,11941,11961],{"className":11940},[683,684],[148,11942,11944,11958],{"className":11943},[688],[148,11945,11947],{"className":11946,"style":5584},[692],[148,11948,11949,11952],{"style":5587},[148,11950],{"className":11951,"style":5591},[700],[148,11953,11954],{"style":5594},[5596,11955,11956],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,11957],{"d":5605},[148,11959,716],{"className":11960},[715],[148,11962,11964],{"className":11963},[688],[148,11965,11967],{"className":11966,"style":5615},[692],[148,11968],{},[148,11970,11972],{"className":11971},[192],[148,11973,11975,12049,12052,12055,12111,12114,12117],{"className":11974},[1745],[148,11976,11978],{"className":11977},[5273],[148,11979,11981,12041],{"className":11980},[683,684],[148,11982,11984,12038],{"className":11983},[688],[148,11985,11987,12004,12015],{"className":11986,"style":5584},[692],[148,11988,11989,11992],{"style":5638},[148,11990],{"className":11991,"style":1896},[700],[148,11993,11995,11998,12001],{"className":11994},[192],[148,11996,349],{"className":11997},[369],[148,11999],{"className":12000,"style":374},[373],[148,12002,220],{"className":12003},[192,193],[148,12005,12006,12009],{"style":5286},[148,12007],{"className":12008,"style":1896},[700],[148,12010,12012],{"className":12011},[192],[148,12013,1758],{"className":12014},[192],[148,12016,12017,12020],{"style":5667},[148,12018],{"className":12019,"style":1896},[700],[148,12021,12023,12026,12029,12032,12035],{"className":12022},[192],[148,12024,942],{"className":12025},[192],[148,12027],{"className":12028,"style":374},[373],[148,12030,337],{"className":12031},[369],[148,12033],{"className":12034,"style":374},[373],[148,12036,220],{"className":12037},[192,193],[148,12039,716],{"className":12040},[715],[148,12042,12044],{"className":12043},[688],[148,12045,12047],{"className":12046,"style":5615},[692],[148,12048],{},[148,12050],{"className":12051,"style":5413},[5412],[148,12053],{"className":12054,"style":5413},[5412],[148,12056,12058],{"className":12057},[5273],[148,12059,12061,12103],{"className":12060},[683,684],[148,12062,12064,12100],{"className":12063},[688],[148,12065,12067,12078,12089],{"className":12066,"style":5584},[692],[148,12068,12069,12072],{"style":5638},[148,12070],{"className":12071,"style":1896},[700],[148,12073,12075],{"className":12074},[192],[148,12076,1758],{"className":12077},[192],[148,12079,12080,12083],{"style":5286},[148,12081],{"className":12082,"style":1896},[700],[148,12084,12086],{"className":12085},[192],[148,12087,649],{"className":12088},[192],[148,12090,12091,12094],{"style":5667},[148,12092],{"className":12093,"style":1896},[700],[148,12095,12097],{"className":12096},[192],[148,12098,1758],{"className":12099},[192],[148,12101,716],{"className":12102},[715],[148,12104,12106],{"className":12105},[688],[148,12107,12109],{"className":12108,"style":5615},[692],[148,12110],{},[148,12112],{"className":12113,"style":5413},[5412],[148,12115],{"className":12116,"style":5413},[5412],[148,12118,12120],{"className":12119},[5273],[148,12121,12123,12177],{"className":12122},[683,684],[148,12124,12126,12174],{"className":12125},[688],[148,12127,12129,12146,12157],{"className":12128,"style":5584},[692],[148,12130,12131,12134],{"style":5638},[148,12132],{"className":12133,"style":1896},[700],[148,12135,12137,12140,12143],{"className":12136},[192],[148,12138,337],{"className":12139},[369],[148,12141],{"className":12142,"style":374},[373],[148,12144,220],{"className":12145},[192,193],[148,12147,12148,12151],{"style":5286},[148,12149],{"className":12150,"style":1896},[700],[148,12152,12154],{"className":12153},[192],[148,12155,1758],{"className":12156},[192],[148,12158,12159,12162],{"style":5667},[148,12160],{"className":12161,"style":1896},[700],[148,12163,12165,12168,12171],{"className":12164},[192],[148,12166,349],{"className":12167},[369],[148,12169],{"className":12170,"style":374},[373],[148,12172,220],{"className":12173},[192,193],[148,12175,716],{"className":12176},[715],[148,12178,12180],{"className":12179},[688],[148,12181,12183],{"className":12182,"style":5615},[692],[148,12184],{},[148,12186,12188],{"className":12187},[1194],[148,12189,12191],{"className":12190},[2668,5574],[148,12192,12194,12214],{"className":12193},[683,684],[148,12195,12197,12211],{"className":12196},[688],[148,12198,12200],{"className":12199,"style":5584},[692],[148,12201,12202,12205],{"style":5587},[148,12203],{"className":12204,"style":5591},[700],[148,12206,12207],{"style":5594},[5596,12208,12209],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,12210],{"d":5862},[148,12212,716],{"className":12213},[715],[148,12215,12217],{"className":12216},[688],[148,12218,12220],{"className":12219,"style":5615},[692],[148,12221],{},[148,12223],{"className":12224,"style":729},[373],[148,12226,5146],{"className":12227},[733],[148,12229],{"className":12230,"style":729},[373],[148,12232,12234,12237,12530,12533,12536],{"className":12233},[183],[148,12235],{"className":12236,"style":5564},[187],[148,12238,12240,12277,12493],{"className":12239},[2659],[148,12241,12243],{"className":12242},[1169],[148,12244,12246],{"className":12245},[2668,5574],[148,12247,12249,12269],{"className":12248},[683,684],[148,12250,12252,12266],{"className":12251},[688],[148,12253,12255],{"className":12254,"style":5584},[692],[148,12256,12257,12260],{"style":5587},[148,12258],{"className":12259,"style":5591},[700],[148,12261,12262],{"style":5594},[5596,12263,12264],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,12265],{"d":5605},[148,12267,716],{"className":12268},[715],[148,12270,12272],{"className":12271},[688],[148,12273,12275],{"className":12274,"style":5615},[692],[148,12276],{},[148,12278,12280],{"className":12279},[192],[148,12281,12283,12339,12342,12345,12419,12422,12425],{"className":12282},[1745],[148,12284,12286],{"className":12285},[5273],[148,12287,12289,12331],{"className":12288},[683,684],[148,12290,12292,12328],{"className":12291},[688],[148,12293,12295,12306,12317],{"className":12294,"style":5584},[692],[148,12296,12297,12300],{"style":5638},[148,12298],{"className":12299,"style":1896},[700],[148,12301,12303],{"className":12302},[192],[148,12304,649],{"className":12305},[192],[148,12307,12308,12311],{"style":5286},[148,12309],{"className":12310,"style":1896},[700],[148,12312,12314],{"className":12313},[192],[148,12315,1758],{"className":12316},[192],[148,12318,12319,12322],{"style":5667},[148,12320],{"className":12321,"style":1896},[700],[148,12323,12325],{"className":12324},[192],[148,12326,1758],{"className":12327},[192],[148,12329,716],{"className":12330},[715],[148,12332,12334],{"className":12333},[688],[148,12335,12337],{"className":12336,"style":5615},[692],[148,12338],{},[148,12340],{"className":12341,"style":5413},[5412],[148,12343],{"className":12344,"style":5413},[5412],[148,12346,12348],{"className":12347},[5273],[148,12349,12351,12411],{"className":12350},[683,684],[148,12352,12354,12408],{"className":12353},[688],[148,12355,12357,12368,12385],{"className":12356,"style":5584},[692],[148,12358,12359,12362],{"style":5638},[148,12360],{"className":12361,"style":1896},[700],[148,12363,12365],{"className":12364},[192],[148,12366,1758],{"className":12367},[192],[148,12369,12370,12373],{"style":5286},[148,12371],{"className":12372,"style":1896},[700],[148,12374,12376,12379,12382],{"className":12375},[192],[148,12377,349],{"className":12378},[369],[148,12380],{"className":12381,"style":374},[373],[148,12383,244],{"className":12384},[192,193],[148,12386,12387,12390],{"style":5667},[148,12388],{"className":12389,"style":1896},[700],[148,12391,12393,12396,12399,12402,12405],{"className":12392},[192],[148,12394,942],{"className":12395},[192],[148,12397],{"className":12398,"style":374},[373],[148,12400,337],{"className":12401},[369],[148,12403],{"className":12404,"style":374},[373],[148,12406,244],{"className":12407},[192,193],[148,12409,716],{"className":12410},[715],[148,12412,12414],{"className":12413},[688],[148,12415,12417],{"className":12416,"style":5615},[692],[148,12418],{},[148,12420],{"className":12421,"style":5413},[5412],[148,12423],{"className":12424,"style":5413},[5412],[148,12426,12428],{"className":12427},[5273],[148,12429,12431,12485],{"className":12430},[683,684],[148,12432,12434,12482],{"className":12433},[688],[148,12435,12437,12448,12465],{"className":12436,"style":5584},[692],[148,12438,12439,12442],{"style":5638},[148,12440],{"className":12441,"style":1896},[700],[148,12443,12445],{"className":12444},[192],[148,12446,1758],{"className":12447},[192],[148,12449,12450,12453],{"style":5286},[148,12451],{"className":12452,"style":1896},[700],[148,12454,12456,12459,12462],{"className":12455},[192],[148,12457,337],{"className":12458},[369],[148,12460],{"className":12461,"style":374},[373],[148,12463,244],{"className":12464},[192,193],[148,12466,12467,12470],{"style":5667},[148,12468],{"className":12469,"style":1896},[700],[148,12471,12473,12476,12479],{"className":12472},[192],[148,12474,349],{"className":12475},[369],[148,12477],{"className":12478,"style":374},[373],[148,12480,244],{"className":12481},[192,193],[148,12483,716],{"className":12484},[715],[148,12486,12488],{"className":12487},[688],[148,12489,12491],{"className":12490,"style":5615},[692],[148,12492],{},[148,12494,12496],{"className":12495},[1194],[148,12497,12499],{"className":12498},[2668,5574],[148,12500,12502,12522],{"className":12501},[683,684],[148,12503,12505,12519],{"className":12504},[688],[148,12506,12508],{"className":12507,"style":5584},[692],[148,12509,12510,12513],{"style":5587},[148,12511],{"className":12512,"style":5591},[700],[148,12514,12515],{"style":5594},[5596,12516,12517],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,12518],{"d":5862},[148,12520,716],{"className":12521},[715],[148,12523,12525],{"className":12524},[688],[148,12526,12528],{"className":12527,"style":5615},[692],[148,12529],{},[148,12531],{"className":12532,"style":729},[373],[148,12534,5146],{"className":12535},[733],[148,12537],{"className":12538,"style":729},[373],[148,12540,12542,12545],{"className":12541},[183],[148,12543],{"className":12544,"style":5564},[187],[148,12546,12548,12585,12801],{"className":12547},[2659],[148,12549,12551],{"className":12550},[1169],[148,12552,12554],{"className":12553},[2668,5574],[148,12555,12557,12577],{"className":12556},[683,684],[148,12558,12560,12574],{"className":12559},[688],[148,12561,12563],{"className":12562,"style":5584},[692],[148,12564,12565,12568],{"style":5587},[148,12566],{"className":12567,"style":5591},[700],[148,12569,12570],{"style":5594},[5596,12571,12572],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,12573],{"d":5605},[148,12575,716],{"className":12576},[715],[148,12578,12580],{"className":12579},[688],[148,12581,12583],{"className":12582,"style":5615},[692],[148,12584],{},[148,12586,12588],{"className":12587},[192],[148,12589,12591,12665,12668,12671,12739,12742,12745],{"className":12590},[1745],[148,12592,12594],{"className":12593},[5273],[148,12595,12597,12657],{"className":12596},[683,684],[148,12598,12600,12654],{"className":12599},[688],[148,12601,12603,12620,12643],{"className":12602,"style":5584},[692],[148,12604,12605,12608],{"style":5638},[148,12606],{"className":12607,"style":1896},[700],[148,12609,12611,12614,12617],{"className":12610},[192],[148,12612,349],{"className":12613},[369],[148,12615],{"className":12616,"style":374},[373],[148,12618,248],{"className":12619,"style":593},[192,193],[148,12621,12622,12625],{"style":5286},[148,12623],{"className":12624,"style":1896},[700],[148,12626,12628,12631,12634,12637,12640],{"className":12627},[192],[148,12629,942],{"className":12630},[192],[148,12632],{"className":12633,"style":374},[373],[148,12635,337],{"className":12636},[369],[148,12638],{"className":12639,"style":374},[373],[148,12641,248],{"className":12642,"style":593},[192,193],[148,12644,12645,12648],{"style":5667},[148,12646],{"className":12647,"style":1896},[700],[148,12649,12651],{"className":12650},[192],[148,12652,1758],{"className":12653},[192],[148,12655,716],{"className":12656},[715],[148,12658,12660],{"className":12659},[688],[148,12661,12663],{"className":12662,"style":5615},[692],[148,12664],{},[148,12666],{"className":12667,"style":5413},[5412],[148,12669],{"className":12670,"style":5413},[5412],[148,12672,12674],{"className":12673},[5273],[148,12675,12677,12731],{"className":12676},[683,684],[148,12678,12680,12728],{"className":12679},[688],[148,12681,12683,12700,12717],{"className":12682,"style":5584},[692],[148,12684,12685,12688],{"style":5638},[148,12686],{"className":12687,"style":1896},[700],[148,12689,12691,12694,12697],{"className":12690},[192],[148,12692,337],{"className":12693},[369],[148,12695],{"className":12696,"style":374},[373],[148,12698,248],{"className":12699,"style":593},[192,193],[148,12701,12702,12705],{"style":5286},[148,12703],{"className":12704,"style":1896},[700],[148,12706,12708,12711,12714],{"className":12707},[192],[148,12709,349],{"className":12710},[369],[148,12712],{"className":12713,"style":374},[373],[148,12715,248],{"className":12716,"style":593},[192,193],[148,12718,12719,12722],{"style":5667},[148,12720],{"className":12721,"style":1896},[700],[148,12723,12725],{"className":12724},[192],[148,12726,1758],{"className":12727},[192],[148,12729,716],{"className":12730},[715],[148,12732,12734],{"className":12733},[688],[148,12735,12737],{"className":12736,"style":5615},[692],[148,12738],{},[148,12740],{"className":12741,"style":5413},[5412],[148,12743],{"className":12744,"style":5413},[5412],[148,12746,12748],{"className":12747},[5273],[148,12749,12751,12793],{"className":12750},[683,684],[148,12752,12754,12790],{"className":12753},[688],[148,12755,12757,12768,12779],{"className":12756,"style":5584},[692],[148,12758,12759,12762],{"style":5638},[148,12760],{"className":12761,"style":1896},[700],[148,12763,12765],{"className":12764},[192],[148,12766,1758],{"className":12767},[192],[148,12769,12770,12773],{"style":5286},[148,12771],{"className":12772,"style":1896},[700],[148,12774,12776],{"className":12775},[192],[148,12777,1758],{"className":12778},[192],[148,12780,12781,12784],{"style":5667},[148,12782],{"className":12783,"style":1896},[700],[148,12785,12787],{"className":12786},[192],[148,12788,649],{"className":12789},[192],[148,12791,716],{"className":12792},[715],[148,12794,12796],{"className":12795},[688],[148,12797,12799],{"className":12798,"style":5615},[692],[148,12800],{},[148,12802,12804],{"className":12803},[1194],[148,12805,12807],{"className":12806},[2668,5574],[148,12808,12810,12830],{"className":12809},[683,684],[148,12811,12813,12827],{"className":12812},[688],[148,12814,12816],{"className":12815,"style":5584},[692],[148,12817,12818,12821],{"style":5587},[148,12819],{"className":12820,"style":5591},[700],[148,12822,12823],{"style":5594},[5596,12824,12825],{"xmlns":5598,"width":5599,"height":5600,"viewBox":5601},[5603,12826],{"d":5862},[148,12828,716],{"className":12829},[715],[148,12831,12833],{"className":12832},[688],[148,12834,12836],{"className":12835,"style":5615},[692],[148,12837],{},[13,12839,12840,12841,12911,12912,12963,12964,13021,13022,13113,13114,13302,13303,13331,13332,3220],{},"那么应该选择什么光照方向？选择一个来自观察者上方和后方的光照方向 ",[148,12842,12844,12872],{"className":12843},[151],[148,12845,12847],{"className":12846},[155],[157,12848,12849],{"xmlns":159},[161,12850,12851,12869],{},[164,12852,12853,12855,12857,12859,12861,12863,12865,12867],{},[339,12854,1140],{"stretchy":1139},[637,12856,1758],{},[339,12858,346],{"separator":179},[637,12860,649],{},[339,12862,346],{"separator":179},[339,12864,942],{},[637,12866,649],{},[339,12868,1153],{"stretchy":1139},[171,12870,12871],{"encoding":173},"(0,1,-1)",[148,12873,12875],{"className":12874,"ariaHidden":179},[178],[148,12876,12878,12881,12884,12887,12890,12893,12896,12899,12902,12905,12908],{"className":12877},[183],[148,12879],{"className":12880,"style":902},[187],[148,12882,1140],{"className":12883},[1169],[148,12885,1758],{"className":12886},[192],[148,12888,346],{"className":12889},[381],[148,12891],{"className":12892,"style":374},[373],[148,12894,649],{"className":12895},[192],[148,12897,346],{"className":12898},[381],[148,12900],{"className":12901,"style":374},[373],[148,12903,942],{"className":12904},[192],[148,12906,649],{"className":12907},[192],[148,12909,1153],{"className":12910},[1194],"，其中 ",[148,12913,12915,12933],{"className":12914},[151],[148,12916,12918],{"className":12917},[155],[157,12919,12920],{"xmlns":159},[161,12921,12922,12930],{},[164,12923,12924,12926,12928],{},[167,12925,1037],{},[339,12927,1784],{},[637,12929,649],{},[171,12931,12932],{"encoding":173},"y=1",[148,12934,12936,12954],{"className":12935,"ariaHidden":179},[178],[148,12937,12939,12942,12945,12948,12951],{"className":12938},[183],[148,12940],{"className":12941,"style":1049},[187],[148,12943,1037],{"className":12944,"style":970},[192,193],[148,12946],{"className":12947,"style":2083},[373],[148,12949,1784],{"className":12950},[2087],[148,12952],{"className":12953,"style":2083},[373],[148,12955,12957,12960],{"className":12956},[183],[148,12958],{"className":12959,"style":856},[187],[148,12961,649],{"className":12962},[192]," 表示向上，",[148,12965,12967,12987],{"className":12966},[151],[148,12968,12970],{"className":12969},[155],[157,12971,12972],{"xmlns":159},[161,12973,12974,12984],{},[164,12975,12976,12978,12980,12982],{},[167,12977,297],{},[339,12979,1784],{},[339,12981,942],{},[637,12983,649],{},[171,12985,12986],{"encoding":173},"z=-1",[148,12988,12990,13008],{"className":12989,"ariaHidden":179},[178],[148,12991,12993,12996,12999,13002,13005],{"className":12992},[183],[148,12994],{"className":12995,"style":278},[187],[148,12997,297],{"className":12998,"style":312},[192,193],[148,13000],{"className":13001,"style":2083},[373],[148,13003,1784],{"className":13004},[2087],[148,13006],{"className":13007,"style":2083},[373],[148,13009,13011,13015,13018],{"className":13010},[183],[148,13012],{"className":13013,"style":13014},[187],"height:0.7278em;vertical-align:-0.0833em;",[148,13016,942],{"className":13017},[192],[148,13019,649],{"className":13020},[192]," 指向屏幕深处（远离观察者）。从技术上讲，这应该是一个归一化的单位向量，而这个向量的长度是 ",[148,13023,13025,13042],{"className":13024},[151],[148,13026,13028],{"className":13027},[155],[157,13029,13030],{"xmlns":159},[161,13031,13032,13039],{},[164,13033,13034],{},[13035,13036,13037],"msqrt",{},[637,13038,639],{},[171,13040,13041],{"encoding":173},"\\sqrt{2}",[148,13043,13045],{"className":13044,"ariaHidden":179},[178],[148,13046,13048,13052],{"className":13047},[183],[148,13049],{"className":13050,"style":13051},[187],"height:1.04em;vertical-align:-0.1328em;",[148,13053,13056],{"className":13054},[192,13055],"sqrt",[148,13057,13059,13104],{"className":13058},[683,684],[148,13060,13062,13101],{"className":13061},[688],[148,13063,13066,13081],{"className":13064,"style":13065},[692],"height:0.9072em;",[148,13067,13071,13074],{"className":13068,"style":13070},[13069],"svg-align","top:-3em;",[148,13072],{"className":13073,"style":1896},[700],[148,13075,13078],{"className":13076,"style":13077},[192],"padding-left:0.833em;",[148,13079,639],{"className":13080},[192],[148,13082,13084,13087],{"style":13083},"top:-2.8672em;",[148,13085],{"className":13086,"style":1896},[700],[148,13088,13092],{"className":13089,"style":13091},[13090],"hide-tail","min-width:0.853em;height:1.08em;",[5596,13093,13098],{"xmlns":5598,"width":13094,"height":13095,"viewBox":13096,"preserveAspectRatio":13097},"400em","1.08em","0 0 400000 1080","xMinYMin slice",[5603,13099],{"d":13100},"M95,702\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl0 -0\nc5.3,-9.3,12,-14,20,-14\nH400000v40H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM834 80h400000v40h-400000z",[148,13102,716],{"className":13103},[715],[148,13105,13107],{"className":13106},[688],[148,13108,13111],{"className":13109,"style":13110},[692],"height:0.1328em;",[148,13112],{},"。没关系——稍后会补偿。因此计算上面的法线 ",[148,13115,13117,13155],{"className":13116},[151],[148,13118,13120],{"className":13119},[155],[157,13121,13122],{"xmlns":159},[161,13123,13124,13152],{},[164,13125,13126,13128,13134,13136,13142,13144,13150],{},[339,13127,1140],{"stretchy":1139},[631,13129,13130,13132],{},[167,13131,1070],{},[167,13133,266],{},[339,13135,346],{"separator":179},[631,13137,13138,13140],{},[167,13139,1070],{},[167,13141,1037],{},[339,13143,346],{"separator":179},[631,13145,13146,13148],{},[167,13147,1070],{},[167,13149,297],{},[339,13151,1153],{"stretchy":1139},[171,13153,13154],{"encoding":173},"(N_x,N_y,N_z)",[148,13156,13158],{"className":13157,"ariaHidden":179},[178],[148,13159,13161,13164,13167,13207,13210,13213,13253,13256,13259,13299],{"className":13160},[183],[148,13162],{"className":13163,"style":10855},[187],[148,13165,1140],{"className":13166},[1169],[148,13168,13170,13173],{"className":13169},[192],[148,13171,1070],{"className":13172,"style":10865},[192,193],[148,13174,13176],{"className":13175},[679],[148,13177,13179,13199],{"className":13178},[683,684],[148,13180,13182,13196],{"className":13181},[688],[148,13183,13185],{"className":13184,"style":10878},[692],[148,13186,13187,13190],{"style":10881},[148,13188],{"className":13189,"style":701},[700],[148,13191,13193],{"className":13192},[705,706,707,708],[148,13194,266],{"className":13195},[192,193,708],[148,13197,716],{"className":13198},[715],[148,13200,13202],{"className":13201},[688],[148,13203,13205],{"className":13204,"style":723},[692],[148,13206],{},[148,13208,346],{"className":13209},[381],[148,13211],{"className":13212,"style":374},[373],[148,13214,13216,13219],{"className":13215},[192],[148,13217,1070],{"className":13218,"style":10865},[192,193],[148,13220,13222],{"className":13221},[679],[148,13223,13225,13245],{"className":13224},[683,684],[148,13226,13228,13242],{"className":13227},[688],[148,13229,13231],{"className":13230,"style":10878},[692],[148,13232,13233,13236],{"style":10881},[148,13234],{"className":13235,"style":701},[700],[148,13237,13239],{"className":13238},[705,706,707,708],[148,13240,1037],{"className":13241,"style":970},[192,193,708],[148,13243,716],{"className":13244},[715],[148,13246,13248],{"className":13247},[688],[148,13249,13251],{"className":13250,"style":10946},[692],[148,13252],{},[148,13254,346],{"className":13255},[381],[148,13257],{"className":13258,"style":374},[373],[148,13260,13262,13265],{"className":13261},[192],[148,13263,1070],{"className":13264,"style":10865},[192,193],[148,13266,13268],{"className":13267},[679],[148,13269,13271,13291],{"className":13270},[683,684],[148,13272,13274,13288],{"className":13273},[688],[148,13275,13277],{"className":13276,"style":10878},[692],[148,13278,13279,13282],{"style":10881},[148,13280],{"className":13281,"style":701},[700],[148,13283,13285],{"className":13284},[705,706,707,708],[148,13286,297],{"className":13287,"style":312},[192,193,708],[148,13289,716],{"className":13290},[715],[148,13292,13294],{"className":13293},[688],[148,13295,13297],{"className":13296,"style":723},[692],[148,13298],{},[148,13300,1153],{"className":13301},[1194],"，与光照向量做点积，因为光照的 ",[148,13304,13306,13319],{"className":13305},[151],[148,13307,13309],{"className":13308},[155],[157,13310,13311],{"xmlns":159},[161,13312,13313,13317],{},[164,13314,13315],{},[167,13316,266],{},[171,13318,266],{"encoding":173},[148,13320,13322],{"className":13321,"ariaHidden":179},[178],[148,13323,13325,13328],{"className":13324},[183],[148,13326],{"className":13327,"style":278},[187],[148,13329,266],{"className":13330},[192,193]," 分量为 0，所以只剩下 ",[148,13333,13335,13366],{"className":13334},[151],[148,13336,13338],{"className":13337},[155],[157,13339,13340],{"xmlns":159},[161,13341,13342,13363],{},[164,13343,13344,13347,13349,13355,13357],{},[167,13345,13346],{},"L",[339,13348,1784],{},[631,13350,13351,13353],{},[167,13352,1070],{},[167,13354,1037],{},[339,13356,942],{},[631,13358,13359,13361],{},[167,13360,1070],{},[167,13362,297],{},[171,13364,13365],{"encoding":173},"L = N_y - N_z",[148,13367,13369,13387,13443],{"className":13368,"ariaHidden":179},[178],[148,13370,13372,13375,13378,13381,13384],{"className":13371},[183],[148,13373],{"className":13374,"style":6543},[187],[148,13376,13346],{"className":13377},[192,193],[148,13379],{"className":13380,"style":2083},[373],[148,13382,1784],{"className":13383},[2087],[148,13385],{"className":13386,"style":2083},[373],[148,13388,13390,13394,13434,13437,13440],{"className":13389},[183],[148,13391],{"className":13392,"style":13393},[187],"height:0.9694em;vertical-align:-0.2861em;",[148,13395,13397,13400],{"className":13396},[192],[148,13398,1070],{"className":13399,"style":10865},[192,193],[148,13401,13403],{"className":13402},[679],[148,13404,13406,13426],{"className":13405},[683,684],[148,13407,13409,13423],{"className":13408},[688],[148,13410,13412],{"className":13411,"style":10878},[692],[148,13413,13414,13417],{"style":10881},[148,13415],{"className":13416,"style":701},[700],[148,13418,13420],{"className":13419},[705,706,707,708],[148,13421,1037],{"className":13422,"style":970},[192,193,708],[148,13424,716],{"className":13425},[715],[148,13427,13429],{"className":13428},[688],[148,13430,13432],{"className":13431,"style":10946},[692],[148,13433],{},[148,13435],{"className":13436,"style":729},[373],[148,13438,942],{"className":13439},[733],[148,13441],{"className":13442,"style":729},[373],[148,13444,13446,13449],{"className":13445},[183],[148,13447],{"className":13448,"style":668},[187],[148,13450,13452,13455],{"className":13451},[192],[148,13453,1070],{"className":13454,"style":10865},[192,193],[148,13456,13458],{"className":13457},[679],[148,13459,13461,13481],{"className":13460},[683,684],[148,13462,13464,13478],{"className":13463},[688],[148,13465,13467],{"className":13466,"style":10878},[692],[148,13468,13469,13472],{"style":10881},[148,13470],{"className":13471,"style":701},[700],[148,13473,13475],{"className":13474},[705,706,707,708],[148,13476,297],{"className":13477,"style":312},[192,193,708],[148,13479,716],{"className":13480},[715],[148,13482,13484],{"className":13483},[688],[148,13485,13487],{"className":13486,"style":723},[692],[148,13488],{},[148,13490,13492],{"className":13491},[1732],[148,13493,13495,13729],{"className":13494},[151],[148,13496,13498],{"className":13497},[155],[157,13499,13500],{"xmlns":159,"display":1741},[161,13501,13502,13726],{},[1745,13503,13504,13612],{"rowspacing":1747,"columnalign":1748,"columnspacing":1215},[1750,13505,13506,13512],{},[1753,13507,13508],{},[1756,13509,13510],{"scriptlevel":1758,"displaystyle":179},[167,13511,13346],{},[1753,13513,13514],{},[1756,13515,13516],{"scriptlevel":1758,"displaystyle":179},[164,13517,13518,13520,13522,13570,13572],{},[164,13519],{},[339,13521,1784],{},[164,13523,13524,13526,13568],{},[339,13525,1140],{"fence":179},[1745,13527,13528],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,13529,13530,13544,13558],{},[1753,13531,13532],{},[1756,13533,13534],{"scriptlevel":1758,"displaystyle":1139},[164,13535,13536,13542],{},[631,13537,13538,13540],{},[167,13539,1070],{},[167,13541,266],{},[339,13543,346],{"separator":179},[1753,13545,13546],{},[1756,13547,13548],{"scriptlevel":1758,"displaystyle":1139},[164,13549,13550,13556],{},[631,13551,13552,13554],{},[167,13553,1070],{},[167,13555,1037],{},[339,13557,346],{"separator":179},[1753,13559,13560],{},[1756,13561,13562],{"scriptlevel":1758,"displaystyle":1139},[631,13563,13564,13566],{},[167,13565,1070],{},[167,13567,297],{},[339,13569,1153],{"fence":179},[339,13571,5146],{},[164,13573,13574,13576,13610],{},[339,13575,1140],{"fence":179},[1745,13577,13578],{"rowspacing":5083,"columnalign":5084,"columnspacing":5085},[1750,13579,13580,13590,13600],{},[1753,13581,13582],{},[1756,13583,13584],{"scriptlevel":1758,"displaystyle":1139},[164,13585,13586,13588],{},[637,13587,1758],{},[339,13589,346],{"separator":179},[1753,13591,13592],{},[1756,13593,13594],{"scriptlevel":1758,"displaystyle":1139},[164,13595,13596,13598],{},[637,13597,649],{},[339,13599,346],{"separator":179},[1753,13601,13602],{},[1756,13603,13604],{"scriptlevel":1758,"displaystyle":1139},[164,13605,13606,13608],{},[339,13607,942],{},[637,13609,649],{},[339,13611,1153],{"fence":179},[1750,13613,13614,13620],{},[1753,13615,13616],{},[1756,13617,13618],{"scriptlevel":1758,"displaystyle":179},[164,13619],{},[1753,13621,13622],{},[1756,13623,13624],{"scriptlevel":1758,"displaystyle":179},[164,13625,13626,13628,13630,13632,13634,13636,13638,13640,13642,13644,13646,13648,13650,13652,13654,13656,13658,13660,13662,13664,13666,13668,13670,13672,13674,13676,13678,13680,13682,13684,13686,13688,13690,13692,13694,13696,13698,13700,13702,13704,13706,13708,13710,13712,13714,13716,13718,13720,13722,13724],{},[164,13627],{},[339,13629,1784],{},[167,13631,349],{},[339,13633,341],{},[167,13635,220],{},[167,13637,349],{},[339,13639,341],{},[167,13641,169],{},[167,13643,337],{},[339,13645,341],{},[167,13647,248],{},[339,13649,942],{},[167,13651,349],{},[339,13653,341],{},[167,13655,244],{},[167,13657,349],{},[339,13659,341],{},[167,13661,169],{},[167,13663,337],{},[339,13665,341],{},[167,13667,220],{},[339,13669,942],{},[167,13671,337],{},[339,13673,341],{},[167,13675,244],{},[167,13677,337],{},[339,13679,341],{},[167,13681,169],{},[339,13683,642],{},[167,13685,349],{},[339,13687,341],{},[167,13689,248],{},[339,13691,1140],{"stretchy":1139},[167,13693,349],{},[339,13695,341],{},[167,13697,244],{},[167,13699,337],{},[339,13701,341],{},[167,13703,169],{},[339,13705,942],{},[167,13707,349],{},[339,13709,341],{},[167,13711,169],{},[167,13713,337],{},[339,13715,341],{},[167,13717,244],{},[167,13719,337],{},[339,13721,341],{},[167,13723,220],{},[339,13725,1153],{"stretchy":1139},[171,13727,13728],{"encoding":173},"\\begin{aligned}\nL &=\n\\left( \\begin{matrix}\nN_x, &\nN_y, &\nN_z \\end{matrix} \\right)\n\\cdot\n\\left( \\begin{matrix}\n0, &\n1, &\n-1 \\end{matrix} \\right)\n\\\\\n&=\n\\cos \\phi \\cos \\theta \\sin B - \\cos A \\cos \\theta \\sin \\phi - \\sin A \\sin \\theta +\n\\cos B (\\cos A \\sin \\theta - \\cos \\theta \\sin A \\sin \\phi)\n\\end{aligned}",[148,13730,13732],{"className":13731,"ariaHidden":179},[178],[148,13733,13735,13739],{"className":13734},[183],[148,13736],{"className":13737,"style":13738},[187],"height:2.71em;vertical-align:-1.105em;",[148,13740,13742],{"className":13741},[192],[148,13743,13745,13791],{"className":13744},[1745],[148,13746,13748],{"className":13747},[1849],[148,13749,13751,13782],{"className":13750},[683,684],[148,13752,13754,13779],{"className":13753},[688],[148,13755,13758,13770],{"className":13756,"style":13757},[692],"height:1.605em;",[148,13759,13761,13764],{"style":13760},"top:-3.755em;",[148,13762],{"className":13763,"style":1896},[700],[148,13765,13767],{"className":13766},[192],[148,13768,13346],{"className":13769},[192,193],[148,13771,13773,13776],{"style":13772},"top:-2.255em;",[148,13774],{"className":13775,"style":1896},[700],[148,13777],{"className":13778},[192],[148,13780,716],{"className":13781},[715],[148,13783,13785],{"className":13784},[688],[148,13786,13789],{"className":13787,"style":13788},[692],"height:1.105em;",[148,13790],{},[148,13792,13794],{"className":13793},[2059],[148,13795,13797,14443],{"className":13796},[683,684],[148,13798,13800,14440],{"className":13799},[688],[148,13801,13803,14228],{"className":13802,"style":13757},[692],[148,13804,13805,13808],{"style":13760},[148,13806],{"className":13807,"style":1896},[700],[148,13809,13811,13814,13817,13820,13823,14075,14078,14081,14084],{"className":13810},[192],[148,13812],{"className":13813},[192],[148,13815],{"className":13816,"style":2083},[373],[148,13818,1784],{"className":13819},[2087],[148,13821],{"className":13822,"style":2083},[373],[148,13824,13826,13832,14069],{"className":13825},[2659],[148,13827,13829],{"className":13828,"style":2664},[1169,2663],[148,13830,1140],{"className":13831},[2668,5263],[148,13833,13835],{"className":13834},[192],[148,13836,13838,13912,13915,13918,13992,13995,13998],{"className":13837},[1745],[148,13839,13841],{"className":13840},[5273],[148,13842,13844,13904],{"className":13843},[683,684],[148,13845,13847,13901],{"className":13846},[688],[148,13848,13850],{"className":13849,"style":5283},[692],[148,13851,13852,13855],{"style":5286},[148,13853],{"className":13854,"style":1896},[700],[148,13856,13858,13898],{"className":13857},[192],[148,13859,13861,13864],{"className":13860},[192],[148,13862,1070],{"className":13863,"style":10865},[192,193],[148,13865,13867],{"className":13866},[679],[148,13868,13870,13890],{"className":13869},[683,684],[148,13871,13873,13887],{"className":13872},[688],[148,13874,13876],{"className":13875,"style":10878},[692],[148,13877,13878,13881],{"style":10881},[148,13879],{"className":13880,"style":701},[700],[148,13882,13884],{"className":13883},[705,706,707,708],[148,13885,266],{"className":13886},[192,193,708],[148,13888,716],{"className":13889},[715],[148,13891,13893],{"className":13892},[688],[148,13894,13896],{"className":13895,"style":723},[692],[148,13897],{},[148,13899,346],{"className":13900},[381],[148,13902,716],{"className":13903},[715],[148,13905,13907],{"className":13906},[688],[148,13908,13910],{"className":13909,"style":5406},[692],[148,13911],{},[148,13913],{"className":13914,"style":5413},[5412],[148,13916],{"className":13917,"style":5413},[5412],[148,13919,13921],{"className":13920},[5273],[148,13922,13924,13984],{"className":13923},[683,684],[148,13925,13927,13981],{"className":13926},[688],[148,13928,13930],{"className":13929,"style":5283},[692],[148,13931,13932,13935],{"style":5286},[148,13933],{"className":13934,"style":1896},[700],[148,13936,13938,13978],{"className":13937},[192],[148,13939,13941,13944],{"className":13940},[192],[148,13942,1070],{"className":13943,"style":10865},[192,193],[148,13945,13947],{"className":13946},[679],[148,13948,13950,13970],{"className":13949},[683,684],[148,13951,13953,13967],{"className":13952},[688],[148,13954,13956],{"className":13955,"style":10878},[692],[148,13957,13958,13961],{"style":10881},[148,13959],{"className":13960,"style":701},[700],[148,13962,13964],{"className":13963},[705,706,707,708],[148,13965,1037],{"className":13966,"style":970},[192,193,708],[148,13968,716],{"className":13969},[715],[148,13971,13973],{"className":13972},[688],[148,13974,13976],{"className":13975,"style":10946},[692],[148,13977],{},[148,13979,346],{"className":13980},[381],[148,13982,716],{"className":13983},[715],[148,13985,13987],{"className":13986},[688],[148,13988,13990],{"className":13989,"style":5406},[692],[148,13991],{},[148,13993],{"className":13994,"style":5413},[5412],[148,13996],{"className":13997,"style":5413},[5412],[148,13999,14001],{"className":14000},[5273],[148,14002,14004,14061],{"className":14003},[683,684],[148,14005,14007,14058],{"className":14006},[688],[148,14008,14010],{"className":14009,"style":5283},[692],[148,14011,14012,14015],{"style":5286},[148,14013],{"className":14014,"style":1896},[700],[148,14016,14018],{"className":14017},[192],[148,14019,14021,14024],{"className":14020},[192],[148,14022,1070],{"className":14023,"style":10865},[192,193],[148,14025,14027],{"className":14026},[679],[148,14028,14030,14050],{"className":14029},[683,684],[148,14031,14033,14047],{"className":14032},[688],[148,14034,14036],{"className":14035,"style":10878},[692],[148,14037,14038,14041],{"style":10881},[148,14039],{"className":14040,"style":701},[700],[148,14042,14044],{"className":14043},[705,706,707,708],[148,14045,297],{"className":14046,"style":312},[192,193,708],[148,14048,716],{"className":14049},[715],[148,14051,14053],{"className":14052},[688],[148,14054,14056],{"className":14055,"style":723},[692],[148,14057],{},[148,14059,716],{"className":14060},[715],[148,14062,14064],{"className":14063},[688],[148,14065,14067],{"className":14066,"style":5406},[692],[148,14068],{},[148,14070,14072],{"className":14071,"style":2664},[1194,2663],[148,14073,1153],{"className":14074},[2668,5263],[148,14076],{"className":14077,"style":729},[373],[148,14079,5146],{"className":14080},[733],[148,14082],{"className":14083,"style":729},[373],[148,14085,14087,14093,14222],{"className":14086},[2659],[148,14088,14090],{"className":14089,"style":2664},[1169,2663],[148,14091,1140],{"className":14092},[2668,5263],[148,14094,14096],{"className":14095},[192],[148,14097,14099,14136,14139,14142,14179,14182,14185],{"className":14098},[1745],[148,14100,14102],{"className":14101},[5273],[148,14103,14105,14128],{"className":14104},[683,684],[148,14106,14108,14125],{"className":14107},[688],[148,14109,14111],{"className":14110,"style":5283},[692],[148,14112,14113,14116],{"style":5286},[148,14114],{"className":14115,"style":1896},[700],[148,14117,14119,14122],{"className":14118},[192],[148,14120,1758],{"className":14121},[192],[148,14123,346],{"className":14124},[381],[148,14126,716],{"className":14127},[715],[148,14129,14131],{"className":14130},[688],[148,14132,14134],{"className":14133,"style":5406},[692],[148,14135],{},[148,14137],{"className":14138,"style":5413},[5412],[148,14140],{"className":14141,"style":5413},[5412],[148,14143,14145],{"className":14144},[5273],[148,14146,14148,14171],{"className":14147},[683,684],[148,14149,14151,14168],{"className":14150},[688],[148,14152,14154],{"className":14153,"style":5283},[692],[148,14155,14156,14159],{"style":5286},[148,14157],{"className":14158,"style":1896},[700],[148,14160,14162,14165],{"className":14161},[192],[148,14163,649],{"className":14164},[192],[148,14166,346],{"className":14167},[381],[148,14169,716],{"className":14170},[715],[148,14172,14174],{"className":14173},[688],[148,14175,14177],{"className":14176,"style":5406},[692],[148,14178],{},[148,14180],{"className":14181,"style":5413},[5412],[148,14183],{"className":14184,"style":5413},[5412],[148,14186,14188],{"className":14187},[5273],[148,14189,14191,14214],{"className":14190},[683,684],[148,14192,14194,14211],{"className":14193},[688],[148,14195,14197],{"className":14196,"style":5283},[692],[148,14198,14199,14202],{"style":5286},[148,14200],{"className":14201,"style":1896},[700],[148,14203,14205,14208],{"className":14204},[192],[148,14206,942],{"className":14207},[192],[148,14209,649],{"className":14210},[192],[148,14212,716],{"className":14213},[715],[148,14215,14217],{"className":14216},[688],[148,14218,14220],{"className":14219,"style":5406},[692],[148,14221],{},[148,14223,14225],{"className":14224,"style":2664},[1194,2663],[148,14226,1153],{"className":14227},[2668,5263],[148,14229,14230,14233],{"style":13772},[148,14231],{"className":14232,"style":1896},[700],[148,14234,14236,14239,14242,14245,14248,14251,14254,14257,14260,14263,14266,14269,14272,14275,14278,14281,14284,14287,14290,14293,14296,14299,14302,14305,14308,14311,14314,14317,14320,14323,14326,14329,14332,14335,14338,14341,14344,14347,14350,14353,14356,14359,14362,14365,14368,14371,14374,14377,14380,14383,14386,14389,14392,14395,14398,14401,14404,14407,14410,14413,14416,14419,14422,14425,14428,14431,14434,14437],{"className":14235},[192],[148,14237],{"className":14238},[192],[148,14240],{"className":14241,"style":2083},[373],[148,14243,1784],{"className":14244},[2087],[148,14246],{"className":14247,"style":2083},[373],[148,14249,349],{"className":14250},[369],[148,14252],{"className":14253,"style":374},[373],[148,14255,220],{"className":14256},[192,193],[148,14258],{"className":14259,"style":374},[373],[148,14261,349],{"className":14262},[369],[148,14264],{"className":14265,"style":374},[373],[148,14267,169],{"className":14268,"style":194},[192,193],[148,14270],{"className":14271,"style":374},[373],[148,14273,337],{"className":14274},[369],[148,14276],{"className":14277,"style":374},[373],[148,14279,248],{"className":14280,"style":593},[192,193],[148,14282],{"className":14283,"style":729},[373],[148,14285,942],{"className":14286},[733],[148,14288],{"className":14289,"style":729},[373],[148,14291,349],{"className":14292},[369],[148,14294],{"className":14295,"style":374},[373],[148,14297,244],{"className":14298},[192,193],[148,14300],{"className":14301,"style":374},[373],[148,14303,349],{"className":14304},[369],[148,14306],{"className":14307,"style":374},[373],[148,14309,169],{"className":14310,"style":194},[192,193],[148,14312],{"className":14313,"style":374},[373],[148,14315,337],{"className":14316},[369],[148,14318],{"className":14319,"style":374},[373],[148,14321,220],{"className":14322},[192,193],[148,14324],{"className":14325,"style":729},[373],[148,14327,942],{"className":14328},[733],[148,14330],{"className":14331,"style":729},[373],[148,14333,337],{"className":14334},[369],[148,14336],{"className":14337,"style":374},[373],[148,14339,244],{"className":14340},[192,193],[148,14342],{"className":14343,"style":374},[373],[148,14345,337],{"className":14346},[369],[148,14348],{"className":14349,"style":374},[373],[148,14351,169],{"className":14352,"style":194},[192,193],[148,14354],{"className":14355,"style":729},[373],[148,14357,642],{"className":14358},[733],[148,14360],{"className":14361,"style":729},[373],[148,14363,349],{"className":14364},[369],[148,14366],{"className":14367,"style":374},[373],[148,14369,248],{"className":14370,"style":593},[192,193],[148,14372,1140],{"className":14373},[1169],[148,14375,349],{"className":14376},[369],[148,14378],{"className":14379,"style":374},[373],[148,14381,244],{"className":14382},[192,193],[148,14384],{"className":14385,"style":374},[373],[148,14387,337],{"className":14388},[369],[148,14390],{"className":14391,"style":374},[373],[148,14393,169],{"className":14394,"style":194},[192,193],[148,14396],{"className":14397,"style":729},[373],[148,14399,942],{"className":14400},[733],[148,14402],{"className":14403,"style":729},[373],[148,14405,349],{"className":14406},[369],[148,14408],{"className":14409,"style":374},[373],[148,14411,169],{"className":14412,"style":194},[192,193],[148,14414],{"className":14415,"style":374},[373],[148,14417,337],{"className":14418},[369],[148,14420],{"className":14421,"style":374},[373],[148,14423,244],{"className":14424},[192,193],[148,14426],{"className":14427,"style":374},[373],[148,14429,337],{"className":14430},[369],[148,14432],{"className":14433,"style":374},[373],[148,14435,220],{"className":14436},[192,193],[148,14438,1153],{"className":14439},[1194],[148,14441,716],{"className":14442},[715],[148,14444,14446],{"className":14445},[688],[148,14447,14449],{"className":14448,"style":13788},[692],[148,14450],{},[13,14452,14453],{},"同样不太优雅，但一旦预计算了所有的正弦和余弦值，就不算太糟。",[1111,14455,14456],{"id":14456},"参数选择与实现",[13,14458,14459,14460,102,14529,102,14599,1022,14668,14737],{},"剩下的就是为 ",[148,14461,14463,14480],{"className":14462},[151],[148,14464,14466],{"className":14465},[155],[157,14467,14468],{"xmlns":159},[161,14469,14470,14478],{},[164,14471,14472],{},[631,14473,14474,14476],{},[167,14475,635],{},[637,14477,649],{},[171,14479,4336],{"encoding":173},[148,14481,14483],{"className":14482,"ariaHidden":179},[178],[148,14484,14486,14489],{"className":14485},[183],[148,14487],{"className":14488,"style":668},[187],[148,14490,14492,14495],{"className":14491},[192],[148,14493,635],{"className":14494,"style":675},[192,193],[148,14496,14498],{"className":14497},[679],[148,14499,14501,14521],{"className":14500},[683,684],[148,14502,14504,14518],{"className":14503},[688],[148,14505,14507],{"className":14506,"style":693},[692],[148,14508,14509,14512],{"style":696},[148,14510],{"className":14511,"style":701},[700],[148,14513,14515],{"className":14514},[705,706,707,708],[148,14516,649],{"className":14517},[192,708],[148,14519,716],{"className":14520},[715],[148,14522,14524],{"className":14523},[688],[148,14525,14527],{"className":14526,"style":723},[692],[148,14528],{},[148,14530,14532,14550],{"className":14531},[151],[148,14533,14535],{"className":14534},[155],[157,14536,14537],{"xmlns":159},[161,14538,14539,14547],{},[164,14540,14541],{},[631,14542,14543,14545],{},[167,14544,635],{},[637,14546,639],{},[171,14548,14549],{"encoding":173},"R_2",[148,14551,14553],{"className":14552,"ariaHidden":179},[178],[148,14554,14556,14559],{"className":14555},[183],[148,14557],{"className":14558,"style":668},[187],[148,14560,14562,14565],{"className":14561},[192],[148,14563,635],{"className":14564,"style":675},[192,193],[148,14566,14568],{"className":14567},[679],[148,14569,14571,14591],{"className":14570},[683,684],[148,14572,14574,14588],{"className":14573},[688],[148,14575,14577],{"className":14576,"style":693},[692],[148,14578,14579,14582],{"style":696},[148,14580],{"className":14581,"style":701},[700],[148,14583,14585],{"className":14584},[705,706,707,708],[148,14586,639],{"className":14587},[192,708],[148,14589,716],{"className":14590},[715],[148,14592,14594],{"className":14593},[688],[148,14595,14597],{"className":14596,"style":723},[692],[148,14598],{},[148,14600,14602,14619],{"className":14601},[151],[148,14603,14605],{"className":14604},[155],[157,14606,14607],{"xmlns":159},[161,14608,14609,14617],{},[164,14610,14611],{},[631,14612,14613,14615],{},[167,14614,2422],{},[637,14616,649],{},[171,14618,2427],{"encoding":173},[148,14620,14622],{"className":14621,"ariaHidden":179},[178],[148,14623,14625,14628],{"className":14624},[183],[148,14626],{"className":14627,"style":668},[187],[148,14629,14631,14634],{"className":14630},[192],[148,14632,2422],{"className":14633,"style":2443},[192,193],[148,14635,14637],{"className":14636},[679],[148,14638,14640,14660],{"className":14639},[683,684],[148,14641,14643,14657],{"className":14642},[688],[148,14644,14646],{"className":14645,"style":693},[692],[148,14647,14648,14651],{"style":2458},[148,14649],{"className":14650,"style":701},[700],[148,14652,14654],{"className":14653},[705,706,707,708],[148,14655,649],{"className":14656},[192,708],[148,14658,716],{"className":14659},[715],[148,14661,14663],{"className":14662},[688],[148,14664,14666],{"className":14665,"style":723},[692],[148,14667],{},[148,14669,14671,14688],{"className":14670},[151],[148,14672,14674],{"className":14673},[155],[157,14675,14676],{"xmlns":159},[161,14677,14678,14686],{},[164,14679,14680],{},[631,14681,14682,14684],{},[167,14683,2422],{},[637,14685,639],{},[171,14687,8532],{"encoding":173},[148,14689,14691],{"className":14690,"ariaHidden":179},[178],[148,14692,14694,14697],{"className":14693},[183],[148,14695],{"className":14696,"style":668},[187],[148,14698,14700,14703],{"className":14699},[192],[148,14701,2422],{"className":14702,"style":2443},[192,193],[148,14704,14706],{"className":14705},[679],[148,14707,14709,14729],{"className":14708},[683,684],[148,14710,14712,14726],{"className":14711},[688],[148,14713,14715],{"className":14714,"style":693},[692],[148,14716,14717,14720],{"style":2458},[148,14718],{"className":14719,"style":701},[700],[148,14721,14723],{"className":14722},[705,706,707,708],[148,14724,639],{"className":14725},[192,708],[148,14727,716],{"className":14728},[715],[148,14730,14732],{"className":14731},[688],[148,14733,14735],{"className":14734,"style":723},[692],[148,14736],{}," 选一些值：",[118,14739,14740,14752],{},[121,14741,14742],{},[124,14743,14744,14747,14750],{},[127,14745,14746],{},"参数",[127,14748,14749],{},"值",[127,14751,132],{},[134,14753,14754,14832,14910,14988],{},[124,14755,14756,14827,14829],{},[139,14757,14758],{},[148,14759,14761,14778],{"className":14760},[151],[148,14762,14764],{"className":14763},[155],[157,14765,14766],{"xmlns":159},[161,14767,14768,14776],{},[164,14769,14770],{},[631,14771,14772,14774],{},[167,14773,635],{},[637,14775,649],{},[171,14777,4336],{"encoding":173},[148,14779,14781],{"className":14780,"ariaHidden":179},[178],[148,14782,14784,14787],{"className":14783},[183],[148,14785],{"className":14786,"style":668},[187],[148,14788,14790,14793],{"className":14789},[192],[148,14791,635],{"className":14792,"style":675},[192,193],[148,14794,14796],{"className":14795},[679],[148,14797,14799,14819],{"className":14798},[683,684],[148,14800,14802,14816],{"className":14801},[688],[148,14803,14805],{"className":14804,"style":693},[692],[148,14806,14807,14810],{"style":696},[148,14808],{"className":14809,"style":701},[700],[148,14811,14813],{"className":14812},[705,706,707,708],[148,14814,649],{"className":14815},[192,708],[148,14817,716],{"className":14818},[715],[148,14820,14822],{"className":14821},[688],[148,14823,14825],{"className":14824,"style":723},[692],[148,14826],{},[139,14828,649],{},[139,14830,14831],{},"截面圆半径",[124,14833,14834,14905,14907],{},[139,14835,14836],{},[148,14837,14839,14856],{"className":14838},[151],[148,14840,14842],{"className":14841},[155],[157,14843,14844],{"xmlns":159},[161,14845,14846,14854],{},[164,14847,14848],{},[631,14849,14850,14852],{},[167,14851,635],{},[637,14853,639],{},[171,14855,14549],{"encoding":173},[148,14857,14859],{"className":14858,"ariaHidden":179},[178],[148,14860,14862,14865],{"className":14861},[183],[148,14863],{"className":14864,"style":668},[187],[148,14866,14868,14871],{"className":14867},[192],[148,14869,635],{"className":14870,"style":675},[192,193],[148,14872,14874],{"className":14873},[679],[148,14875,14877,14897],{"className":14876},[683,684],[148,14878,14880,14894],{"className":14879},[688],[148,14881,14883],{"className":14882,"style":693},[692],[148,14884,14885,14888],{"style":696},[148,14886],{"className":14887,"style":701},[700],[148,14889,14891],{"className":14890},[705,706,707,708],[148,14892,639],{"className":14893},[192,708],[148,14895,716],{"className":14896},[715],[148,14898,14900],{"className":14899},[688],[148,14901,14903],{"className":14902,"style":723},[692],[148,14904],{},[139,14906,639],{},[139,14908,14909],{},"环面中心到截面圆心距离",[124,14911,14912,14983,14985],{},[139,14913,14914],{},[148,14915,14917,14934],{"className":14916},[151],[148,14918,14920],{"className":14919},[155],[157,14921,14922],{"xmlns":159},[161,14923,14924,14932],{},[164,14925,14926],{},[631,14927,14928,14930],{},[167,14929,2422],{},[637,14931,639],{},[171,14933,8532],{"encoding":173},[148,14935,14937],{"className":14936,"ariaHidden":179},[178],[148,14938,14940,14943],{"className":14939},[183],[148,14941],{"className":14942,"style":668},[187],[148,14944,14946,14949],{"className":14945},[192],[148,14947,2422],{"className":14948,"style":2443},[192,193],[148,14950,14952],{"className":14951},[679],[148,14953,14955,14975],{"className":14954},[683,684],[148,14956,14958,14972],{"className":14957},[688],[148,14959,14961],{"className":14960,"style":693},[692],[148,14962,14963,14966],{"style":2458},[148,14964],{"className":14965,"style":701},[700],[148,14967,14969],{"className":14968},[705,706,707,708],[148,14970,639],{"className":14971},[192,708],[148,14973,716],{"className":14974},[715],[148,14976,14978],{"className":14977},[688],[148,14979,14981],{"className":14980,"style":723},[692],[148,14982],{},[139,14984,3098],{},[139,14986,14987],{},"观察者到甜甜圈距离",[124,14989,14990,15061,15366],{},[139,14991,14992],{},[148,14993,14995,15012],{"className":14994},[151],[148,14996,14998],{"className":14997},[155],[157,14999,15000],{"xmlns":159},[161,15001,15002,15010],{},[164,15003,15004],{},[631,15005,15006,15008],{},[167,15007,2422],{},[637,15009,649],{},[171,15011,2427],{"encoding":173},[148,15013,15015],{"className":15014,"ariaHidden":179},[178],[148,15016,15018,15021],{"className":15017},[183],[148,15019],{"className":15020,"style":668},[187],[148,15022,15024,15027],{"className":15023},[192],[148,15025,2422],{"className":15026,"style":2443},[192,193],[148,15028,15030],{"className":15029},[679],[148,15031,15033,15053],{"className":15032},[683,684],[148,15034,15036,15050],{"className":15035},[688],[148,15037,15039],{"className":15038,"style":693},[692],[148,15040,15041,15044],{"style":2458},[148,15042],{"className":15043,"style":701},[700],[148,15045,15047],{"className":15046},[705,706,707,708],[148,15048,649],{"className":15049},[192,708],[148,15051,716],{"className":15052},[715],[148,15054,15056],{"className":15055},[688],[148,15057,15059],{"className":15058,"style":723},[692],[148,15060],{},[139,15062,15063],{},[148,15064,15066,15119],{"className":15065},[151],[148,15067,15069],{"className":15068},[155],[157,15070,15071],{"xmlns":159},[161,15072,15073,15116],{},[164,15074,15075,15078,15080,15086,15088],{},[167,15076,15077],{},"W",[339,15079,5146],{},[631,15081,15082,15084],{},[167,15083,2422],{},[637,15085,639],{},[339,15087,5146],{},[1760,15089,15090,15093],{},[637,15091,15092],{},"3",[164,15094,15095,15098,15100,15106,15108,15114],{},[637,15096,15097],{},"8",[339,15099,1140],{"stretchy":1139},[631,15101,15102,15104],{},[167,15103,635],{},[637,15105,649],{},[339,15107,642],{},[631,15109,15110,15112],{},[167,15111,635],{},[637,15113,639],{},[339,15115,1153],{"stretchy":1139},[171,15117,15118],{"encoding":173},"W \\cdot K_2 \\cdot \\frac{3}{8(R_1+R_2)}",[148,15120,15122,15141,15196],{"className":15121,"ariaHidden":179},[178],[148,15123,15125,15128,15132,15135,15138],{"className":15124},[183],[148,15126],{"className":15127,"style":6543},[187],[148,15129,15077],{"className":15130,"style":15131},[192,193],"margin-right:0.1389em;",[148,15133],{"className":15134,"style":729},[373],[148,15136,5146],{"className":15137},[733],[148,15139],{"className":15140,"style":729},[373],[148,15142,15144,15147,15187,15190,15193],{"className":15143},[183],[148,15145],{"className":15146,"style":668},[187],[148,15148,15150,15153],{"className":15149},[192],[148,15151,2422],{"className":15152,"style":2443},[192,193],[148,15154,15156],{"className":15155},[679],[148,15157,15159,15179],{"className":15158},[683,684],[148,15160,15162,15176],{"className":15161},[688],[148,15163,15165],{"className":15164,"style":693},[692],[148,15166,15167,15170],{"style":2458},[148,15168],{"className":15169,"style":701},[700],[148,15171,15173],{"className":15172},[705,706,707,708],[148,15174,639],{"className":15175},[192,708],[148,15177,716],{"className":15178},[715],[148,15180,15182],{"className":15181},[688],[148,15183,15185],{"className":15184,"style":723},[692],[148,15186],{},[148,15188],{"className":15189,"style":729},[373],[148,15191,5146],{"className":15192},[733],[148,15194],{"className":15195,"style":729},[373],[148,15197,15199,15203],{"className":15198},[183],[148,15200],{"className":15201,"style":15202},[187],"height:1.3651em;vertical-align:-0.52em;",[148,15204,15206,15209,15363],{"className":15205},[192],[148,15207],{"className":15208},[1169,1876],[148,15210,15212],{"className":15211},[1760],[148,15213,15215,15354],{"className":15214},[683,684],[148,15216,15218,15351],{"className":15217},[688],[148,15219,15221,15329,15337],{"className":15220,"style":3660},[692],[148,15222,15223,15226],{"style":3663},[148,15224],{"className":15225,"style":1896},[700],[148,15227,15229],{"className":15228},[705,706,707,708],[148,15230,15232,15235,15238,15283,15286,15326],{"className":15231},[192,708],[148,15233,15097],{"className":15234},[192,708],[148,15236,1140],{"className":15237},[1169,708],[148,15239,15241,15244],{"className":15240},[192,708],[148,15242,635],{"className":15243,"style":675},[192,193,708],[148,15245,15247],{"className":15246},[679],[148,15248,15250,15274],{"className":15249},[683,684],[148,15251,15253,15271],{"className":15252},[688],[148,15254,15257],{"className":15255,"style":15256},[692],"height:0.3173em;",[148,15258,15260,15264],{"style":15259},"top:-2.357em;margin-left:-0.0077em;margin-right:0.0714em;",[148,15261],{"className":15262,"style":15263},[700],"height:2.5em;",[148,15265,15268],{"className":15266},[705,15267,5263,708],"reset-size3",[148,15269,649],{"className":15270},[192,708],[148,15272,716],{"className":15273},[715],[148,15275,15277],{"className":15276},[688],[148,15278,15281],{"className":15279,"style":15280},[692],"height:0.143em;",[148,15282],{},[148,15284,642],{"className":15285},[733,708],[148,15287,15289,15292],{"className":15288},[192,708],[148,15290,635],{"className":15291,"style":675},[192,193,708],[148,15293,15295],{"className":15294},[679],[148,15296,15298,15318],{"className":15297},[683,684],[148,15299,15301,15315],{"className":15300},[688],[148,15302,15304],{"className":15303,"style":15256},[692],[148,15305,15306,15309],{"style":15259},[148,15307],{"className":15308,"style":15263},[700],[148,15310,15312],{"className":15311},[705,15267,5263,708],[148,15313,639],{"className":15314},[192,708],[148,15316,716],{"className":15317},[715],[148,15319,15321],{"className":15320},[688],[148,15322,15324],{"className":15323,"style":15280},[692],[148,15325],{},[148,15327,1153],{"className":15328},[1194,708],[148,15330,15331,15334],{"style":1936},[148,15332],{"className":15333,"style":1896},[700],[148,15335],{"className":15336,"style":1944},[1943],[148,15338,15339,15342],{"style":3686},[148,15340],{"className":15341,"style":1896},[700],[148,15343,15345],{"className":15344},[705,706,707,708],[148,15346,15348],{"className":15347},[192,708],[148,15349,15092],{"className":15350},[192,708],[148,15352,716],{"className":15353},[715],[148,15355,15357],{"className":15356},[688],[148,15358,15361],{"className":15359,"style":15360},[692],"height:0.52em;",[148,15362],{},[148,15364],{"className":15365},[1194,1876],[139,15367,15368,15369,15397],{},"投影缩放系数（",[148,15370,15372,15385],{"className":15371},[151],[148,15373,15375],{"className":15374},[155],[157,15376,15377],{"xmlns":159},[161,15378,15379,15383],{},[164,15380,15381],{},[167,15382,15077],{},[171,15384,15077],{"encoding":173},[148,15386,15388],{"className":15387,"ariaHidden":179},[178],[148,15389,15391,15394],{"className":15390},[183],[148,15392],{"className":15393,"style":6543},[187],[148,15395,15077],{"className":15396,"style":15131},[192,193]," 为屏幕宽度）",[13,15399,15400,15401,102,15493,15585,15586,15655,15656,1022,15684,15712,15713,15782],{},"在原始甜甜圈代码中，a1k0n 选择 ",[148,15402,15404,15426],{"className":15403},[151],[148,15405,15407],{"className":15406},[155],[157,15408,15409],{"xmlns":159},[161,15410,15411,15423],{},[164,15412,15413,15419,15421],{},[631,15414,15415,15417],{},[167,15416,635],{},[637,15418,649],{},[339,15420,1784],{},[637,15422,649],{},[171,15424,15425],{"encoding":173},"R_1 = 1",[148,15427,15429,15484],{"className":15428,"ariaHidden":179},[178],[148,15430,15432,15435,15475,15478,15481],{"className":15431},[183],[148,15433],{"className":15434,"style":668},[187],[148,15436,15438,15441],{"className":15437},[192],[148,15439,635],{"className":15440,"style":675},[192,193],[148,15442,15444],{"className":15443},[679],[148,15445,15447,15467],{"className":15446},[683,684],[148,15448,15450,15464],{"className":15449},[688],[148,15451,15453],{"className":15452,"style":693},[692],[148,15454,15455,15458],{"style":696},[148,15456],{"className":15457,"style":701},[700],[148,15459,15461],{"className":15460},[705,706,707,708],[148,15462,649],{"className":15463},[192,708],[148,15465,716],{"className":15466},[715],[148,15468,15470],{"className":15469},[688],[148,15471,15473],{"className":15472,"style":723},[692],[148,15474],{},[148,15476],{"className":15477,"style":2083},[373],[148,15479,1784],{"className":15480},[2087],[148,15482],{"className":15483,"style":2083},[373],[148,15485,15487,15490],{"className":15486},[183],[148,15488],{"className":15489,"style":856},[187],[148,15491,649],{"className":15492},[192],[148,15494,15496,15518],{"className":15495},[151],[148,15497,15499],{"className":15498},[155],[157,15500,15501],{"xmlns":159},[161,15502,15503,15515],{},[164,15504,15505,15511,15513],{},[631,15506,15507,15509],{},[167,15508,635],{},[637,15510,639],{},[339,15512,1784],{},[637,15514,639],{},[171,15516,15517],{"encoding":173},"R_2 = 2",[148,15519,15521,15576],{"className":15520,"ariaHidden":179},[178],[148,15522,15524,15527,15567,15570,15573],{"className":15523},[183],[148,15525],{"className":15526,"style":668},[187],[148,15528,15530,15533],{"className":15529},[192],[148,15531,635],{"className":15532,"style":675},[192,193],[148,15534,15536],{"className":15535},[679],[148,15537,15539,15559],{"className":15538},[683,684],[148,15540,15542,15556],{"className":15541},[688],[148,15543,15545],{"className":15544,"style":693},[692],[148,15546,15547,15550],{"style":696},[148,15548],{"className":15549,"style":701},[700],[148,15551,15553],{"className":15552},[705,706,707,708],[148,15554,639],{"className":15555},[192,708],[148,15557,716],{"className":15558},[715],[148,15560,15562],{"className":15561},[688],[148,15563,15565],{"className":15564,"style":723},[692],[148,15566],{},[148,15568],{"className":15569,"style":2083},[373],[148,15571,1784],{"className":15572},[2087],[148,15574],{"className":15575,"style":2083},[373],[148,15577,15579,15582],{"className":15578},[183],[148,15580],{"className":15581,"style":856},[187],[148,15583,639],{"className":15584},[192],"，所以它的几何形状与上面的横截面图相同。",[148,15587,15589,15606],{"className":15588},[151],[148,15590,15592],{"className":15591},[155],[157,15593,15594],{"xmlns":159},[161,15595,15596,15604],{},[164,15597,15598],{},[631,15599,15600,15602],{},[167,15601,2422],{},[637,15603,649],{},[171,15605,2427],{"encoding":173},[148,15607,15609],{"className":15608,"ariaHidden":179},[178],[148,15610,15612,15615],{"className":15611},[183],[148,15613],{"className":15614,"style":668},[187],[148,15616,15618,15621],{"className":15617},[192],[148,15619,2422],{"className":15620,"style":2443},[192,193],[148,15622,15624],{"className":15623},[679],[148,15625,15627,15647],{"className":15626},[683,684],[148,15628,15630,15644],{"className":15629},[688],[148,15631,15633],{"className":15632,"style":693},[692],[148,15634,15635,15638],{"style":2458},[148,15636],{"className":15637,"style":701},[700],[148,15639,15641],{"className":15640},[705,706,707,708],[148,15642,649],{"className":15643},[192,708],[148,15645,716],{"className":15646},[715],[148,15648,15650],{"className":15649},[688],[148,15651,15653],{"className":15652,"style":723},[692],[148,15654],{}," 控制缩放，这取决于像素分辨率——ASCII 字符的宽高比不是 1:1，所以 ",[148,15657,15659,15672],{"className":15658},[151],[148,15660,15662],{"className":15661},[155],[157,15663,15664],{"xmlns":159},[161,15665,15666,15670],{},[164,15667,15668],{},[167,15669,266],{},[171,15671,266],{"encoding":173},[148,15673,15675],{"className":15674,"ariaHidden":179},[178],[148,15676,15678,15681],{"className":15677},[183],[148,15679],{"className":15680,"style":278},[187],[148,15682,266],{"className":15683},[192,193],[148,15685,15687,15700],{"className":15686},[151],[148,15688,15690],{"className":15689},[155],[157,15691,15692],{"xmlns":159},[161,15693,15694,15698],{},[164,15695,15696],{},[167,15697,1037],{},[171,15699,1037],{"encoding":173},[148,15701,15703],{"className":15702,"ariaHidden":179},[178],[148,15704,15706,15709],{"className":15705},[183],[148,15707],{"className":15708,"style":1049},[187],[148,15710,1037],{"className":15711,"style":970},[192,193]," 方向的缩放系数需要分别调整。",[148,15714,15716,15733],{"className":15715},[151],[148,15717,15719],{"className":15718},[155],[157,15720,15721],{"xmlns":159},[161,15722,15723,15731],{},[164,15724,15725],{},[631,15726,15727,15729],{},[167,15728,2422],{},[637,15730,639],{},[171,15732,8532],{"encoding":173},[148,15734,15736],{"className":15735,"ariaHidden":179},[178],[148,15737,15739,15742],{"className":15738},[183],[148,15740],{"className":15741,"style":668},[187],[148,15743,15745,15748],{"className":15744},[192],[148,15746,2422],{"className":15747,"style":2443},[192,193],[148,15749,15751],{"className":15750},[679],[148,15752,15754,15774],{"className":15753},[683,684],[148,15755,15757,15771],{"className":15756},[688],[148,15758,15760],{"className":15759,"style":693},[692],[148,15761,15762,15765],{"style":2458},[148,15763],{"className":15764,"style":701},[700],[148,15766,15768],{"className":15767},[705,706,707,708],[148,15769,639],{"className":15770},[192,708],[148,15772,716],{"className":15773},[715],[148,15775,15777],{"className":15776},[688],[148,15778,15780],{"className":15779,"style":723},[692],[148,15781],{},"（观察者到甜甜圈的距离）选择为 5。",[13,15784,15785],{},"a1k0n 用上面的方程写了一个简陋的 Canvas 实现，只绘制像素和上面方程的光照值。结果与原始版本不完全相同，因为一些旋转方向相反或相差 90 度，但效果大同小异。",[13,15787,15788],{},"如果不加 Z 缓冲，环面会显得像是被看穿了，但加上深度比较之后说明数学推导是正确的。将其转换为带 Z 缓冲的 ASCII 渲染，就得到了一个巧妙的小程序。",[13,15790,15791],{},"现在有了所有的部分，但如何编写代码？大致如下（对 2D 数组做了一些伪代码处理）：",[60,15793,15796],{"className":15794,"code":15795,"language":66,"meta":67},[63],"const float theta_spacing = 0.07;\nconst float phi_spacing   = 0.02;\n\nconst float R1 = 1;\nconst float R2 = 2;\nconst float K2 = 5;\n\u002F\u002F 根据屏幕尺寸计算 K1: 最大 x 距离大约出现在\n\u002F\u002F 环面边缘，即 x=R1+R2，z=0 处。希望\n\u002F\u002F 它被放置在屏幕宽度的 3\u002F8 处，也就是\n\u002F\u002F 从中心到屏幕边缘的 3\u002F4 处。\n\u002F\u002F screen_width*3\u002F8 = K1*(R1+R2)\u002F(K2+0)\n\u002F\u002F screen_width*K2*3\u002F(8*(R1+R2)) = K1\nconst float K1 = screen_width*K2*3\u002F(8*(R1+R2));\n\nrender_frame(float A, float B) {\n  \u002F\u002F 预计算 A 和 B 的正弦和余弦\n  float cosA = cos(A), sinA = sin(A);\n  float cosB = cos(B), sinB = sin(B);\n\n  \u002F\u002F 伪代码：这里表示二维数组，不是合法 C 语法\n  char output[screen_width][screen_height] = ' ';\n  float zbuffer[screen_width][screen_height] = 0;\n\n  \u002F\u002F theta 绕环面的截面圆旋转\n  for (float theta=0; theta \u003C 2*pi; theta += theta_spacing) {\n    \u002F\u002F 预计算 theta 的正弦和余弦\n    float costheta = cos(theta), sintheta = sin(theta);\n\n    \u002F\u002F phi 绕环面的旋转中心旋转\n    for(float phi=0; phi \u003C 2*pi; phi += phi_spacing) {\n      \u002F\u002F 预计算 phi 的正弦和余弦\n      float cosphi = cos(phi), sinphi = sin(phi);\n\n      \u002F\u002F 圆的 x,y 坐标，旋转之前（从上面的方程中提取）\n      float circlex = R2 + R1*costheta;\n      float circley = R1*sintheta;\n\n      \u002F\u002F 旋转后的最终 3D (x,y,z) 坐标，直接来自上面的数学推导\n      float x = circlex*(cosB*cosphi + sinA*sinB*sinphi)\n        - circley*cosA*sinB;\n      float y = circlex*(sinB*cosphi - sinA*cosB*sinphi)\n        + circley*cosA*cosB;\n      float z = K2 + cosA*circlex*sinphi + circley*sinA;\n      float ooz = 1\u002Fz;  \u002F\u002F \"one over z\"\n\n      \u002F\u002F x 和 y 投影。注意 y 在这里取反，因为\n      \u002F\u002F y 在 3D 空间中向上，但在 2D 显示中向下。\n      int xp = (int) (screen_width\u002F2 + K1*ooz*x);\n      int yp = (int) (screen_height\u002F2 - K1*ooz*y);\n\n      \u002F\u002F 计算亮度。丑陋，但正确。\n      float L = cosphi*costheta*sinB - cosA*costheta*sinphi -\n        sinA*sintheta + cosB*(cosA*sintheta - costheta*sinA*sinphi);\n      \u002F\u002F L 的范围从 -sqrt(2) 到 +sqrt(2)。如果 \u003C 0，表面\n      \u002F\u002F 背对我们，所以不会尝试绘制它。\n      if (L > 0) {\n        \u002F\u002F 与 Z 缓冲区比较。1\u002Fz 越大，像素\n        \u002F\u002F 比已绘制的内容更接近观察者。\n        if(ooz > zbuffer[xp][yp]) {\n          zbuffer[xp][yp] = ooz;\n          int luminance_index = L*8;\n          \u002F\u002F L*8 就是\"稍后会补偿\"的体现：光照向量长度为 sqrt(2)，\n          \u002F\u002F 乘以 8 后 luminance_index 范围约为 0..11，刚好覆盖 12 个字符\n          \u002F\u002F 现在查找对应亮度的字符并绘制到输出中:\n          output[xp][yp] = \".,-~:;=!*#$@\"[luminance_index];\n        }\n      }\n    }\n  }\n\n  \u002F\u002F 现在将 output[] 输出到屏幕。\n  \u002F\u002F 将光标移到\"home\"位置，适用于几乎所有\n  \u002F\u002F 当前使用的终端仿真模式\n  printf(\"\\x1b[H\");\n  for (int j = 0; j \u003C screen_height; j++) {\n    for (int i = 0; i \u003C screen_width; i++) {\n      putchar(output[i][j]);\n    }\n    putchar('\\n');\n  }\n\n}\n",[69,15797,15795],{"__ignoreMap":67},[93,15799,15800],{"type":95},[13,15801,15802,15803,15808],{},"ASCII 渲染和 Canvas 渲染的 JavaScript 源代码在",[17,15804,15807],{"href":15805,"rel":15806},"https:\u002F\u002Fwww.a1k0n.net\u002Fjs\u002Fdonut.js",[21],"这里","，可以在浏览器中交互体验。",[1111,15810,15811],{"id":15811},"不依赖数学库的版本",[13,15813,15814,15815,1022,15817,15819,15820,15823],{},"a1k0n 一直比较遗憾的一点是对 ",[69,15816,337],{"code":337},[69,15818,349],{"code":349}," 的大量使用——既因为这需要链接数学库（",[69,15821,15822],{"code":15822},"-lm","），也因为它比实际需要的更加耗费 CPU。如果尝试移植到老 CPU 或嵌入式设备上，这一点尤其明显。",[13,15825,15826,15827,102,15829,15831],{},"下面是修订版，不使用 ",[69,15828,337],{"code":337},[69,15830,349],{"code":349},"，也不需要链接数学库（但这个版本仍然使用浮点类型）：",[89,15833],{"code":15834},"gcc -std=c89 -w donut_no_math.c -o donut",[60,15836,15840],{"className":15837,"code":15838,"filename":15839,"language":66,"meta":67},[63],"             i,j,k,x,y,o,N;\n         main(){float z[1760],a\n      #define R(t,x,y) f=x;x-=t*y\\\n   ;y+=t*f;f=(3-x*x-y*y)\u002F2;x*=f;y*=f;\n   =0,e=1,c=1,d=0,f,g,h,G,H,A,t,D;char\n b[1760];for(;;){memset(b,32,1760);g=0,\nh=1;memset(z,0,7040);for(j=0;j\u003C90;j++){\nG=0,H=1;for(i=0;i\u003C314;i++){A=h+2,D=1\u002F(G*\nA*a+g*e+5);t=G*A        *e-g*a;x=40+30*D\n*(H*A*d-t*c);y=          12+15*D*(H*A*c+\nt*d);o=x+80*y;N          =8*((g*a-G*h*e)\n*d-G*h*a-g*e-H*h        *c);if(22>y&&y>\n 0&&x>0&&80>x&&D>z[o]){z[o]=D;b[o]=(N>0\n  ?N:0)[\".,-~:;=!*#$@\"];}R(.02,H,G);}R(\n  .07,h,g);}for(k=0;1761>k;k++)putchar\n   (k%80?b[k]:10);R(.04,e,a);R(.02,d,\n     c);usleep(15000);printf('\\n'+(\n        \" donut.c! \\x1b[23A\"));}}\n          \u002F*no math lib needed\n             .@a1k0n 2021.*\u002F\n","donut_no_math.c",[69,15841,15838],{"__ignoreMap":67},[13,15843,15844],{},"输出和之前基本一样。",[15846,15847,15848],"h3",{"id":15848},"定义旋转",[13,15850,15851,15852,1022,15854,15856,15857,102,15860,15863],{},"那么，如何在不使用 ",[69,15853,337],{"code":337},[69,15855,349],{"code":349}," 的情况下得到正弦和余弦？其实代码并不真正需要正弦和余弦本身；它实际做的是在两个嵌套循环中绕原点旋转一个点，另外还旋转两个角度用于动画。如果还记得另一篇文章，内层循环只是在一个圆上画点，而这个圆又绕着另一个更大的圆旋转。在每个循环中，正弦\u002F余弦项只是移动一个小的固定角度。所以我们根本不需要跟踪角度，只需要从 ",[69,15858,15859],{"code":15859},"cos=1",[69,15861,15862],{"code":15862},"sin=0"," 开始，绕原点旋转一个圆来生成我们需要的所有正弦和余弦值。我们只需要反复应用一个固定的旋转矩阵：",[148,15865,15867],{"className":15866},[1732],[148,15868,15870,16006],{"className":15869},[151],[148,15871,15873],{"className":15872},[155],[157,15874,15875],{"xmlns":159,"display":1741},[161,15876,15877,16003],{},[164,15878,15879,15914,15916,15979],{},[164,15880,15881,15884,15911],{},[339,15882,15883],{"fence":179},"[",[1745,15885,15886,15898],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,15887,15888],{},[1753,15889,15890],{},[1756,15891,15892],{"scriptlevel":1758,"displaystyle":1139},[1209,15893,15894,15896],{},[167,15895,66],{},[339,15897,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[1750,15899,15900],{},[1753,15901,15902],{},[1756,15903,15904],{"scriptlevel":1758,"displaystyle":1139},[1209,15905,15906,15909],{},[167,15907,15908],{},"s",[339,15910,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,15912,15913],{"fence":179},"]",[339,15915,1784],{},[164,15917,15918,15920,15977],{},[339,15919,15883],{"fence":179},[1745,15921,15923,15951],{"rowspacing":5083,"columnalign":15922,"columnspacing":5085},"center center",[1750,15924,15925,15937],{},[1753,15926,15927],{},[1756,15928,15929],{"scriptlevel":1758,"displaystyle":1139},[164,15930,15931,15933,15935],{},[167,15932,349],{},[339,15934,341],{},[167,15936,169],{},[1753,15938,15939],{},[1756,15940,15941],{"scriptlevel":1758,"displaystyle":1139},[164,15942,15943,15945,15947,15949],{},[339,15944,942],{},[167,15946,337],{},[339,15948,341],{},[167,15950,169],{},[1750,15952,15953,15965],{},[1753,15954,15955],{},[1756,15956,15957],{"scriptlevel":1758,"displaystyle":1139},[164,15958,15959,15961,15963],{},[167,15960,337],{},[339,15962,341],{},[167,15964,169],{},[1753,15966,15967],{},[1756,15968,15969],{"scriptlevel":1758,"displaystyle":1139},[164,15970,15971,15973,15975],{},[167,15972,349],{},[339,15974,341],{},[167,15976,169],{},[339,15978,15913],{"fence":179},[164,15980,15981,15983,16001],{},[339,15982,15883],{"fence":179},[1745,15984,15985,15993],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,15986,15987],{},[1753,15988,15989],{},[1756,15990,15991],{"scriptlevel":1758,"displaystyle":1139},[167,15992,66],{},[1750,15994,15995],{},[1753,15996,15997],{},[1756,15998,15999],{"scriptlevel":1758,"displaystyle":1139},[167,16000,15908],{},[339,16002,15913],{"fence":179},[171,16004,16005],{"encoding":173},"\\begin{bmatrix}\nc' \\\\\ns'\n\\end{bmatrix}\n=\n\\begin{bmatrix}\n\\cos \\theta & -\\sin \\theta \\\\\n\\sin \\theta & \\cos \\theta\n\\end{bmatrix}\n\\begin{bmatrix}\nc \\\\\ns\n\\end{bmatrix}",[148,16007,16009,16152],{"className":16008,"ariaHidden":179},[178],[148,16010,16012,16015,16143,16146,16149],{"className":16011},[183],[148,16013],{"className":16014,"style":2655},[187],[148,16016,16018,16024,16137],{"className":16017},[2659],[148,16019,16021],{"className":16020,"style":2664},[1169,2663],[148,16022,15883],{"className":16023},[2668,707],[148,16025,16027],{"className":16026},[192],[148,16028,16030],{"className":16029},[1745],[148,16031,16033],{"className":16032},[5273],[148,16034,16036,16128],{"className":16035},[683,684],[148,16037,16039,16125],{"className":16038},[688],[148,16040,16043,16084],{"className":16041,"style":16042},[692],"height:1.45em;",[148,16044,16046,16049],{"style":16045},"top:-3.61em;",[148,16047],{"className":16048,"style":1896},[700],[148,16050,16052],{"className":16051},[192],[148,16053,16055,16058],{"className":16054},[192],[148,16056,66],{"className":16057},[192,193],[148,16059,16061],{"className":16060},[679],[148,16062,16064],{"className":16063},[683],[148,16065,16067],{"className":16066},[688],[148,16068,16070],{"className":16069,"style":1229},[692],[148,16071,16072,16075],{"style":1250},[148,16073],{"className":16074,"style":701},[700],[148,16076,16078],{"className":16077},[705,706,707,708],[148,16079,16081],{"className":16080},[192,708],[148,16082,1216],{"className":16083},[192,708],[148,16085,16087,16090],{"style":16086},"top:-2.41em;",[148,16088],{"className":16089,"style":1896},[700],[148,16091,16093],{"className":16092},[192],[148,16094,16096,16099],{"className":16095},[192],[148,16097,15908],{"className":16098},[192,193],[148,16100,16102],{"className":16101},[679],[148,16103,16105],{"className":16104},[683],[148,16106,16108],{"className":16107},[688],[148,16109,16111],{"className":16110,"style":1229},[692],[148,16112,16113,16116],{"style":1250},[148,16114],{"className":16115,"style":701},[700],[148,16117,16119],{"className":16118},[705,706,707,708],[148,16120,16122],{"className":16121},[192,708],[148,16123,1216],{"className":16124},[192,708],[148,16126,716],{"className":16127},[715],[148,16129,16131],{"className":16130},[688],[148,16132,16135],{"className":16133,"style":16134},[692],"height:0.95em;",[148,16136],{},[148,16138,16140],{"className":16139,"style":2664},[1194,2663],[148,16141,15913],{"className":16142},[2668,707],[148,16144],{"className":16145,"style":2083},[373],[148,16147,1784],{"className":16148},[2087],[148,16150],{"className":16151,"style":2083},[373],[148,16153,16155,16158,16305,16308],{"className":16154},[183],[148,16156],{"className":16157,"style":2655},[187],[148,16159,16161,16167,16299],{"className":16160},[2659],[148,16162,16164],{"className":16163,"style":2664},[1169,2663],[148,16165,15883],{"className":16166},[2668,707],[148,16168,16170],{"className":16169},[192],[148,16171,16173,16230,16233,16236],{"className":16172},[1745],[148,16174,16176],{"className":16175},[5273],[148,16177,16179,16222],{"className":16178},[683,684],[148,16180,16182,16219],{"className":16181},[688],[148,16183,16185,16202],{"className":16184,"style":16042},[692],[148,16186,16187,16190],{"style":16045},[148,16188],{"className":16189,"style":1896},[700],[148,16191,16193,16196,16199],{"className":16192},[192],[148,16194,349],{"className":16195},[369],[148,16197],{"className":16198,"style":374},[373],[148,16200,169],{"className":16201,"style":194},[192,193],[148,16203,16204,16207],{"style":16086},[148,16205],{"className":16206,"style":1896},[700],[148,16208,16210,16213,16216],{"className":16209},[192],[148,16211,337],{"className":16212},[369],[148,16214],{"className":16215,"style":374},[373],[148,16217,169],{"className":16218,"style":194},[192,193],[148,16220,716],{"className":16221},[715],[148,16223,16225],{"className":16224},[688],[148,16226,16228],{"className":16227,"style":16134},[692],[148,16229],{},[148,16231],{"className":16232,"style":5413},[5412],[148,16234],{"className":16235,"style":5413},[5412],[148,16237,16239],{"className":16238},[5273],[148,16240,16242,16291],{"className":16241},[683,684],[148,16243,16245,16288],{"className":16244},[688],[148,16246,16248,16271],{"className":16247,"style":16042},[692],[148,16249,16250,16253],{"style":16045},[148,16251],{"className":16252,"style":1896},[700],[148,16254,16256,16259,16262,16265,16268],{"className":16255},[192],[148,16257,942],{"className":16258},[192],[148,16260],{"className":16261,"style":374},[373],[148,16263,337],{"className":16264},[369],[148,16266],{"className":16267,"style":374},[373],[148,16269,169],{"className":16270,"style":194},[192,193],[148,16272,16273,16276],{"style":16086},[148,16274],{"className":16275,"style":1896},[700],[148,16277,16279,16282,16285],{"className":16278},[192],[148,16280,349],{"className":16281},[369],[148,16283],{"className":16284,"style":374},[373],[148,16286,169],{"className":16287,"style":194},[192,193],[148,16289,716],{"className":16290},[715],[148,16292,16294],{"className":16293},[688],[148,16295,16297],{"className":16296,"style":16134},[692],[148,16298],{},[148,16300,16302],{"className":16301,"style":2664},[1194,2663],[148,16303,15913],{"className":16304},[2668,707],[148,16306],{"className":16307,"style":374},[373],[148,16309,16311,16317,16368],{"className":16310},[2659],[148,16312,16314],{"className":16313,"style":2664},[1169,2663],[148,16315,15883],{"className":16316},[2668,707],[148,16318,16320],{"className":16319},[192],[148,16321,16323],{"className":16322},[1745],[148,16324,16326],{"className":16325},[5273],[148,16327,16329,16360],{"className":16328},[683,684],[148,16330,16332,16357],{"className":16331},[688],[148,16333,16335,16346],{"className":16334,"style":16042},[692],[148,16336,16337,16340],{"style":16045},[148,16338],{"className":16339,"style":1896},[700],[148,16341,16343],{"className":16342},[192],[148,16344,66],{"className":16345},[192,193],[148,16347,16348,16351],{"style":16086},[148,16349],{"className":16350,"style":1896},[700],[148,16352,16354],{"className":16353},[192],[148,16355,15908],{"className":16356},[192,193],[148,16358,716],{"className":16359},[715],[148,16361,16363],{"className":16362},[688],[148,16364,16366],{"className":16365,"style":16134},[692],[148,16367],{},[148,16369,16371],{"className":16370,"style":2664},[1194,2663],[148,16372,15913],{"className":16373},[2668,707],[13,16375,16376],{},"例如，如果在内层循环中使用 0.02 弧度的角度，大致如下：",[60,16378,16381],{"className":16379,"code":16380,"language":66,"meta":67},[63],"float c = 1, s = 0; \u002F\u002F c for cos, s for sin\nfor (int i = 0; i \u003C 314; i++) { \u002F\u002F 314 * .02 ~= 2π\n  \u002F\u002F (use c, s in code)\n  float newc = 0.9998*c - 0.019998666*s;\n  s = 0.019998666*c + 0.9998*s;\n  c = newc;\n}\n",[69,16382,16380],{"__ignoreMap":67},[15846,16384,16385],{"id":16385},"归一化修正漂移",[13,16387,16388,16389,16441],{},"这样做可以，但有个问题：无论定义的常数多么精确，反复迭代这个过程后，",[148,16390,16392,16414],{"className":16391},[151],[148,16393,16395],{"className":16394},[155],[157,16396,16397],{"xmlns":159},[161,16398,16399,16411],{},[164,16400,16401,16403,16405,16407,16409],{},[339,16402,1140],{"stretchy":1139},[167,16404,66],{},[339,16406,346],{"separator":179},[167,16408,15908],{},[339,16410,1153],{"stretchy":1139},[171,16412,16413],{"encoding":173},"(c, s)",[148,16415,16417],{"className":16416,"ariaHidden":179},[178],[148,16418,16420,16423,16426,16429,16432,16435,16438],{"className":16419},[183],[148,16421],{"className":16422,"style":902},[187],[148,16424,1140],{"className":16425},[1169],[148,16427,66],{"className":16428},[192,193],[148,16430,346],{"className":16431},[381],[148,16433],{"className":16434,"style":374},[373],[148,16436,15908],{"className":16437},[192,193],[148,16439,1153],{"className":16440},[1194]," 向量的长度会随时间指数增长或缩小。如果只需要遍历一次循环，也许可以凑合；但如果需要多次（旋转动画就需要），就必须修正。",[80,16443],{":height":82,"caption":16444,"src":16445},"重复低精度旋转导致正弦余弦向量长度漂移（夸张示意）","https:\u002F\u002Fbu.dusays.com\u002F2026\u002F06\u002F09\u002F6a27d229a5542.webp",[13,16447,16448,16449,1022,16477,16505,16506,16730],{},"最简单的方法是将 ",[148,16450,16452,16465],{"className":16451},[151],[148,16453,16455],{"className":16454},[155],[157,16456,16457],{"xmlns":159},[161,16458,16459,16463],{},[164,16460,16461],{},[167,16462,66],{},[171,16464,66],{"encoding":173},[148,16466,16468],{"className":16467,"ariaHidden":179},[178],[148,16469,16471,16474],{"className":16470},[183],[148,16472],{"className":16473,"style":278},[187],[148,16475,66],{"className":16476},[192,193],[148,16478,16480,16493],{"className":16479},[151],[148,16481,16483],{"className":16482},[155],[157,16484,16485],{"xmlns":159},[161,16486,16487,16491],{},[164,16488,16489],{},[167,16490,15908],{},[171,16492,15908],{"encoding":173},[148,16494,16496],{"className":16495,"ariaHidden":179},[178],[148,16497,16499,16502],{"className":16498},[183],[148,16500],{"className":16501,"style":278},[187],[148,16503,15908],{"className":16504},[192,193]," 乘以 ",[148,16507,16509,16543],{"className":16508},[151],[148,16510,16512],{"className":16511},[155],[157,16513,16514],{"xmlns":159},[161,16515,16516,16540],{},[164,16517,16518],{},[1760,16519,16520,16522],{},[637,16521,649],{},[13035,16523,16524],{},[164,16525,16526,16532,16534],{},[1209,16527,16528,16530],{},[167,16529,66],{},[637,16531,639],{},[339,16533,642],{},[1209,16535,16536,16538],{},[167,16537,15908],{},[637,16539,639],{},[171,16541,16542],{"encoding":173},"\\frac{1}{\\sqrt{c^2 + s^2}}",[148,16544,16546],{"className":16545,"ariaHidden":179},[178],[148,16547,16549,16553],{"className":16548},[183],[148,16550],{"className":16551,"style":16552},[187],"height:1.3831em;vertical-align:-0.538em;",[148,16554,16556,16559,16727],{"className":16555},[192],[148,16557],{"className":16558},[1169,1876],[148,16560,16562],{"className":16561},[1760],[148,16563,16565,16718],{"className":16564},[683,684],[148,16566,16568,16715],{"className":16567},[688],[148,16569,16571,16693,16701],{"className":16570,"style":3660},[692],[148,16572,16574,16577],{"style":16573},"top:-2.5445em;",[148,16575],{"className":16576,"style":1896},[700],[148,16578,16580],{"className":16579},[705,706,707,708],[148,16581,16583],{"className":16582},[192,708],[148,16584,16586],{"className":16585},[192,13055,708],[148,16587,16589,16684],{"className":16588},[683,684],[148,16590,16592,16681],{"className":16591},[688],[148,16593,16596,16668],{"className":16594,"style":16595},[692],"height:0.9221em;",[148,16597,16599,16602],{"className":16598,"style":13070},[13069],[148,16600],{"className":16601,"style":1896},[700],[148,16603,16605,16636,16639],{"className":16604,"style":13077},[192,708],[148,16606,16608,16611],{"className":16607},[192,708],[148,16609,66],{"className":16610},[192,193,708],[148,16612,16614],{"className":16613},[679],[148,16615,16617],{"className":16616},[683],[148,16618,16620],{"className":16619},[688],[148,16621,16624],{"className":16622,"style":16623},[692],"height:0.7463em;",[148,16625,16627,16630],{"style":16626},"top:-2.786em;margin-right:0.0714em;",[148,16628],{"className":16629,"style":15263},[700],[148,16631,16633],{"className":16632},[705,15267,5263,708],[148,16634,639],{"className":16635},[192,708],[148,16637,642],{"className":16638},[733,708],[148,16640,16642,16645],{"className":16641},[192,708],[148,16643,15908],{"className":16644},[192,193,708],[148,16646,16648],{"className":16647},[679],[148,16649,16651],{"className":16650},[683],[148,16652,16654],{"className":16653},[688],[148,16655,16657],{"className":16656,"style":16623},[692],[148,16658,16659,16662],{"style":16626},[148,16660],{"className":16661,"style":15263},[700],[148,16663,16665],{"className":16664},[705,15267,5263,708],[148,16666,639],{"className":16667},[192,708],[148,16669,16671,16674],{"style":16670},"top:-2.8821em;",[148,16672],{"className":16673,"style":1896},[700],[148,16675,16677],{"className":16676,"style":13091},[13090,708],[5596,16678,16679],{"xmlns":5598,"width":13094,"height":13095,"viewBox":13096,"preserveAspectRatio":13097},[5603,16680],{"d":13100},[148,16682,716],{"className":16683},[715],[148,16685,16687],{"className":16686},[688],[148,16688,16691],{"className":16689,"style":16690},[692],"height:0.1179em;",[148,16692],{},[148,16694,16695,16698],{"style":1936},[148,16696],{"className":16697,"style":1896},[700],[148,16699],{"className":16700,"style":1944},[1943],[148,16702,16703,16706],{"style":3686},[148,16704],{"className":16705,"style":1896},[700],[148,16707,16709],{"className":16708},[705,706,707,708],[148,16710,16712],{"className":16711},[192,708],[148,16713,649],{"className":16714},[192,708],[148,16716,716],{"className":16717},[715],[148,16719,16721],{"className":16720},[688],[148,16722,16725],{"className":16723,"style":16724},[692],"height:0.538em;",[148,16726],{},[148,16728],{"className":16729},[1194,1876],"，但这样又会用到数学库。相反，可以利用这样一个事实：向量长度一开始就非常接近 1，而且我们还要反复迭代这个过程：可以在每次旋转后做一步牛顿迭代，这就足以让长度在一段时间内保持\"足够接近\" 1。",[13,16732,16733,16734,796,16868,16919],{},"我们的目标是求 ",[148,16735,16737,16767],{"className":16736},[151],[148,16738,16740],{"className":16739},[155],[157,16741,16742],{"xmlns":159},[161,16743,16744,16764],{},[164,16745,16746,16748,16750,16756,16758],{},[167,16747,17],{},[339,16749,1784],{},[1209,16751,16752,16754],{},[167,16753,66],{},[637,16755,639],{},[339,16757,642],{},[1209,16759,16760,16762],{},[167,16761,15908],{},[637,16763,639],{},[171,16765,16766],{"encoding":173},"a = c^2 + s^2",[148,16768,16770,16788,16833],{"className":16769,"ariaHidden":179},[178],[148,16771,16773,16776,16779,16782,16785],{"className":16772},[183],[148,16774],{"className":16775,"style":278},[187],[148,16777,17],{"className":16778},[192,193],[148,16780],{"className":16781,"style":2083},[373],[148,16783,1784],{"className":16784},[2087],[148,16786],{"className":16787,"style":2083},[373],[148,16789,16791,16795,16824,16827,16830],{"className":16790},[183],[148,16792],{"className":16793,"style":16794},[187],"height:0.8974em;vertical-align:-0.0833em;",[148,16796,16798,16801],{"className":16797},[192],[148,16799,66],{"className":16800},[192,193],[148,16802,16804],{"className":16803},[679],[148,16805,16807],{"className":16806},[683],[148,16808,16810],{"className":16809},[688],[148,16811,16813],{"className":16812,"style":3590},[692],[148,16814,16815,16818],{"style":1250},[148,16816],{"className":16817,"style":701},[700],[148,16819,16821],{"className":16820},[705,706,707,708],[148,16822,639],{"className":16823},[192,708],[148,16825],{"className":16826,"style":729},[373],[148,16828,642],{"className":16829},[733],[148,16831],{"className":16832,"style":729},[373],[148,16834,16836,16839],{"className":16835},[183],[148,16837],{"className":16838,"style":3590},[187],[148,16840,16842,16845],{"className":16841},[192],[148,16843,15908],{"className":16844},[192,193],[148,16846,16848],{"className":16847},[679],[148,16849,16851],{"className":16850},[683],[148,16852,16854],{"className":16853},[688],[148,16855,16857],{"className":16856,"style":3590},[692],[148,16858,16859,16862],{"style":1250},[148,16860],{"className":16861,"style":701},[700],[148,16863,16865],{"className":16864},[705,706,707,708],[148,16866,639],{"className":16867},[192,708],[148,16869,16871,16892],{"className":16870},[151],[148,16872,16874],{"className":16873},[155],[157,16875,16876],{"xmlns":159},[161,16877,16878,16890],{},[164,16879,16880,16882,16884,16886,16888],{},[339,16881,1140],{"stretchy":1139},[167,16883,66],{},[339,16885,346],{"separator":179},[167,16887,15908],{},[339,16889,1153],{"stretchy":1139},[171,16891,16413],{"encoding":173},[148,16893,16895],{"className":16894,"ariaHidden":179},[178],[148,16896,16898,16901,16904,16907,16910,16913,16916],{"className":16897},[183],[148,16899],{"className":16900,"style":902},[187],[148,16902,1140],{"className":16903},[1169],[148,16905,66],{"className":16906},[192,193],[148,16908,346],{"className":16909},[381],[148,16911],{"className":16912,"style":374},[373],[148,16914,15908],{"className":16915},[192,193],[148,16917,1153],{"className":16918},[1194]," 向量长度的平方）的倒数平方根。定义函数：",[148,16921,16923],{"className":16922},[1732],[148,16924,16926,16962],{"className":16925},[151],[148,16927,16929],{"className":16928},[155],[157,16930,16931],{"xmlns":159,"display":1741},[161,16932,16933,16959],{},[164,16934,16935,16937,16939,16941,16943,16945,16955,16957],{},[167,16936,945],{},[339,16938,1140],{"stretchy":1139},[167,16940,266],{},[339,16942,1153],{"stretchy":1139},[339,16944,1784],{},[1760,16946,16947,16949],{},[637,16948,649],{},[1209,16950,16951,16953],{},[167,16952,266],{},[637,16954,639],{},[339,16956,942],{},[167,16958,17],{},[171,16960,16961],{"encoding":173},"f(x) = \\frac{1}{x^2} - a",[148,16963,16965,16992,17098],{"className":16964,"ariaHidden":179},[178],[148,16966,16968,16971,16974,16977,16980,16983,16986,16989],{"className":16967},[183],[148,16969],{"className":16970,"style":902},[187],[148,16972,945],{"className":16973,"style":989},[192,193],[148,16975,1140],{"className":16976},[1169],[148,16978,266],{"className":16979},[192,193],[148,16981,1153],{"className":16982},[1194],[148,16984],{"className":16985,"style":2083},[373],[148,16987,1784],{"className":16988},[2087],[148,16990],{"className":16991,"style":2083},[373],[148,16993,16995,16999,17089,17092,17095],{"className":16994},[183],[148,16996],{"className":16997,"style":16998},[187],"height:2.0074em;vertical-align:-0.686em;",[148,17000,17002,17005,17086],{"className":17001},[192],[148,17003],{"className":17004},[1169,1876],[148,17006,17008],{"className":17007},[1760],[148,17009,17011,17078],{"className":17010},[683,684],[148,17012,17014,17075],{"className":17013},[688],[148,17015,17018,17056,17064],{"className":17016,"style":17017},[692],"height:1.3214em;",[148,17019,17020,17023],{"style":1892},[148,17021],{"className":17022,"style":1896},[700],[148,17024,17026],{"className":17025},[192],[148,17027,17029,17032],{"className":17028},[192],[148,17030,266],{"className":17031},[192,193],[148,17033,17035],{"className":17034},[679],[148,17036,17038],{"className":17037},[683],[148,17039,17041],{"className":17040},[688],[148,17042,17045],{"className":17043,"style":17044},[692],"height:0.7401em;",[148,17046,17047,17050],{"style":1921},[148,17048],{"className":17049,"style":701},[700],[148,17051,17053],{"className":17052},[705,706,707,708],[148,17054,639],{"className":17055},[192,708],[148,17057,17058,17061],{"style":1936},[148,17059],{"className":17060,"style":1896},[700],[148,17062],{"className":17063,"style":1944},[1943],[148,17065,17066,17069],{"style":1947},[148,17067],{"className":17068,"style":1896},[700],[148,17070,17072],{"className":17071},[192],[148,17073,649],{"className":17074},[192],[148,17076,716],{"className":17077},[715],[148,17079,17081],{"className":17080},[688],[148,17082,17084],{"className":17083,"style":1995},[692],[148,17085],{},[148,17087],{"className":17088},[1194,1876],[148,17090],{"className":17091,"style":729},[373],[148,17093,942],{"className":17094},[733],[148,17096],{"className":17097,"style":729},[373],[148,17099,17101,17104],{"className":17100},[183],[148,17102],{"className":17103,"style":278},[187],[148,17105,17],{"className":17106},[192,193],[13,17108,17109,17110,17280,17281,17342,17343,17487,17488,1022,17516,17544,17545,17702],{},"当 ",[148,17111,17113,17137],{"className":17112},[151],[148,17114,17116],{"className":17115},[155],[157,17117,17118],{"xmlns":159},[161,17119,17120,17134],{},[164,17121,17122,17124,17126],{},[167,17123,266],{},[339,17125,1784],{},[1760,17127,17128,17130],{},[637,17129,649],{},[13035,17131,17132],{},[167,17133,17],{},[171,17135,17136],{"encoding":173},"x = \\frac{1}{\\sqrt{a}}",[148,17138,17140,17158],{"className":17139,"ariaHidden":179},[178],[148,17141,17143,17146,17149,17152,17155],{"className":17142},[183],[148,17144],{"className":17145,"style":278},[187],[148,17147,266],{"className":17148},[192,193],[148,17150],{"className":17151,"style":2083},[373],[148,17153,1784],{"className":17154},[2087],[148,17156],{"className":17157,"style":2083},[373],[148,17159,17161,17164],{"className":17160},[183],[148,17162],{"className":17163,"style":16552},[187],[148,17165,17167,17170,17277],{"className":17166},[192],[148,17168],{"className":17169},[1169,1876],[148,17171,17173],{"className":17172},[1760],[148,17174,17176,17269],{"className":17175},[683,684],[148,17177,17179,17266],{"className":17178},[688],[148,17180,17182,17244,17252],{"className":17181,"style":3660},[692],[148,17183,17185,17188],{"style":17184},"top:-2.6259em;",[148,17186],{"className":17187,"style":1896},[700],[148,17189,17191],{"className":17190},[705,706,707,708],[148,17192,17194],{"className":17193},[192,708],[148,17195,17197],{"className":17196},[192,13055,708],[148,17198,17200,17235],{"className":17199},[683,684],[148,17201,17203,17232],{"className":17202},[688],[148,17204,17207,17219],{"className":17205,"style":17206},[692],"height:0.8059em;",[148,17208,17210,17213],{"className":17209,"style":13070},[13069],[148,17211],{"className":17212,"style":1896},[700],[148,17214,17216],{"className":17215,"style":13077},[192,708],[148,17217,17],{"className":17218},[192,193,708],[148,17220,17222,17225],{"style":17221},"top:-2.7659em;",[148,17223],{"className":17224,"style":1896},[700],[148,17226,17228],{"className":17227,"style":13091},[13090,708],[5596,17229,17230],{"xmlns":5598,"width":13094,"height":13095,"viewBox":13096,"preserveAspectRatio":13097},[5603,17231],{"d":13100},[148,17233,716],{"className":17234},[715],[148,17236,17238],{"className":17237},[688],[148,17239,17242],{"className":17240,"style":17241},[692],"height:0.2341em;",[148,17243],{},[148,17245,17246,17249],{"style":1936},[148,17247],{"className":17248,"style":1896},[700],[148,17250],{"className":17251,"style":1944},[1943],[148,17253,17254,17257],{"style":3686},[148,17255],{"className":17256,"style":1896},[700],[148,17258,17260],{"className":17259},[705,706,707,708],[148,17261,17263],{"className":17262},[192,708],[148,17264,649],{"className":17265},[192,708],[148,17267,716],{"className":17268},[715],[148,17270,17272],{"className":17271},[688],[148,17273,17275],{"className":17274,"style":16724},[692],[148,17276],{},[148,17278],{"className":17279},[1194,1876]," 时，函数值为 0。可以从初始猜测 1 开始，执行一步牛顿迭代得到 ",[148,17282,17284,17301],{"className":17283},[151],[148,17285,17287],{"className":17286},[155],[157,17288,17289],{"xmlns":159},[161,17290,17291,17299],{},[164,17292,17293],{},[1209,17294,17295,17297],{},[167,17296,266],{},[339,17298,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[171,17300,3838],{"encoding":173},[148,17302,17304],{"className":17303,"ariaHidden":179},[178],[148,17305,17307,17310],{"className":17306},[183],[148,17308],{"className":17309,"style":1229},[187],[148,17311,17313,17316],{"className":17312},[192],[148,17314,266],{"className":17315},[192,193],[148,17317,17319],{"className":17318},[679],[148,17320,17322],{"className":17321},[683],[148,17323,17325],{"className":17324},[688],[148,17326,17328],{"className":17327,"style":1229},[692],[148,17329,17330,17333],{"style":1250},[148,17331],{"className":17332,"style":701},[700],[148,17334,17336],{"className":17335},[705,706,707,708],[148,17337,17339],{"className":17338},[192,708],[148,17340,1216],{"className":17341},[192,708],"，它会\"更接近\" ",[148,17344,17346,17366],{"className":17345},[151],[148,17347,17349],{"className":17348},[155],[157,17350,17351],{"xmlns":159},[161,17352,17353,17363],{},[164,17354,17355],{},[1760,17356,17357,17359],{},[637,17358,649],{},[13035,17360,17361],{},[167,17362,17],{},[171,17364,17365],{"encoding":173},"\\frac{1}{\\sqrt{a}}",[148,17367,17369],{"className":17368,"ariaHidden":179},[178],[148,17370,17372,17375],{"className":17371},[183],[148,17373],{"className":17374,"style":16552},[187],[148,17376,17378,17381,17484],{"className":17377},[192],[148,17379],{"className":17380},[1169,1876],[148,17382,17384],{"className":17383},[1760],[148,17385,17387,17476],{"className":17386},[683,684],[148,17388,17390,17473],{"className":17389},[688],[148,17391,17393,17451,17459],{"className":17392,"style":3660},[692],[148,17394,17395,17398],{"style":17184},[148,17396],{"className":17397,"style":1896},[700],[148,17399,17401],{"className":17400},[705,706,707,708],[148,17402,17404],{"className":17403},[192,708],[148,17405,17407],{"className":17406},[192,13055,708],[148,17408,17410,17443],{"className":17409},[683,684],[148,17411,17413,17440],{"className":17412},[688],[148,17414,17416,17428],{"className":17415,"style":17206},[692],[148,17417,17419,17422],{"className":17418,"style":13070},[13069],[148,17420],{"className":17421,"style":1896},[700],[148,17423,17425],{"className":17424,"style":13077},[192,708],[148,17426,17],{"className":17427},[192,193,708],[148,17429,17430,17433],{"style":17221},[148,17431],{"className":17432,"style":1896},[700],[148,17434,17436],{"className":17435,"style":13091},[13090,708],[5596,17437,17438],{"xmlns":5598,"width":13094,"height":13095,"viewBox":13096,"preserveAspectRatio":13097},[5603,17439],{"d":13100},[148,17441,716],{"className":17442},[715],[148,17444,17446],{"className":17445},[688],[148,17447,17449],{"className":17448,"style":17241},[692],[148,17450],{},[148,17452,17453,17456],{"style":1936},[148,17454],{"className":17455,"style":1896},[700],[148,17457],{"className":17458,"style":1944},[1943],[148,17460,17461,17464],{"style":3686},[148,17462],{"className":17463,"style":1896},[700],[148,17465,17467],{"className":17466},[705,706,707,708],[148,17468,17470],{"className":17469},[192,708],[148,17471,649],{"className":17472},[192,708],[148,17474,716],{"className":17475},[715],[148,17477,17479],{"className":17478},[688],[148,17480,17482],{"className":17481,"style":16724},[692],[148,17483],{},[148,17485],{"className":17486},[1194,1876],"，也就是让 ",[148,17489,17491,17504],{"className":17490},[151],[148,17492,17494],{"className":17493},[155],[157,17495,17496],{"xmlns":159},[161,17497,17498,17502],{},[164,17499,17500],{},[167,17501,66],{},[171,17503,66],{"encoding":173},[148,17505,17507],{"className":17506,"ariaHidden":179},[178],[148,17508,17510,17513],{"className":17509},[183],[148,17511],{"className":17512,"style":278},[187],[148,17514,66],{"className":17515},[192,193],[148,17517,17519,17532],{"className":17518},[151],[148,17520,17522],{"className":17521},[155],[157,17523,17524],{"xmlns":159},[161,17525,17526,17530],{},[164,17527,17528],{},[167,17529,15908],{},[171,17531,15908],{"encoding":173},[148,17533,17535],{"className":17534,"ariaHidden":179},[178],[148,17536,17538,17541],{"className":17537},[183],[148,17539],{"className":17540,"style":278},[187],[148,17542,15908],{"className":17543},[192,193]," 的长度 ",[148,17546,17548,17578],{"className":17547},[151],[148,17549,17551],{"className":17550},[155],[157,17552,17553],{"xmlns":159},[161,17554,17555,17575],{},[164,17556,17557],{},[13035,17558,17559],{},[164,17560,17561,17567,17569],{},[1209,17562,17563,17565],{},[167,17564,66],{},[637,17566,639],{},[339,17568,642],{},[1209,17570,17571,17573],{},[167,17572,15908],{},[637,17574,639],{},[171,17576,17577],{"encoding":173},"\\sqrt{c^2 + s^2}",[148,17579,17581],{"className":17580,"ariaHidden":179},[178],[148,17582,17584,17588],{"className":17583},[183],[148,17585],{"className":17586,"style":17587},[187],"height:1.04em;vertical-align:-0.1266em;",[148,17589,17591],{"className":17590},[192,13055],[148,17592,17594,17693],{"className":17593},[683,684],[148,17595,17597,17690],{"className":17596},[688],[148,17598,17601,17677],{"className":17599,"style":17600},[692],"height:0.9134em;",[148,17602,17604,17607],{"className":17603,"style":13070},[13069],[148,17605],{"className":17606,"style":1896},[700],[148,17608,17610,17639,17642,17645,17648],{"className":17609,"style":13077},[192],[148,17611,17613,17616],{"className":17612},[192],[148,17614,66],{"className":17615},[192,193],[148,17617,17619],{"className":17618},[679],[148,17620,17622],{"className":17621},[683],[148,17623,17625],{"className":17624},[688],[148,17626,17628],{"className":17627,"style":17044},[692],[148,17629,17630,17633],{"style":1921},[148,17631],{"className":17632,"style":701},[700],[148,17634,17636],{"className":17635},[705,706,707,708],[148,17637,639],{"className":17638},[192,708],[148,17640],{"className":17641,"style":729},[373],[148,17643,642],{"className":17644},[733],[148,17646],{"className":17647,"style":729},[373],[148,17649,17651,17654],{"className":17650},[192],[148,17652,15908],{"className":17653},[192,193],[148,17655,17657],{"className":17656},[679],[148,17658,17660],{"className":17659},[683],[148,17661,17663],{"className":17662},[688],[148,17664,17666],{"className":17665,"style":17044},[692],[148,17667,17668,17671],{"style":1921},[148,17669],{"className":17670,"style":701},[700],[148,17672,17674],{"className":17673},[705,706,707,708],[148,17675,639],{"className":17676},[192,708],[148,17678,17680,17683],{"style":17679},"top:-2.8734em;",[148,17681],{"className":17682,"style":1896},[700],[148,17684,17686],{"className":17685,"style":13091},[13090],[5596,17687,17688],{"xmlns":5598,"width":13094,"height":13095,"viewBox":13096,"preserveAspectRatio":13097},[5603,17689],{"d":13100},[148,17691,716],{"className":17692},[715],[148,17694,17696],{"className":17695},[688],[148,17697,17700],{"className":17698,"style":17699},[692],"height:0.1266em;",[148,17701],{}," 重新\"接近\" 1 的正确缩放值。",[13,17704,17705],{},"牛顿迭代的定义是：",[148,17707,17709],{"className":17708},[1732],[148,17710,17712,17762],{"className":17711},[151],[148,17713,17715],{"className":17714},[155],[157,17716,17717],{"xmlns":159,"display":1741},[161,17718,17719,17759],{},[164,17720,17721,17727,17729,17731,17733],{},[1209,17722,17723,17725],{},[167,17724,266],{},[339,17726,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,17728,1784],{},[167,17730,266],{},[339,17732,942],{},[1760,17734,17735,17745],{},[164,17736,17737,17739,17741,17743],{},[167,17738,945],{},[339,17740,1140],{"stretchy":1139},[167,17742,266],{},[339,17744,1153],{"stretchy":1139},[164,17746,17747,17753,17755,17757],{},[1209,17748,17749,17751],{},[167,17750,945],{},[339,17752,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,17754,1140],{"stretchy":1139},[167,17756,266],{},[339,17758,1153],{"stretchy":1139},[171,17760,17761],{"encoding":173},"x' = x - \\frac{f(x)}{f'(x)}",[148,17763,17765,17812,17831],{"className":17764,"ariaHidden":179},[178],[148,17766,17768,17771,17803,17806,17809],{"className":17767},[183],[148,17769],{"className":17770,"style":2028},[187],[148,17772,17774,17777],{"className":17773},[192],[148,17775,266],{"className":17776},[192,193],[148,17778,17780],{"className":17779},[679],[148,17781,17783],{"className":17782},[683],[148,17784,17786],{"className":17785},[688],[148,17787,17789],{"className":17788,"style":2028},[692],[148,17790,17791,17794],{"style":2031},[148,17792],{"className":17793,"style":701},[700],[148,17795,17797],{"className":17796},[705,706,707,708],[148,17798,17800],{"className":17799},[192,708],[148,17801,1216],{"className":17802},[192,708],[148,17804],{"className":17805,"style":2083},[373],[148,17807,1784],{"className":17808},[2087],[148,17810],{"className":17811,"style":2083},[373],[148,17813,17815,17819,17822,17825,17828],{"className":17814},[183],[148,17816],{"className":17817,"style":17818},[187],"height:0.6667em;vertical-align:-0.0833em;",[148,17820,266],{"className":17821},[192,193],[148,17823],{"className":17824,"style":729},[373],[148,17826,942],{"className":17827},[733],[148,17829],{"className":17830,"style":729},[373],[148,17832,17834,17838],{"className":17833},[183],[148,17835],{"className":17836,"style":17837},[187],"height:2.363em;vertical-align:-0.936em;",[148,17839,17841,17844,17946],{"className":17840},[192],[148,17842],{"className":17843},[1169,1876],[148,17845,17847],{"className":17846},[1760],[148,17848,17850,17937],{"className":17849},[683,684],[148,17851,17853,17934],{"className":17852},[688],[148,17854,17857,17906,17914],{"className":17855,"style":17856},[692],"height:1.427em;",[148,17858,17859,17862],{"style":1892},[148,17860],{"className":17861,"style":1896},[700],[148,17863,17865,17897,17900,17903],{"className":17864},[192],[148,17866,17868,17871],{"className":17867},[192],[148,17869,945],{"className":17870,"style":989},[192,193],[148,17872,17874],{"className":17873},[679],[148,17875,17877],{"className":17876},[683],[148,17878,17880],{"className":17879},[688],[148,17881,17883],{"className":17882,"style":1918},[692],[148,17884,17885,17888],{"style":1921},[148,17886],{"className":17887,"style":701},[700],[148,17889,17891],{"className":17890},[705,706,707,708],[148,17892,17894],{"className":17893},[192,708],[148,17895,1216],{"className":17896},[192,708],[148,17898,1140],{"className":17899},[1169],[148,17901,266],{"className":17902},[192,193],[148,17904,1153],{"className":17905},[1194],[148,17907,17908,17911],{"style":1936},[148,17909],{"className":17910,"style":1896},[700],[148,17912],{"className":17913,"style":1944},[1943],[148,17915,17916,17919],{"style":1947},[148,17917],{"className":17918,"style":1896},[700],[148,17920,17922,17925,17928,17931],{"className":17921},[192],[148,17923,945],{"className":17924,"style":989},[192,193],[148,17926,1140],{"className":17927},[1169],[148,17929,266],{"className":17930},[192,193],[148,17932,1153],{"className":17933},[1194],[148,17935,716],{"className":17936},[715],[148,17938,17940],{"className":17939},[688],[148,17941,17944],{"className":17942,"style":17943},[692],"height:0.936em;",[148,17945],{},[148,17947],{"className":17948},[1194,1876],[13,17950,17951],{},"a1k0n 用 SymPy 做了求导和化简，得到：",[148,17953,17955],{"className":17954},[1732],[148,17956,17958,18002],{"className":17957},[151],[148,17959,17961],{"className":17960},[155],[157,17962,17963],{"xmlns":159,"display":1741},[161,17964,17965,17999],{},[164,17966,17967,17973,17975],{},[1209,17968,17969,17971],{},[167,17970,266],{},[339,17972,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,17974,1784],{},[1760,17976,17977,17997],{},[164,17978,17979,17981,17983,17985,17987,17989,17995],{},[167,17980,266],{},[339,17982,1140],{"stretchy":1139},[637,17984,15092],{},[339,17986,942],{},[167,17988,17],{},[1209,17990,17991,17993],{},[167,17992,266],{},[637,17994,639],{},[339,17996,1153],{"stretchy":1139},[637,17998,639],{},[171,18000,18001],{"encoding":173},"x' = \\frac{x(3 - ax^2)}{2}",[148,18003,18005,18052],{"className":18004,"ariaHidden":179},[178],[148,18006,18008,18011,18043,18046,18049],{"className":18007},[183],[148,18009],{"className":18010,"style":2028},[187],[148,18012,18014,18017],{"className":18013},[192],[148,18015,266],{"className":18016},[192,193],[148,18018,18020],{"className":18019},[679],[148,18021,18023],{"className":18022},[683],[148,18024,18026],{"className":18025},[688],[148,18027,18029],{"className":18028,"style":2028},[692],[148,18030,18031,18034],{"style":2031},[148,18032],{"className":18033,"style":701},[700],[148,18035,18037],{"className":18036},[705,706,707,708],[148,18038,18040],{"className":18039},[192,708],[148,18041,1216],{"className":18042},[192,708],[148,18044],{"className":18045,"style":2083},[373],[148,18047,1784],{"className":18048},[2087],[148,18050],{"className":18051,"style":2083},[373],[148,18053,18055,18059],{"className":18054},[183],[148,18056],{"className":18057,"style":18058},[187],"height:2.1771em;vertical-align:-0.686em;",[148,18060,18062,18065,18169],{"className":18061},[192],[148,18063],{"className":18064},[1169,1876],[148,18066,18068],{"className":18067},[1760],[148,18069,18071,18161],{"className":18070},[683,684],[148,18072,18074,18158],{"className":18073},[688],[148,18075,18078,18089,18097],{"className":18076,"style":18077},[692],"height:1.4911em;",[148,18079,18080,18083],{"style":1892},[148,18081],{"className":18082,"style":1896},[700],[148,18084,18086],{"className":18085},[192],[148,18087,639],{"className":18088},[192],[148,18090,18091,18094],{"style":1936},[148,18092],{"className":18093,"style":1896},[700],[148,18095],{"className":18096,"style":1944},[1943],[148,18098,18099,18102],{"style":1947},[148,18100],{"className":18101,"style":1896},[700],[148,18103,18105,18108,18111,18114,18117,18120,18123,18126,18155],{"className":18104},[192],[148,18106,266],{"className":18107},[192,193],[148,18109,1140],{"className":18110},[1169],[148,18112,15092],{"className":18113},[192],[148,18115],{"className":18116,"style":729},[373],[148,18118,942],{"className":18119},[733],[148,18121],{"className":18122,"style":729},[373],[148,18124,17],{"className":18125},[192,193],[148,18127,18129,18132],{"className":18128},[192],[148,18130,266],{"className":18131},[192,193],[148,18133,18135],{"className":18134},[679],[148,18136,18138],{"className":18137},[683],[148,18139,18141],{"className":18140},[688],[148,18142,18144],{"className":18143,"style":3590},[692],[148,18145,18146,18149],{"style":1250},[148,18147],{"className":18148,"style":701},[700],[148,18150,18152],{"className":18151},[705,706,707,708],[148,18153,639],{"className":18154},[192,708],[148,18156,1153],{"className":18157},[1194],[148,18159,716],{"className":18160},[715],[148,18162,18164],{"className":18163},[688],[148,18165,18167],{"className":18166,"style":1995},[692],[148,18168],{},[148,18170],{"className":18171},[1194,1876],[13,18173,18174,18175,18226,18227,18255,18256,18367],{},"因为只做一步，可以把初始猜测 ",[148,18176,18178,18196],{"className":18177},[151],[148,18179,18181],{"className":18180},[155],[157,18182,18183],{"xmlns":159},[161,18184,18185,18193],{},[164,18186,18187,18189,18191],{},[167,18188,266],{},[339,18190,1784],{},[637,18192,649],{},[171,18194,18195],{"encoding":173},"x = 1",[148,18197,18199,18217],{"className":18198,"ariaHidden":179},[178],[148,18200,18202,18205,18208,18211,18214],{"className":18201},[183],[148,18203],{"className":18204,"style":278},[187],[148,18206,266],{"className":18207},[192,193],[148,18209],{"className":18210,"style":2083},[373],[148,18212,1784],{"className":18213},[2087],[148,18215],{"className":18216,"style":2083},[373],[148,18218,18220,18223],{"className":18219},[183],[148,18221],{"className":18222,"style":856},[187],[148,18224,649],{"className":18225},[192]," 代入，并把 ",[148,18228,18230,18243],{"className":18229},[151],[148,18231,18233],{"className":18232},[155],[157,18234,18235],{"xmlns":159},[161,18236,18237,18241],{},[164,18238,18239],{},[167,18240,17],{},[171,18242,17],{"encoding":173},[148,18244,18246],{"className":18245,"ariaHidden":179},[178],[148,18247,18249,18252],{"className":18248},[183],[148,18250],{"className":18251,"style":278},[187],[148,18253,17],{"className":18254},[192,193]," 替换回 ",[148,18257,18259,18285],{"className":18258},[151],[148,18260,18262],{"className":18261},[155],[157,18263,18264],{"xmlns":159},[161,18265,18266,18282],{},[164,18267,18268,18274,18276],{},[1209,18269,18270,18272],{},[167,18271,66],{},[637,18273,639],{},[339,18275,642],{},[1209,18277,18278,18280],{},[167,18279,15908],{},[637,18281,639],{},[171,18283,18284],{"encoding":173},"c^2 + s^2",[148,18286,18288,18332],{"className":18287,"ariaHidden":179},[178],[148,18289,18291,18294,18323,18326,18329],{"className":18290},[183],[148,18292],{"className":18293,"style":16794},[187],[148,18295,18297,18300],{"className":18296},[192],[148,18298,66],{"className":18299},[192,193],[148,18301,18303],{"className":18302},[679],[148,18304,18306],{"className":18305},[683],[148,18307,18309],{"className":18308},[688],[148,18310,18312],{"className":18311,"style":3590},[692],[148,18313,18314,18317],{"style":1250},[148,18315],{"className":18316,"style":701},[700],[148,18318,18320],{"className":18319},[705,706,707,708],[148,18321,639],{"className":18322},[192,708],[148,18324],{"className":18325,"style":729},[373],[148,18327,642],{"className":18328},[733],[148,18330],{"className":18331,"style":729},[373],[148,18333,18335,18338],{"className":18334},[183],[148,18336],{"className":18337,"style":3590},[187],[148,18339,18341,18344],{"className":18340},[192],[148,18342,15908],{"className":18343},[192,193],[148,18345,18347],{"className":18346},[679],[148,18348,18350],{"className":18349},[683],[148,18351,18353],{"className":18352},[688],[148,18354,18356],{"className":18355,"style":3590},[692],[148,18357,18358,18361],{"style":1250},[148,18359],{"className":18360,"style":701},[700],[148,18362,18364],{"className":18363},[705,706,707,708],[148,18365,639],{"className":18366},[192,708],"，得到最终的校正因子：",[148,18369,18371],{"className":18370},[1732],[148,18372,18374,18418],{"className":18373},[151],[148,18375,18377],{"className":18376},[155],[157,18378,18379],{"xmlns":159,"display":1741},[161,18380,18381,18415],{},[164,18382,18383,18389,18391],{},[1209,18384,18385,18387],{},[167,18386,266],{},[339,18388,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,18390,1784],{},[1760,18392,18393,18413],{},[164,18394,18395,18397,18399,18405,18407],{},[637,18396,15092],{},[339,18398,942],{},[1209,18400,18401,18403],{},[167,18402,66],{},[637,18404,639],{},[339,18406,942],{},[1209,18408,18409,18411],{},[167,18410,15908],{},[637,18412,639],{},[637,18414,639],{},[171,18416,18417],{"encoding":173},"x' = \\frac{3 - c^2 - s^2}{2}",[148,18419,18421,18468],{"className":18420,"ariaHidden":179},[178],[148,18422,18424,18427,18459,18462,18465],{"className":18423},[183],[148,18425],{"className":18426,"style":2028},[187],[148,18428,18430,18433],{"className":18429},[192],[148,18431,266],{"className":18432},[192,193],[148,18434,18436],{"className":18435},[679],[148,18437,18439],{"className":18438},[683],[148,18440,18442],{"className":18441},[688],[148,18443,18445],{"className":18444,"style":2028},[692],[148,18446,18447,18450],{"style":2031},[148,18448],{"className":18449,"style":701},[700],[148,18451,18453],{"className":18452},[705,706,707,708],[148,18454,18456],{"className":18455},[192,708],[148,18457,1216],{"className":18458},[192,708],[148,18460],{"className":18461,"style":2083},[373],[148,18463,1784],{"className":18464},[2087],[148,18466],{"className":18467,"style":2083},[373],[148,18469,18471,18474],{"className":18470},[183],[148,18472],{"className":18473,"style":18058},[187],[148,18475,18477,18480,18609],{"className":18476},[192],[148,18478],{"className":18479},[1169,1876],[148,18481,18483],{"className":18482},[1760],[148,18484,18486,18601],{"className":18485},[683,684],[148,18487,18489,18598],{"className":18488},[688],[148,18490,18492,18503,18511],{"className":18491,"style":18077},[692],[148,18493,18494,18497],{"style":1892},[148,18495],{"className":18496,"style":1896},[700],[148,18498,18500],{"className":18499},[192],[148,18501,639],{"className":18502},[192],[148,18504,18505,18508],{"style":1936},[148,18506],{"className":18507,"style":1896},[700],[148,18509],{"className":18510,"style":1944},[1943],[148,18512,18513,18516],{"style":1947},[148,18514],{"className":18515,"style":1896},[700],[148,18517,18519,18522,18525,18528,18531,18560,18563,18566,18569],{"className":18518},[192],[148,18520,15092],{"className":18521},[192],[148,18523],{"className":18524,"style":729},[373],[148,18526,942],{"className":18527},[733],[148,18529],{"className":18530,"style":729},[373],[148,18532,18534,18537],{"className":18533},[192],[148,18535,66],{"className":18536},[192,193],[148,18538,18540],{"className":18539},[679],[148,18541,18543],{"className":18542},[683],[148,18544,18546],{"className":18545},[688],[148,18547,18549],{"className":18548,"style":3590},[692],[148,18550,18551,18554],{"style":1250},[148,18552],{"className":18553,"style":701},[700],[148,18555,18557],{"className":18556},[705,706,707,708],[148,18558,639],{"className":18559},[192,708],[148,18561],{"className":18562,"style":729},[373],[148,18564,942],{"className":18565},[733],[148,18567],{"className":18568,"style":729},[373],[148,18570,18572,18575],{"className":18571},[192],[148,18573,15908],{"className":18574},[192,193],[148,18576,18578],{"className":18577},[679],[148,18579,18581],{"className":18580},[683],[148,18582,18584],{"className":18583},[688],[148,18585,18587],{"className":18586,"style":3590},[692],[148,18588,18589,18592],{"style":1250},[148,18590],{"className":18591,"style":701},[700],[148,18593,18595],{"className":18594},[705,706,707,708],[148,18596,639],{"className":18597},[192,708],[148,18599,716],{"className":18600},[715],[148,18602,18604],{"className":18603},[688],[148,18605,18607],{"className":18606,"style":1995},[692],[148,18608],{},[148,18610],{"className":18611},[1194,1876],[15846,18613,18614],{"id":18614},"进一步简化旋转矩阵",[13,18616,18617,18618,18657],{},"既然不用担心结果的长度（在一定范围内），还可以再走一步捷径（a1k0n 说是从研究老式 CORDIC 算法中得到的启发）。如果把 ",[148,18619,18621,18639],{"className":18620},[151],[148,18622,18624],{"className":18623},[155],[157,18625,18626],{"xmlns":159},[161,18627,18628,18636],{},[164,18629,18630,18632,18634],{},[167,18631,349],{},[339,18633,341],{},[167,18635,169],{},[171,18637,18638],{"encoding":173},"\\cos \\theta",[148,18640,18642],{"className":18641,"ariaHidden":179},[178],[148,18643,18645,18648,18651,18654],{"className":18644},[183],[148,18646],{"className":18647,"style":188},[187],[148,18649,349],{"className":18650},[369],[148,18652],{"className":18653,"style":374},[373],[148,18655,169],{"className":18656,"style":194},[192,193]," 从原始旋转矩阵中提取出来，就得到：",[148,18659,18661],{"className":18660},[1732],[148,18662,18664,18797],{"className":18663},[151],[148,18665,18667],{"className":18666},[155],[157,18668,18669],{"xmlns":159,"display":1741},[161,18670,18671,18794],{},[164,18672,18673,18705,18707,18719,18770],{},[164,18674,18675,18677,18703],{},[339,18676,15883],{"fence":179},[1745,18678,18679,18691],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,18680,18681],{},[1753,18682,18683],{},[1756,18684,18685],{"scriptlevel":1758,"displaystyle":1139},[1209,18686,18687,18689],{},[167,18688,66],{},[339,18690,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[1750,18692,18693],{},[1753,18694,18695],{},[1756,18696,18697],{"scriptlevel":1758,"displaystyle":1139},[1209,18698,18699,18701],{},[167,18700,15908],{},[339,18702,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,18704,15913],{"fence":179},[339,18706,1784],{},[1760,18708,18709,18711],{},[637,18710,649],{},[164,18712,18713,18715,18717],{},[167,18714,349],{},[339,18716,341],{},[167,18718,169],{},[164,18720,18721,18723,18768],{},[339,18722,15883],{"fence":179},[1745,18724,18725,18748],{"rowspacing":5083,"columnalign":15922,"columnspacing":5085},[1750,18726,18727,18733],{},[1753,18728,18729],{},[1756,18730,18731],{"scriptlevel":1758,"displaystyle":1139},[637,18732,649],{},[1753,18734,18735],{},[1756,18736,18737],{"scriptlevel":1758,"displaystyle":1139},[164,18738,18739,18741,18744,18746],{},[339,18740,942],{},[167,18742,18743],{},"tan",[339,18745,341],{},[167,18747,169],{},[1750,18749,18750,18762],{},[1753,18751,18752],{},[1756,18753,18754],{"scriptlevel":1758,"displaystyle":1139},[164,18755,18756,18758,18760],{},[167,18757,18743],{},[339,18759,341],{},[167,18761,169],{},[1753,18763,18764],{},[1756,18765,18766],{"scriptlevel":1758,"displaystyle":1139},[637,18767,649],{},[339,18769,15913],{"fence":179},[164,18771,18772,18774,18792],{},[339,18773,15883],{"fence":179},[1745,18775,18776,18784],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,18777,18778],{},[1753,18779,18780],{},[1756,18781,18782],{"scriptlevel":1758,"displaystyle":1139},[167,18783,66],{},[1750,18785,18786],{},[1753,18787,18788],{},[1756,18789,18790],{"scriptlevel":1758,"displaystyle":1139},[167,18791,15908],{},[339,18793,15913],{"fence":179},[171,18795,18796],{"encoding":173},"\\begin{bmatrix}\nc' \\\\\ns'\n\\end{bmatrix}\n=\n\\frac{1}{\\cos \\theta}\n\\begin{bmatrix}\n1 & -\\tan \\theta \\\\\n\\tan \\theta & 1\n\\end{bmatrix}\n\\begin{bmatrix}\nc \\\\\ns\n\\end{bmatrix}",[148,18798,18800,18939],{"className":18799,"ariaHidden":179},[178],[148,18801,18803,18806,18930,18933,18936],{"className":18802},[183],[148,18804],{"className":18805,"style":2655},[187],[148,18807,18809,18815,18924],{"className":18808},[2659],[148,18810,18812],{"className":18811,"style":2664},[1169,2663],[148,18813,15883],{"className":18814},[2668,707],[148,18816,18818],{"className":18817},[192],[148,18819,18821],{"className":18820},[1745],[148,18822,18824],{"className":18823},[5273],[148,18825,18827,18916],{"className":18826},[683,684],[148,18828,18830,18913],{"className":18829},[688],[148,18831,18833,18873],{"className":18832,"style":16042},[692],[148,18834,18835,18838],{"style":16045},[148,18836],{"className":18837,"style":1896},[700],[148,18839,18841],{"className":18840},[192],[148,18842,18844,18847],{"className":18843},[192],[148,18845,66],{"className":18846},[192,193],[148,18848,18850],{"className":18849},[679],[148,18851,18853],{"className":18852},[683],[148,18854,18856],{"className":18855},[688],[148,18857,18859],{"className":18858,"style":1229},[692],[148,18860,18861,18864],{"style":1250},[148,18862],{"className":18863,"style":701},[700],[148,18865,18867],{"className":18866},[705,706,707,708],[148,18868,18870],{"className":18869},[192,708],[148,18871,1216],{"className":18872},[192,708],[148,18874,18875,18878],{"style":16086},[148,18876],{"className":18877,"style":1896},[700],[148,18879,18881],{"className":18880},[192],[148,18882,18884,18887],{"className":18883},[192],[148,18885,15908],{"className":18886},[192,193],[148,18888,18890],{"className":18889},[679],[148,18891,18893],{"className":18892},[683],[148,18894,18896],{"className":18895},[688],[148,18897,18899],{"className":18898,"style":1229},[692],[148,18900,18901,18904],{"style":1250},[148,18902],{"className":18903,"style":701},[700],[148,18905,18907],{"className":18906},[705,706,707,708],[148,18908,18910],{"className":18909},[192,708],[148,18911,1216],{"className":18912},[192,708],[148,18914,716],{"className":18915},[715],[148,18917,18919],{"className":18918},[688],[148,18920,18922],{"className":18921,"style":16134},[692],[148,18923],{},[148,18925,18927],{"className":18926,"style":2664},[1194,2663],[148,18928,15913],{"className":18929},[2668,707],[148,18931],{"className":18932,"style":2083},[373],[148,18934,1784],{"className":18935},[2087],[148,18937],{"className":18938,"style":2083},[373],[148,18940,18942,18945,19013,19016,19151,19154],{"className":18941},[183],[148,18943],{"className":18944,"style":2655},[187],[148,18946,18948,18951,19010],{"className":18947},[192],[148,18949],{"className":18950},[1169,1876],[148,18952,18954],{"className":18953},[1760],[148,18955,18957,19002],{"className":18956},[683,684],[148,18958,18960,18999],{"className":18959},[688],[148,18961,18963,18980,18988],{"className":18962,"style":17017},[692],[148,18964,18965,18968],{"style":1892},[148,18966],{"className":18967,"style":1896},[700],[148,18969,18971,18974,18977],{"className":18970},[192],[148,18972,349],{"className":18973},[369],[148,18975],{"className":18976,"style":374},[373],[148,18978,169],{"className":18979,"style":194},[192,193],[148,18981,18982,18985],{"style":1936},[148,18983],{"className":18984,"style":1896},[700],[148,18986],{"className":18987,"style":1944},[1943],[148,18989,18990,18993],{"style":1947},[148,18991],{"className":18992,"style":1896},[700],[148,18994,18996],{"className":18995},[192],[148,18997,649],{"className":18998},[192],[148,19000,716],{"className":19001},[715],[148,19003,19005],{"className":19004},[688],[148,19006,19008],{"className":19007,"style":1995},[692],[148,19009],{},[148,19011],{"className":19012},[1194,1876],[148,19014],{"className":19015,"style":374},[373],[148,19017,19019,19025,19145],{"className":19018},[2659],[148,19020,19022],{"className":19021,"style":2664},[1169,2663],[148,19023,15883],{"className":19024},[2668,707],[148,19026,19028],{"className":19027},[192],[148,19029,19031,19082,19085,19088],{"className":19030},[1745],[148,19032,19034],{"className":19033},[5273],[148,19035,19037,19074],{"className":19036},[683,684],[148,19038,19040,19071],{"className":19039},[688],[148,19041,19043,19054],{"className":19042,"style":16042},[692],[148,19044,19045,19048],{"style":16045},[148,19046],{"className":19047,"style":1896},[700],[148,19049,19051],{"className":19050},[192],[148,19052,649],{"className":19053},[192],[148,19055,19056,19059],{"style":16086},[148,19057],{"className":19058,"style":1896},[700],[148,19060,19062,19065,19068],{"className":19061},[192],[148,19063,18743],{"className":19064},[369],[148,19066],{"className":19067,"style":374},[373],[148,19069,169],{"className":19070,"style":194},[192,193],[148,19072,716],{"className":19073},[715],[148,19075,19077],{"className":19076},[688],[148,19078,19080],{"className":19079,"style":16134},[692],[148,19081],{},[148,19083],{"className":19084,"style":5413},[5412],[148,19086],{"className":19087,"style":5413},[5412],[148,19089,19091],{"className":19090},[5273],[148,19092,19094,19137],{"className":19093},[683,684],[148,19095,19097,19134],{"className":19096},[688],[148,19098,19100,19123],{"className":19099,"style":16042},[692],[148,19101,19102,19105],{"style":16045},[148,19103],{"className":19104,"style":1896},[700],[148,19106,19108,19111,19114,19117,19120],{"className":19107},[192],[148,19109,942],{"className":19110},[192],[148,19112],{"className":19113,"style":374},[373],[148,19115,18743],{"className":19116},[369],[148,19118],{"className":19119,"style":374},[373],[148,19121,169],{"className":19122,"style":194},[192,193],[148,19124,19125,19128],{"style":16086},[148,19126],{"className":19127,"style":1896},[700],[148,19129,19131],{"className":19130},[192],[148,19132,649],{"className":19133},[192],[148,19135,716],{"className":19136},[715],[148,19138,19140],{"className":19139},[688],[148,19141,19143],{"className":19142,"style":16134},[692],[148,19144],{},[148,19146,19148],{"className":19147,"style":2664},[1194,2663],[148,19149,15913],{"className":19150},[2668,707],[148,19152],{"className":19153,"style":374},[373],[148,19155,19157,19163,19214],{"className":19156},[2659],[148,19158,19160],{"className":19159,"style":2664},[1169,2663],[148,19161,15883],{"className":19162},[2668,707],[148,19164,19166],{"className":19165},[192],[148,19167,19169],{"className":19168},[1745],[148,19170,19172],{"className":19171},[5273],[148,19173,19175,19206],{"className":19174},[683,684],[148,19176,19178,19203],{"className":19177},[688],[148,19179,19181,19192],{"className":19180,"style":16042},[692],[148,19182,19183,19186],{"style":16045},[148,19184],{"className":19185,"style":1896},[700],[148,19187,19189],{"className":19188},[192],[148,19190,66],{"className":19191},[192,193],[148,19193,19194,19197],{"style":16086},[148,19195],{"className":19196,"style":1896},[700],[148,19198,19200],{"className":19199},[192],[148,19201,15908],{"className":19202},[192,193],[148,19204,716],{"className":19205},[715],[148,19207,19209],{"className":19208},[688],[148,19210,19212],{"className":19211,"style":16134},[692],[148,19213],{},[148,19215,19217],{"className":19216,"style":2664},[1194,2663],[148,19218,15913],{"className":19219},[2668,707],[13,19221,19222],{},"这里用到了三角恒等式：",[148,19224,19226],{"className":19225},[1732],[148,19227,19229,19267],{"className":19228},[151],[148,19230,19232],{"className":19231},[155],[157,19233,19234],{"xmlns":159,"display":1741},[161,19235,19236,19264],{},[164,19237,19238,19240,19242,19244,19246],{},[167,19239,18743],{},[339,19241,341],{},[167,19243,169],{},[339,19245,1784],{},[1760,19247,19248,19256],{},[164,19249,19250,19252,19254],{},[167,19251,337],{},[339,19253,341],{},[167,19255,169],{},[164,19257,19258,19260,19262],{},[167,19259,349],{},[339,19261,341],{},[167,19263,169],{},[171,19265,19266],{"encoding":173},"\\tan \\theta = \\frac{\\sin \\theta}{\\cos \\theta}",[148,19268,19270,19294],{"className":19269,"ariaHidden":179},[178],[148,19271,19273,19276,19279,19282,19285,19288,19291],{"className":19272},[183],[148,19274],{"className":19275,"style":188},[187],[148,19277,18743],{"className":19278},[369],[148,19280],{"className":19281,"style":374},[373],[148,19283,169],{"className":19284,"style":194},[192,193],[148,19286],{"className":19287,"style":2083},[373],[148,19289,1784],{"className":19290},[2087],[148,19292],{"className":19293,"style":2083},[373],[148,19295,19297,19301],{"className":19296},[183],[148,19298],{"className":19299,"style":19300},[187],"height:2.0574em;vertical-align:-0.686em;",[148,19302,19304,19307,19373],{"className":19303},[192],[148,19305],{"className":19306},[1169,1876],[148,19308,19310],{"className":19309},[1760],[148,19311,19313,19365],{"className":19312},[683,684],[148,19314,19316,19362],{"className":19315},[688],[148,19317,19320,19337,19345],{"className":19318,"style":19319},[692],"height:1.3714em;",[148,19321,19322,19325],{"style":1892},[148,19323],{"className":19324,"style":1896},[700],[148,19326,19328,19331,19334],{"className":19327},[192],[148,19329,349],{"className":19330},[369],[148,19332],{"className":19333,"style":374},[373],[148,19335,169],{"className":19336,"style":194},[192,193],[148,19338,19339,19342],{"style":1936},[148,19340],{"className":19341,"style":1896},[700],[148,19343],{"className":19344,"style":1944},[1943],[148,19346,19347,19350],{"style":1947},[148,19348],{"className":19349,"style":1896},[700],[148,19351,19353,19356,19359],{"className":19352},[192],[148,19354,337],{"className":19355},[369],[148,19357],{"className":19358,"style":374},[373],[148,19360,169],{"className":19361,"style":194},[192,193],[148,19363,716],{"className":19364},[715],[148,19366,19368],{"className":19367},[688],[148,19369,19371],{"className":19370,"style":1995},[692],[148,19372],{},[148,19374],{"className":19375},[1194,1876],[13,19377,19378,19379,19500,19501,19504],{},"由于只处理小角度，前面的 ",[148,19380,19382,19406],{"className":19381},[151],[148,19383,19385],{"className":19384},[155],[157,19386,19387],{"xmlns":159},[161,19388,19389,19403],{},[164,19390,19391],{},[1760,19392,19393,19395],{},[637,19394,649],{},[164,19396,19397,19399,19401],{},[167,19398,349],{},[339,19400,341],{},[167,19402,169],{},[171,19404,19405],{"encoding":173},"\\frac{1}{\\cos \\theta}",[148,19407,19409],{"className":19408,"ariaHidden":179},[178],[148,19410,19412,19415],{"className":19411},[183],[148,19413],{"className":19414,"style":3641},[187],[148,19416,19418,19421,19497],{"className":19417},[192],[148,19419],{"className":19420},[1169,1876],[148,19422,19424],{"className":19423},[1760],[148,19425,19427,19489],{"className":19426},[683,684],[148,19428,19430,19486],{"className":19429},[688],[148,19431,19433,19464,19472],{"className":19432,"style":3660},[692],[148,19434,19435,19438],{"style":3663},[148,19436],{"className":19437,"style":1896},[700],[148,19439,19441],{"className":19440},[705,706,707,708],[148,19442,19444,19457,19461],{"className":19443},[192,708],[148,19445,19447,19450,19454],{"className":19446},[369,708],[148,19448,66],{"className":19449},[708],[148,19451,19453],{"className":19452},[708],"o",[148,19455,15908],{"className":19456},[708],[148,19458],{"className":19459,"style":19460},[373,708],"margin-right:0.1952em;",[148,19462,169],{"className":19463,"style":194},[192,193,708],[148,19465,19466,19469],{"style":1936},[148,19467],{"className":19468,"style":1896},[700],[148,19470],{"className":19471,"style":1944},[1943],[148,19473,19474,19477],{"style":3686},[148,19475],{"className":19476,"style":1896},[700],[148,19478,19480],{"className":19479},[705,706,707,708],[148,19481,19483],{"className":19482},[192,708],[148,19484,649],{"className":19485},[192,708],[148,19487,716],{"className":19488},[715],[148,19490,19492],{"className":19491},[688],[148,19493,19495],{"className":19494,"style":3708},[692],[148,19496],{},[148,19498],{"className":19499},[1194,1876]," 项足够接近 1，可以忽略，让后面的牛顿归一化步骤顺便修正长度误差。这样优化版中 ",[69,19502,19503],{"code":19503},"R()"," 宏的含义就清楚了：把一对表示余弦\u002F正弦的变量原地旋转一个小角度，然后把它们拉回单位圆附近。",[13,19506,19507],{},"代码顶部是这个宏定义（重新缩进后）：",[60,19509,19512],{"className":19510,"code":19511,"language":66,"meta":67},[63],"#define R(t,x,y) \\\n  f = x;       \\\n  x -= t * y;  \\\n  y += t * f;  \\\n  f = (3 - x*x - y*y) \u002F 2; \\\n  x *= f;      \\\n  y *= f;\n",[69,19513,19511],{"__ignoreMap":67},[13,19515,19516,19517,19519,19520,19522,19523,3420,19562,19564,19565,19567,19568,19570,19571,1022,19573,16505,19575,19577,19578,19580,19581,19583,19584,19586],{},"它对单位向量 ",[69,19518,1060],{"code":1060}," 做原地旋转，其中 ",[69,19521,917],{"code":917}," 是 ",[148,19524,19526,19544],{"className":19525},[151],[148,19527,19529],{"className":19528},[155],[157,19530,19531],{"xmlns":159},[161,19532,19533,19541],{},[164,19534,19535,19537,19539],{},[167,19536,18743],{},[339,19538,341],{},[167,19540,169],{},[171,19542,19543],{"encoding":173},"\\tan \\theta",[148,19545,19547],{"className":19546,"ariaHidden":179},[178],[148,19548,19550,19553,19556,19559],{"className":19549},[183],[148,19551],{"className":19552,"style":188},[187],[148,19554,18743],{"className":19555},[369],[148,19557],{"className":19558,"style":374},[373],[148,19560,169],{"className":19561,"style":194},[192,193],[69,19563,945],{"code":945}," 是临时变量；前三行对 ",[69,19566,1060],{"code":1060}," 做“矩阵乘法”。然后 ",[69,19569,945],{"code":945}," 被重用来计算长度校正，最后 ",[69,19572,266],{"code":266},[69,19574,1037],{"code":1037},[69,19576,945],{"code":945},"，把它们拉回单位圆上。有了这个操作，只需把所有角度替换成它们的正弦和余弦值，然后运行旋转算子 ",[69,19579,19503],{"code":19503}," 来代替调用 ",[69,19582,337],{"code":337}," \u002F ",[69,19585,349],{"code":349},"。代码在其他方面完全相同。",[13,19588,19589],{},[6485,19590,19591],{},"原始旋转矩阵：",[148,19593,19595],{"className":19594},[1732],[148,19596,19598,19730],{"className":19597},[151],[148,19599,19601],{"className":19600},[155],[157,19602,19603],{"xmlns":159,"display":1741},[161,19604,19605,19727],{},[164,19606,19607,19639,19641,19703],{},[164,19608,19609,19611,19637],{},[339,19610,15883],{"fence":179},[1745,19612,19613,19625],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,19614,19615],{},[1753,19616,19617],{},[1756,19618,19619],{"scriptlevel":1758,"displaystyle":1139},[1209,19620,19621,19623],{},[167,19622,66],{},[339,19624,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[1750,19626,19627],{},[1753,19628,19629],{},[1756,19630,19631],{"scriptlevel":1758,"displaystyle":1139},[1209,19632,19633,19635],{},[167,19634,15908],{},[339,19636,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,19638,15913],{"fence":179},[339,19640,1784],{},[164,19642,19643,19645,19701],{},[339,19644,15883],{"fence":179},[1745,19646,19647,19675],{"rowspacing":5083,"columnalign":15922,"columnspacing":5085},[1750,19648,19649,19661],{},[1753,19650,19651],{},[1756,19652,19653],{"scriptlevel":1758,"displaystyle":1139},[164,19654,19655,19657,19659],{},[167,19656,349],{},[339,19658,341],{},[167,19660,169],{},[1753,19662,19663],{},[1756,19664,19665],{"scriptlevel":1758,"displaystyle":1139},[164,19666,19667,19669,19671,19673],{},[339,19668,942],{},[167,19670,337],{},[339,19672,341],{},[167,19674,169],{},[1750,19676,19677,19689],{},[1753,19678,19679],{},[1756,19680,19681],{"scriptlevel":1758,"displaystyle":1139},[164,19682,19683,19685,19687],{},[167,19684,337],{},[339,19686,341],{},[167,19688,169],{},[1753,19690,19691],{},[1756,19692,19693],{"scriptlevel":1758,"displaystyle":1139},[164,19694,19695,19697,19699],{},[167,19696,349],{},[339,19698,341],{},[167,19700,169],{},[339,19702,15913],{"fence":179},[164,19704,19705,19707,19725],{},[339,19706,15883],{"fence":179},[1745,19708,19709,19717],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,19710,19711],{},[1753,19712,19713],{},[1756,19714,19715],{"scriptlevel":1758,"displaystyle":1139},[167,19716,66],{},[1750,19718,19719],{},[1753,19720,19721],{},[1756,19722,19723],{"scriptlevel":1758,"displaystyle":1139},[167,19724,15908],{},[339,19726,15913],{"fence":179},[171,19728,19729],{"encoding":173},"\\begin{bmatrix} c' \\\\ s' \\end{bmatrix} =\n\\begin{bmatrix} \\cos\\theta & -\\sin\\theta \\\\ \\sin\\theta & \\cos\\theta \\end{bmatrix}\n\\begin{bmatrix} c \\\\ s \\end{bmatrix}",[148,19731,19733,19872],{"className":19732,"ariaHidden":179},[178],[148,19734,19736,19739,19863,19866,19869],{"className":19735},[183],[148,19737],{"className":19738,"style":2655},[187],[148,19740,19742,19748,19857],{"className":19741},[2659],[148,19743,19745],{"className":19744,"style":2664},[1169,2663],[148,19746,15883],{"className":19747},[2668,707],[148,19749,19751],{"className":19750},[192],[148,19752,19754],{"className":19753},[1745],[148,19755,19757],{"className":19756},[5273],[148,19758,19760,19849],{"className":19759},[683,684],[148,19761,19763,19846],{"className":19762},[688],[148,19764,19766,19806],{"className":19765,"style":16042},[692],[148,19767,19768,19771],{"style":16045},[148,19769],{"className":19770,"style":1896},[700],[148,19772,19774],{"className":19773},[192],[148,19775,19777,19780],{"className":19776},[192],[148,19778,66],{"className":19779},[192,193],[148,19781,19783],{"className":19782},[679],[148,19784,19786],{"className":19785},[683],[148,19787,19789],{"className":19788},[688],[148,19790,19792],{"className":19791,"style":1229},[692],[148,19793,19794,19797],{"style":1250},[148,19795],{"className":19796,"style":701},[700],[148,19798,19800],{"className":19799},[705,706,707,708],[148,19801,19803],{"className":19802},[192,708],[148,19804,1216],{"className":19805},[192,708],[148,19807,19808,19811],{"style":16086},[148,19809],{"className":19810,"style":1896},[700],[148,19812,19814],{"className":19813},[192],[148,19815,19817,19820],{"className":19816},[192],[148,19818,15908],{"className":19819},[192,193],[148,19821,19823],{"className":19822},[679],[148,19824,19826],{"className":19825},[683],[148,19827,19829],{"className":19828},[688],[148,19830,19832],{"className":19831,"style":1229},[692],[148,19833,19834,19837],{"style":1250},[148,19835],{"className":19836,"style":701},[700],[148,19838,19840],{"className":19839},[705,706,707,708],[148,19841,19843],{"className":19842},[192,708],[148,19844,1216],{"className":19845},[192,708],[148,19847,716],{"className":19848},[715],[148,19850,19852],{"className":19851},[688],[148,19853,19855],{"className":19854,"style":16134},[692],[148,19856],{},[148,19858,19860],{"className":19859,"style":2664},[1194,2663],[148,19861,15913],{"className":19862},[2668,707],[148,19864],{"className":19865,"style":2083},[373],[148,19867,1784],{"className":19868},[2087],[148,19870],{"className":19871,"style":2083},[373],[148,19873,19875,19878,20025,20028],{"className":19874},[183],[148,19876],{"className":19877,"style":2655},[187],[148,19879,19881,19887,20019],{"className":19880},[2659],[148,19882,19884],{"className":19883,"style":2664},[1169,2663],[148,19885,15883],{"className":19886},[2668,707],[148,19888,19890],{"className":19889},[192],[148,19891,19893,19950,19953,19956],{"className":19892},[1745],[148,19894,19896],{"className":19895},[5273],[148,19897,19899,19942],{"className":19898},[683,684],[148,19900,19902,19939],{"className":19901},[688],[148,19903,19905,19922],{"className":19904,"style":16042},[692],[148,19906,19907,19910],{"style":16045},[148,19908],{"className":19909,"style":1896},[700],[148,19911,19913,19916,19919],{"className":19912},[192],[148,19914,349],{"className":19915},[369],[148,19917],{"className":19918,"style":374},[373],[148,19920,169],{"className":19921,"style":194},[192,193],[148,19923,19924,19927],{"style":16086},[148,19925],{"className":19926,"style":1896},[700],[148,19928,19930,19933,19936],{"className":19929},[192],[148,19931,337],{"className":19932},[369],[148,19934],{"className":19935,"style":374},[373],[148,19937,169],{"className":19938,"style":194},[192,193],[148,19940,716],{"className":19941},[715],[148,19943,19945],{"className":19944},[688],[148,19946,19948],{"className":19947,"style":16134},[692],[148,19949],{},[148,19951],{"className":19952,"style":5413},[5412],[148,19954],{"className":19955,"style":5413},[5412],[148,19957,19959],{"className":19958},[5273],[148,19960,19962,20011],{"className":19961},[683,684],[148,19963,19965,20008],{"className":19964},[688],[148,19966,19968,19991],{"className":19967,"style":16042},[692],[148,19969,19970,19973],{"style":16045},[148,19971],{"className":19972,"style":1896},[700],[148,19974,19976,19979,19982,19985,19988],{"className":19975},[192],[148,19977,942],{"className":19978},[192],[148,19980],{"className":19981,"style":374},[373],[148,19983,337],{"className":19984},[369],[148,19986],{"className":19987,"style":374},[373],[148,19989,169],{"className":19990,"style":194},[192,193],[148,19992,19993,19996],{"style":16086},[148,19994],{"className":19995,"style":1896},[700],[148,19997,19999,20002,20005],{"className":19998},[192],[148,20000,349],{"className":20001},[369],[148,20003],{"className":20004,"style":374},[373],[148,20006,169],{"className":20007,"style":194},[192,193],[148,20009,716],{"className":20010},[715],[148,20012,20014],{"className":20013},[688],[148,20015,20017],{"className":20016,"style":16134},[692],[148,20018],{},[148,20020,20022],{"className":20021,"style":2664},[1194,2663],[148,20023,15913],{"className":20024},[2668,707],[148,20026],{"className":20027,"style":374},[373],[148,20029,20031,20037,20088],{"className":20030},[2659],[148,20032,20034],{"className":20033,"style":2664},[1169,2663],[148,20035,15883],{"className":20036},[2668,707],[148,20038,20040],{"className":20039},[192],[148,20041,20043],{"className":20042},[1745],[148,20044,20046],{"className":20045},[5273],[148,20047,20049,20080],{"className":20048},[683,684],[148,20050,20052,20077],{"className":20051},[688],[148,20053,20055,20066],{"className":20054,"style":16042},[692],[148,20056,20057,20060],{"style":16045},[148,20058],{"className":20059,"style":1896},[700],[148,20061,20063],{"className":20062},[192],[148,20064,66],{"className":20065},[192,193],[148,20067,20068,20071],{"style":16086},[148,20069],{"className":20070,"style":1896},[700],[148,20072,20074],{"className":20073},[192],[148,20075,15908],{"className":20076},[192,193],[148,20078,716],{"className":20079},[715],[148,20081,20083],{"className":20082},[688],[148,20084,20086],{"className":20085,"style":16134},[692],[148,20087],{},[148,20089,20091],{"className":20090,"style":2664},[1194,2663],[148,20092,15913],{"className":20093},[2668,707],[13,20095,20096],{},[6485,20097,20098],{},"近似旋转（小角度）：",[148,20100,20102],{"className":20101},[1732],[148,20103,20105,20216],{"className":20104},[151],[148,20106,20108],{"className":20107},[155],[157,20109,20110],{"xmlns":159,"display":1741},[161,20111,20112,20213],{},[164,20113,20114,20146,20149,20189],{},[164,20115,20116,20118,20144],{},[339,20117,15883],{"fence":179},[1745,20119,20120,20132],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,20121,20122],{},[1753,20123,20124],{},[1756,20125,20126],{"scriptlevel":1758,"displaystyle":1139},[1209,20127,20128,20130],{},[167,20129,66],{},[339,20131,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[1750,20133,20134],{},[1753,20135,20136],{},[1756,20137,20138],{"scriptlevel":1758,"displaystyle":1139},[1209,20139,20140,20142],{},[167,20141,15908],{},[339,20143,1216],{"mathvariant":886,"lspace":1215,"rspace":1215},[339,20145,15913],{"fence":179},[339,20147,20148],{},"≈",[164,20150,20151,20153,20187],{},[339,20152,15883],{"fence":179},[1745,20154,20155,20173],{"rowspacing":5083,"columnalign":15922,"columnspacing":5085},[1750,20156,20157,20163],{},[1753,20158,20159],{},[1756,20160,20161],{"scriptlevel":1758,"displaystyle":1139},[637,20162,649],{},[1753,20164,20165],{},[1756,20166,20167],{"scriptlevel":1758,"displaystyle":1139},[164,20168,20169,20171],{},[339,20170,942],{},[167,20172,917],{},[1750,20174,20175,20181],{},[1753,20176,20177],{},[1756,20178,20179],{"scriptlevel":1758,"displaystyle":1139},[167,20180,917],{},[1753,20182,20183],{},[1756,20184,20185],{"scriptlevel":1758,"displaystyle":1139},[637,20186,649],{},[339,20188,15913],{"fence":179},[164,20190,20191,20193,20211],{},[339,20192,15883],{"fence":179},[1745,20194,20195,20203],{"rowspacing":5083,"columnalign":9271,"columnspacing":5085},[1750,20196,20197],{},[1753,20198,20199],{},[1756,20200,20201],{"scriptlevel":1758,"displaystyle":1139},[167,20202,66],{},[1750,20204,20205],{},[1753,20206,20207],{},[1756,20208,20209],{"scriptlevel":1758,"displaystyle":1139},[167,20210,15908],{},[339,20212,15913],{"fence":179},[171,20214,20215],{"encoding":173},"\\begin{bmatrix} c' \\\\ s' \\end{bmatrix} \\approx\n\\begin{bmatrix} 1 & -t \\\\ t & 1 \\end{bmatrix}\n\\begin{bmatrix} c \\\\ s \\end{bmatrix}",[148,20217,20219,20358],{"className":20218,"ariaHidden":179},[178],[148,20220,20222,20225,20349,20352,20355],{"className":20221},[183],[148,20223],{"className":20224,"style":2655},[187],[148,20226,20228,20234,20343],{"className":20227},[2659],[148,20229,20231],{"className":20230,"style":2664},[1169,2663],[148,20232,15883],{"className":20233},[2668,707],[148,20235,20237],{"className":20236},[192],[148,20238,20240],{"className":20239},[1745],[148,20241,20243],{"className":20242},[5273],[148,20244,20246,20335],{"className":20245},[683,684],[148,20247,20249,20332],{"className":20248},[688],[148,20250,20252,20292],{"className":20251,"style":16042},[692],[148,20253,20254,20257],{"style":16045},[148,20255],{"className":20256,"style":1896},[700],[148,20258,20260],{"className":20259},[192],[148,20261,20263,20266],{"className":20262},[192],[148,20264,66],{"className":20265},[192,193],[148,20267,20269],{"className":20268},[679],[148,20270,20272],{"className":20271},[683],[148,20273,20275],{"className":20274},[688],[148,20276,20278],{"className":20277,"style":1229},[692],[148,20279,20280,20283],{"style":1250},[148,20281],{"className":20282,"style":701},[700],[148,20284,20286],{"className":20285},[705,706,707,708],[148,20287,20289],{"className":20288},[192,708],[148,20290,1216],{"className":20291},[192,708],[148,20293,20294,20297],{"style":16086},[148,20295],{"className":20296,"style":1896},[700],[148,20298,20300],{"className":20299},[192],[148,20301,20303,20306],{"className":20302},[192],[148,20304,15908],{"className":20305},[192,193],[148,20307,20309],{"className":20308},[679],[148,20310,20312],{"className":20311},[683],[148,20313,20315],{"className":20314},[688],[148,20316,20318],{"className":20317,"style":1229},[692],[148,20319,20320,20323],{"style":1250},[148,20321],{"className":20322,"style":701},[700],[148,20324,20326],{"className":20325},[705,706,707,708],[148,20327,20329],{"className":20328},[192,708],[148,20330,1216],{"className":20331},[192,708],[148,20333,716],{"className":20334},[715],[148,20336,20338],{"className":20337},[688],[148,20339,20341],{"className":20340,"style":16134},[692],[148,20342],{},[148,20344,20346],{"className":20345,"style":2664},[1194,2663],[148,20347,15913],{"className":20348},[2668,707],[148,20350],{"className":20351,"style":2083},[373],[148,20353,20148],{"className":20354},[2087],[148,20356],{"className":20357,"style":2083},[373],[148,20359,20361,20364,20484,20487],{"className":20360},[183],[148,20362],{"className":20363,"style":2655},[187],[148,20365,20367,20373,20478],{"className":20366},[2659],[148,20368,20370],{"className":20369,"style":2664},[1169,2663],[148,20371,15883],{"className":20372},[2668,707],[148,20374,20376],{"className":20375},[192],[148,20377,20379,20424,20427,20430],{"className":20378},[1745],[148,20380,20382],{"className":20381},[5273],[148,20383,20385,20416],{"className":20384},[683,684],[148,20386,20388,20413],{"className":20387},[688],[148,20389,20391,20402],{"className":20390,"style":16042},[692],[148,20392,20393,20396],{"style":16045},[148,20394],{"className":20395,"style":1896},[700],[148,20397,20399],{"className":20398},[192],[148,20400,649],{"className":20401},[192],[148,20403,20404,20407],{"style":16086},[148,20405],{"className":20406,"style":1896},[700],[148,20408,20410],{"className":20409},[192],[148,20411,917],{"className":20412},[192,193],[148,20414,716],{"className":20415},[715],[148,20417,20419],{"className":20418},[688],[148,20420,20422],{"className":20421,"style":16134},[692],[148,20423],{},[148,20425],{"className":20426,"style":5413},[5412],[148,20428],{"className":20429,"style":5413},[5412],[148,20431,20433],{"className":20432},[5273],[148,20434,20436,20470],{"className":20435},[683,684],[148,20437,20439,20467],{"className":20438},[688],[148,20440,20442,20456],{"className":20441,"style":16042},[692],[148,20443,20444,20447],{"style":16045},[148,20445],{"className":20446,"style":1896},[700],[148,20448,20450,20453],{"className":20449},[192],[148,20451,942],{"className":20452},[192],[148,20454,917],{"className":20455},[192,193],[148,20457,20458,20461],{"style":16086},[148,20459],{"className":20460,"style":1896},[700],[148,20462,20464],{"className":20463},[192],[148,20465,649],{"className":20466},[192],[148,20468,716],{"className":20469},[715],[148,20471,20473],{"className":20472},[688],[148,20474,20476],{"className":20475,"style":16134},[692],[148,20477],{},[148,20479,20481],{"className":20480,"style":2664},[1194,2663],[148,20482,15913],{"className":20483},[2668,707],[148,20485],{"className":20486,"style":374},[373],[148,20488,20490,20496,20547],{"className":20489},[2659],[148,20491,20493],{"className":20492,"style":2664},[1169,2663],[148,20494,15883],{"className":20495},[2668,707],[148,20497,20499],{"className":20498},[192],[148,20500,20502],{"className":20501},[1745],[148,20503,20505],{"className":20504},[5273],[148,20506,20508,20539],{"className":20507},[683,684],[148,20509,20511,20536],{"className":20510},[688],[148,20512,20514,20525],{"className":20513,"style":16042},[692],[148,20515,20516,20519],{"style":16045},[148,20517],{"className":20518,"style":1896},[700],[148,20520,20522],{"className":20521},[192],[148,20523,66],{"className":20524},[192,193],[148,20526,20527,20530],{"style":16086},[148,20528],{"className":20529,"style":1896},[700],[148,20531,20533],{"className":20532},[192],[148,20534,15908],{"className":20535},[192,193],[148,20537,716],{"className":20538},[715],[148,20540,20542],{"className":20541},[688],[148,20543,20545],{"className":20544,"style":16134},[692],[148,20546],{},[148,20548,20550],{"className":20549,"style":2664},[1194,2663],[148,20551,15913],{"className":20552},[2668,707],[13,20554,20555,20556,20650],{},"其中 ",[148,20557,20559,20589],{"className":20558},[151],[148,20560,20562],{"className":20561},[155],[157,20563,20564],{"xmlns":159},[161,20565,20566,20586],{},[164,20567,20568,20570,20572,20574,20576,20578,20580,20582,20584],{},[167,20569,917],{},[339,20571,1784],{},[167,20573,18743],{},[339,20575,341],{},[167,20577,169],{},[339,20579,20148],{},[167,20581,337],{},[339,20583,341],{},[167,20585,169],{},[171,20587,20588],{"encoding":173},"t = \\tan\\theta \\approx \\sin\\theta",[148,20590,20592,20611,20635],{"className":20591,"ariaHidden":179},[178],[148,20593,20595,20599,20602,20605,20608],{"className":20594},[183],[148,20596],{"className":20597,"style":20598},[187],"height:0.6151em;",[148,20600,917],{"className":20601},[192,193],[148,20603],{"className":20604,"style":2083},[373],[148,20606,1784],{"className":20607},[2087],[148,20609],{"className":20610,"style":2083},[373],[148,20612,20614,20617,20620,20623,20626,20629,20632],{"className":20613},[183],[148,20615],{"className":20616,"style":188},[187],[148,20618,18743],{"className":20619},[369],[148,20621],{"className":20622,"style":374},[373],[148,20624,169],{"className":20625,"style":194},[192,193],[148,20627],{"className":20628,"style":2083},[373],[148,20630,20148],{"className":20631},[2087],[148,20633],{"className":20634,"style":2083},[373],[148,20636,20638,20641,20644,20647],{"className":20637},[183],[148,20639],{"className":20640,"style":188},[187],[148,20642,337],{"className":20643},[369],[148,20645],{"className":20646,"style":374},[373],[148,20648,169],{"className":20649,"style":194},[192,193],"（小角度时）。",[13,20652,20653],{},[6485,20654,20655],{},"归一化修正：",[148,20657,20659],{"className":20658},[1732],[148,20660,20662,20702],{"className":20661},[151],[148,20663,20665],{"className":20664},[155],[157,20666,20667],{"xmlns":159,"display":1741},[161,20668,20669,20699],{},[164,20670,20671,20673,20675],{},[167,20672,945],{},[339,20674,1784],{},[1760,20676,20677,20697],{},[164,20678,20679,20681,20683,20689,20691],{},[637,20680,15092],{},[339,20682,942],{},[1209,20684,20685,20687],{},[167,20686,66],{},[637,20688,639],{},[339,20690,942],{},[1209,20692,20693,20695],{},[167,20694,15908],{},[637,20696,639],{},[637,20698,639],{},[171,20700,20701],{"encoding":173},"f = \\frac{3 - c^2 - s^2}{2}",[148,20703,20705,20723],{"className":20704,"ariaHidden":179},[178],[148,20706,20708,20711,20714,20717,20720],{"className":20707},[183],[148,20709],{"className":20710,"style":233},[187],[148,20712,945],{"className":20713,"style":989},[192,193],[148,20715],{"className":20716,"style":2083},[373],[148,20718,1784],{"className":20719},[2087],[148,20721],{"className":20722,"style":2083},[373],[148,20724,20726,20729],{"className":20725},[183],[148,20727],{"className":20728,"style":18058},[187],[148,20730,20732,20735,20864],{"className":20731},[192],[148,20733],{"className":20734},[1169,1876],[148,20736,20738],{"className":20737},[1760],[148,20739,20741,20856],{"className":20740},[683,684],[148,20742,20744,20853],{"className":20743},[688],[148,20745,20747,20758,20766],{"className":20746,"style":18077},[692],[148,20748,20749,20752],{"style":1892},[148,20750],{"className":20751,"style":1896},[700],[148,20753,20755],{"className":20754},[192],[148,20756,639],{"className":20757},[192],[148,20759,20760,20763],{"style":1936},[148,20761],{"className":20762,"style":1896},[700],[148,20764],{"className":20765,"style":1944},[1943],[148,20767,20768,20771],{"style":1947},[148,20769],{"className":20770,"style":1896},[700],[148,20772,20774,20777,20780,20783,20786,20815,20818,20821,20824],{"className":20773},[192],[148,20775,15092],{"className":20776},[192],[148,20778],{"className":20779,"style":729},[373],[148,20781,942],{"className":20782},[733],[148,20784],{"className":20785,"style":729},[373],[148,20787,20789,20792],{"className":20788},[192],[148,20790,66],{"className":20791},[192,193],[148,20793,20795],{"className":20794},[679],[148,20796,20798],{"className":20797},[683],[148,20799,20801],{"className":20800},[688],[148,20802,20804],{"className":20803,"style":3590},[692],[148,20805,20806,20809],{"style":1250},[148,20807],{"className":20808,"style":701},[700],[148,20810,20812],{"className":20811},[705,706,707,708],[148,20813,639],{"className":20814},[192,708],[148,20816],{"className":20817,"style":729},[373],[148,20819,942],{"className":20820},[733],[148,20822],{"className":20823,"style":729},[373],[148,20825,20827,20830],{"className":20826},[192],[148,20828,15908],{"className":20829},[192,193],[148,20831,20833],{"className":20832},[679],[148,20834,20836],{"className":20835},[683],[148,20837,20839],{"className":20838},[688],[148,20840,20842],{"className":20841,"style":3590},[692],[148,20843,20844,20847],{"style":1250},[148,20845],{"className":20846,"style":701},[700],[148,20848,20850],{"className":20849},[705,706,707,708],[148,20851,639],{"className":20852},[192,708],[148,20854,716],{"className":20855},[715],[148,20857,20859],{"className":20858},[688],[148,20860,20862],{"className":20861,"style":1995},[692],[148,20863],{},[148,20865],{"className":20866},[1194,1876],[13,20868,20869],{},"这一步牛顿迭代将向量拉回单位圆附近。",[15846,20871,20872],{"id":20872},"去掉浮点",[13,20874,20875],{},"完全可以用同样的思路配合整数定点运算，不使用任何浮点运算。a1k0n 用 10 位精度重做了所有数学，得到了以下 C 代码，在能做 32 位乘法、有约 4KB 可用 RAM 的嵌入式设备上运行良好：",[89,20877],{"code":20878},"gcc -std=c89 -w donut_fixed.c -o donut",[93,20880,20881],{"type":95},[13,20882,20883,20884,1022,20887,20890,20891,20983,20984,21076],{},"整数定点版使用 10 位精度（1024 = 2^10），所有三角函数值和坐标都用整数表示。选择 10 位是因为它在 16 位整数范围内留有足够余量（乘法结果不会溢出 32 位），同时 ",[69,20885,20886],{"code":20886},">> 10",[69,20888,20889],{"code":20889},">> 11"," 对应除以 1024 和 2048，正好覆盖代码中 ",[148,20892,20894,20916],{"className":20893},[151],[148,20895,20897],{"className":20896},[155],[157,20898,20899],{"xmlns":159},[161,20900,20901,20913],{},[164,20902,20903,20909,20911],{},[631,20904,20905,20907],{},[167,20906,635],{},[637,20908,649],{},[339,20910,1784],{},[637,20912,649],{},[171,20914,20915],{"encoding":173},"R_1=1",[148,20917,20919,20974],{"className":20918,"ariaHidden":179},[178],[148,20920,20922,20925,20965,20968,20971],{"className":20921},[183],[148,20923],{"className":20924,"style":668},[187],[148,20926,20928,20931],{"className":20927},[192],[148,20929,635],{"className":20930,"style":675},[192,193],[148,20932,20934],{"className":20933},[679],[148,20935,20937,20957],{"className":20936},[683,684],[148,20938,20940,20954],{"className":20939},[688],[148,20941,20943],{"className":20942,"style":693},[692],[148,20944,20945,20948],{"style":696},[148,20946],{"className":20947,"style":701},[700],[148,20949,20951],{"className":20950},[705,706,707,708],[148,20952,649],{"className":20953},[192,708],[148,20955,716],{"className":20956},[715],[148,20958,20960],{"className":20959},[688],[148,20961,20963],{"className":20962,"style":723},[692],[148,20964],{},[148,20966],{"className":20967,"style":2083},[373],[148,20969,1784],{"className":20970},[2087],[148,20972],{"className":20973,"style":2083},[373],[148,20975,20977,20980],{"className":20976},[183],[148,20978],{"className":20979,"style":856},[187],[148,20981,649],{"className":20982},[192],"（即 1024）和 ",[148,20985,20987,21009],{"className":20986},[151],[148,20988,20990],{"className":20989},[155],[157,20991,20992],{"xmlns":159},[161,20993,20994,21006],{},[164,20995,20996,21002,21004],{},[631,20997,20998,21000],{},[167,20999,635],{},[637,21001,639],{},[339,21003,1784],{},[637,21005,639],{},[171,21007,21008],{"encoding":173},"R_2=2",[148,21010,21012,21067],{"className":21011,"ariaHidden":179},[178],[148,21013,21015,21018,21058,21061,21064],{"className":21014},[183],[148,21016],{"className":21017,"style":668},[187],[148,21019,21021,21024],{"className":21020},[192],[148,21022,635],{"className":21023,"style":675},[192,193],[148,21025,21027],{"className":21026},[679],[148,21028,21030,21050],{"className":21029},[683,684],[148,21031,21033,21047],{"className":21032},[688],[148,21034,21036],{"className":21035,"style":693},[692],[148,21037,21038,21041],{"style":696},[148,21039],{"className":21040,"style":701},[700],[148,21042,21044],{"className":21043},[705,706,707,708],[148,21045,639],{"className":21046},[192,708],[148,21048,716],{"className":21049},[715],[148,21051,21053],{"className":21052},[688],[148,21054,21056],{"className":21055,"style":723},[692],[148,21057],{},[148,21059],{"className":21060,"style":2083},[373],[148,21062,1784],{"className":21063},[2087],[148,21065],{"className":21066,"style":2083},[373],[148,21068,21070,21073],{"className":21069},[183],[148,21071],{"className":21072,"style":856},[187],[148,21074,639],{"className":21075},[192],"（即 2048）的缩放。",[60,21078,21082],{"className":21079,"code":21080,"filename":21081,"language":66,"meta":67},[63],"#include \u003Cstdint.h>\n#include \u003Cstdio.h>\n#include \u003Cstring.h>\n#include \u003Cunistd.h>\n\n#define R(mul,shift,x,y) \\\n  _=x; \\\n  x -= mul*y >> shift; \\\n  y += mul*_ >> shift; \\\n  _ = 3145728-x*x-y*y >> 11; \\\n  x = x*_ >> 10; \\\n  y = y*_ >> 10;\n\nint8_t b[1760], z[1760];\nvoid main() {\n  int sA = 1024, cA = 0, sB = 1024, cB = 0, _;\n  for (;;) {\n    memset(b, 32, 1760);    \u002F\u002F text buffer\n    memset(z, 127, 1760);   \u002F\u002F z buffer\n    int sj = 0, cj = 1024;\n    for (int j = 0; j \u003C 90; j++) {\n      int si = 0, ci = 1024; \u002F\u002F sine and cosine of angle i\n      for (int i = 0; i \u003C 324; i++) {\n        int R1 = 1, R2 = 2048, K2 = 5120 * 1024;\n        int x0 = R1*cj + R2,\n            x1 = ci*x0 >> 10,\n            x2 = cA*sj >> 10,\n            x3 = si*x0 >> 10,\n            x4 = R1*x2 - (sA*x3 >> 10),\n            x5 = sA*sj >> 10,\n            x6 = K2 + R1*1024*x5 + cA*x3,\n            x7 = cj*si >> 10,\n            x = 40 + 30*(cB*x1 - sB*x4) \u002F x6,\n            y = 12 + 15*(cB*x4 + sB*x1) \u002F x6,\n            N = (-cA*x7 - cB*((-sA*x7 >> 10) + x2)\n                 - ci*(cj*sB >> 10) >> 10) - x5 >> 7;\n        int o = x + 80*y;\n        int8_t zz = (x6-K2) >> 15;\n        if (22>y && y>0 && x>0 && 80>x && zz \u003C z[o]) {\n          z[o] = zz;\n          b[o] = \".,-~:;=!*#$@\"[N>0?N:0];\n        }\n        R(5, 8, ci, si)   \u002F\u002F rotate i\n      }\n      R(9, 7, cj, sj)     \u002F\u002F rotate j\n    }\n    for (int k = 0; 1761>k; k++)\n      putchar(k%80 ? b[k] : 10);\n    R(5, 7, cA, sA);\n    R(5, 8, cB, sB);\n    usleep(15000);\n    printf(\"\\x1b[23A\");\n  }\n}\n","donut_fixed.c",[69,21083,21080],{"__ignoreMap":67},[13,21085,21086],{},"输出基本一样。",[13,21088,21089,21090,21093,21094,21096,21097,21132,21133,21235],{},"注意：定点版中 Z 缓冲的比较方向变成了 ",[69,21091,21092],{"code":21092},"zz \u003C z[o]","，与浮点版的 ",[69,21095,4284],{"code":4284}," 相反。这是因为浮点版存的是 ",[148,21098,21100,21117],{"className":21099},[151],[148,21101,21103],{"className":21102},[155],[157,21104,21105],{"xmlns":159},[161,21106,21107,21115],{},[164,21108,21109,21111,21113],{},[637,21110,649],{},[167,21112,887],{"mathvariant":886},[167,21114,297],{},[171,21116,892],{"encoding":173},[148,21118,21120],{"className":21119,"ariaHidden":179},[178],[148,21121,21123,21126,21129],{"className":21122},[183],[148,21124],{"className":21125,"style":902},[187],[148,21127,906],{"className":21128},[192],[148,21130,297],{"className":21131,"style":312},[192,193],"（越大越近），而定点版存的是 ",[148,21134,21136,21162],{"className":21135},[151],[148,21137,21139],{"className":21138},[155],[157,21140,21141],{"xmlns":159},[161,21142,21143,21159],{},[164,21144,21145,21147,21149,21151,21157],{},[339,21146,1140],{"stretchy":1139},[167,21148,297],{},[339,21150,942],{},[631,21152,21153,21155],{},[167,21154,2422],{},[637,21156,639],{},[339,21158,1153],{"stretchy":1139},[171,21160,21161],{"encoding":173},"(z - K_2)",[148,21163,21165,21186],{"className":21164,"ariaHidden":179},[178],[148,21166,21168,21171,21174,21177,21180,21183],{"className":21167},[183],[148,21169],{"className":21170,"style":902},[187],[148,21172,1140],{"className":21173},[1169],[148,21175,297],{"className":21176,"style":312},[192,193],[148,21178],{"className":21179,"style":729},[373],[148,21181,942],{"className":21182},[733],[148,21184],{"className":21185,"style":729},[373],[148,21187,21189,21192,21232],{"className":21188},[183],[148,21190],{"className":21191,"style":902},[187],[148,21193,21195,21198],{"className":21194},[192],[148,21196,2422],{"className":21197,"style":2443},[192,193],[148,21199,21201],{"className":21200},[679],[148,21202,21204,21224],{"className":21203},[683,684],[148,21205,21207,21221],{"className":21206},[688],[148,21208,21210],{"className":21209,"style":693},[692],[148,21211,21212,21215],{"style":2458},[148,21213],{"className":21214,"style":701},[700],[148,21216,21218],{"className":21217},[705,706,707,708],[148,21219,639],{"className":21220},[192,708],[148,21222,716],{"className":21223},[715],[148,21225,21227],{"className":21226},[688],[148,21228,21230],{"className":21229,"style":723},[692],[148,21231],{},[148,21233,1153],{"className":21234},[1194]," 右移后的近似值（越小越近）。",[1111,21237,21239],{"id":21238},"增强版美化甜甜圈一个老派-cg-经典","增强版：美化甜甜圈——一个老派 CG 经典",[13,21241,21242,21243,21247,21248,21251],{},"a1k0n 在 2006 年 9 月写了",[17,21244,21246],{"href":30,"rel":21245},[21],"第二版","标题是 ",[40,21249,21250],{},"Embellishing the donut: an old-school CG cliche","。其中有一个变体（滚动文字写的是 \"IOCCC 2006\"）出现在了 2006 年国际混淆 C 代码大赛（IOCCC）上。",[13,21253,21254,21255,21294],{},"相比原始版本，增强版额外添加了：地面棋盘格透视（用简单的 ",[148,21256,21258,21276],{"className":21257},[151],[148,21259,21261],{"className":21260},[155],[157,21262,21263],{"xmlns":159},[161,21264,21265,21273],{},[164,21266,21267,21269,21271],{},[167,21268,266],{},[167,21270,887],{"mathvariant":886},[167,21272,1037],{},[171,21274,21275],{"encoding":173},"x\u002Fy",[148,21277,21279],{"className":21278,"ariaHidden":179},[178],[148,21280,21282,21285,21288,21291],{"className":21281},[183],[148,21283],{"className":21284,"style":902},[187],[148,21286,266],{"className":21287},[192,193],[148,21289,887],{"className":21290},[192],[148,21292,1037],{"className":21293,"style":970},[192,193]," 透视公式绘制无限延伸的地面）、散布的背景噪声，以及用压缩字符串表编码的滚动文字（如 \"IOCCC 2006\"）。亮度字符集也有所调整，引入了空白字符用于背景，使画面有了景深感。",[13,21296,21297,21298,21300],{},"编译方式和第一个一样（",[69,21299,15822],{"code":15822},"），需要 ANSI 风格的终端仿真。",[89,21302],{"code":21303},"gcc -std=c89 -w donut_enhanced.c -o donut -lm",[13,21305,21306],{},"完整代码如下：",[60,21308,21312],{"className":21309,"code":21310,"filename":21311,"language":66,"meta":67},[63],"_,x,y,o       ,N;char       b[1840]       ;p(n,c)\n{for(;n       --;x++)       c==10?y       +=80,x=\no-1:x>=       0?80>x?       c!='~'?       b[y+x]=\nc:0:0:0       ;}c(q,l       ,r,o,v)       char*l,\n       *r;{for       (;q>=0;       )q=(\"A\"       \"YLrZ^\"\n       \"w^?EX\"           \"novne\"     \"bYV\"       \"dO}LE\"\n       \"{yWlw\"      \"Jl_Ja|[ur]zovpu\"   \"\"       \"i]e|y\"\n       \"ao_Be\"   \"osmIg}r]]r]m|wkZU}{O}\"         \"xys]]\\\nx|ya|y\"        \"sm||{uel}|r{yIcsm||ya[{uE\"  \"{qY\\\nw|gGor\"      \"VrVWioriI}Qac{{BIY[sXjjsVW]aM\"  \"T\\\ntXjjss\"     \"sV_OUkRUlSiorVXp_qOM>E{BadB\"[_\u002F6  ]-\n62>>_++    %6&1?r[q]:l[q])-o;return q;}E(a){for (\n       o= x=a,y=0,_=0;1095>_;)a= \" \u003C.,`'\u002F)(\\n-\"  \"\\\\_~\"[\n       c  (12,\"!%*\u002F')#3\"  \"\"     \"+-6,8\",\"\\\"(.$\" \"01245\"\n       \" &79\",46)+14],  p(\"\"       \"#$%&'()0:439 \"[ c(10\n       , \"&(*#,.\u002F1345\" ,\"')\"       \"+%-$02\\\"! \", 44)+12]\n-34,a);  }main(k){float     A=0,B= 0,i,j,z[1840];\nputs(\"\"  \"\\x1b[2J\");;;      for(;; ){float e=sin\n(A), n=  sin(B),g=cos(      A),m=  cos(B);for(k=\n0;1840>   k;k++)y=-10-k\u002F    80   ,o=41+(k%80-40\n       )* 1.3\u002Fy+n,N=A-100.0\u002Fy,b[k]=\".#\"[o+N&1],  z[k]=0;\n       E(  80-(int)(9*B)%250);for(j=0;6.28>j;j   +=0.07)\n       for  (i=0;6.28>i;i+=0.02){float c=sin(    i),  d=\n       cos(  j),f=sin(j),h=d+2,D=15\u002F(c*h*e+f     *g+5),l\n=cos(i)        ,t=c*h*g-f*e;x=40+2*D*(l*h*  m-t*n\n),y=12+       D  *(l*h*n+t*m),o=x+80*y,N  =8*((f*\ne-c*d*g       )*m   -c*d*e-f*g-l        *d*n)     ;if(D>z\n[o])z[o       ]=D,b[     o]=\" .\"          \".,,-+\"\n       \"+=#$@\"       [N>0?N:       0];;;;}       printf(\n       \"%c[H\",       27);for       (k=1;18       *100+41\n       >k;k++)       putchar       (k%80?b       [k]:10)\n       ;;;;A+=       0.053;;       B+=0.03       ;;;;;}}\n","donut_enhanced.c",[69,21313,21310],{"__ignoreMap":67},[13,21315,21316],{},"运行效果：",[80,21318],{":height":82,"caption":21319,"src":21320},"2.0 运行结果","https:\u002F\u002Fbu.dusays.com\u002F2026\u002F06\u002F09\u002F6a27fb11c5786.gif",[93,21322,21324],{"type":21323},"warning",[13,21325,21326],{},"需要支持 ANSI\u002FVT100 转义序列的终端，Windows 10+ 的 CMD\u002FPowerShell 默认已支持。如果显示乱码，需要在终端属性里开启「启用虚拟终端处理」。",{"title":67,"searchDepth":21328,"depth":21328,"links":21329},4,[21330,21332,21333,21334,21335,21336,21343],{"id":1113,"depth":21331,"text":1114},2,{"id":4293,"depth":21331,"text":4293},{"id":6637,"depth":21331,"text":6637},{"id":10739,"depth":21331,"text":10739},{"id":14456,"depth":21331,"text":14456},{"id":15811,"depth":21331,"text":15811,"children":21337},[21338,21340,21341,21342],{"id":15848,"depth":21339,"text":15848},3,{"id":16385,"depth":21339,"text":16385},{"id":18614,"depth":21339,"text":18614},{"id":20872,"depth":21339,"text":20872},{"id":21238,"depth":21331,"text":21239},[21345],"开发","2026-06-09 21:19:49","解析 a1k0n 的 donut.c，透视投影、环面参数化、光照与 Z 缓冲。",false,"md",null,{"slots":21352},{"copyright":21353},{"props":21354,"type":7,"value":21356},{"title":21355},"翻译整理文章",[21357],[13,21358,21359],{},"本文整理自 a1k0n (Andy Sloane) 的相关博文，仅供学习交流。",true,"\u002Fposts\u002Fe6681c2",{"text":21363,"minutes":21364,"time":21365,"words":21366},"26 min read",25.275,1516500,5055,[21368,21370,21372,21374,21376],{"title":21369,"link":19},"donut.c 是如何工作的",{"title":21371,"link":52},"混淆 C 甜甜圈",{"title":21373,"link":30},"甜甜圈增强版",{"title":21375,"link":35},"不依赖数学库的 donut.c",{"title":21377,"link":15805},"donut.js 源码",{"title":5,"description":21347},{"loc":21361},"posts\u002F2026\u002Fdonut_math",[69,21382,157],"c\u002Fc++","tech","2026-06-10 00:32:46","Kbc-9VSdme2P3Z535EkCUDLl7W8W3HrU5BDT2qwKsC4",[21387,21350],{"title":21388,"path":21389,"stem":21390,"date":21391,"type":21383,"children":-1},"如何让 AI Agent 工具帮助你清理 C 盘，让 C 盘不再报红？","\u002Fposts\u002F56015a4","posts\u002F2026\u002Fai_clean_c","2026-06-03 01:08:51",1781024081132]