Master class na "Christmas balls" na gawa sa papel gamit ang iyong sariling mga kamay. Sphere ng dalawang tatsulok

Spherical triangle at ang aplikasyon nito.

spherical triangle- isang geometric na pigura sa ibabaw ng isang globo, na nabuo sa pamamagitan ng intersection ng tatlong malalaking bilog. Tatlong malalaking bilog sa ibabaw ng isang sphere na hindi nagsalubong sa isang punto ay bumubuo ng walong spherical triangle. Ang isang spherical triangle, ang lahat ng panig nito ay mas mababa sa kalahati ng malaking bilog, ay tinatawag Euler.

Ang gilid ng isang spherical triangle ay sinusukat ng halaga ng gitnang anggulo batay dito. Ang anggulo ng isang spherical triangle ay sinusukat sa pamamagitan ng halaga ng dihedral na anggulo sa pagitan ng mga eroplano kung saan ang mga gilid ng anggulong ito ay namamalagi. Ang mga ugnayan sa pagitan ng mga elemento ng spherical triangles ay pinag-aaralan ng spherical trigonometry.

Mga katangian ng isang spherical triangle:

  1. Bilang karagdagan sa tatlong kundisyon para sa pagkakapantay-pantay ng mga tatsulok ng eroplano, ang isa pa ay totoo para sa mga spherical na tatsulok: dalawang spherical triangle ay pantay-pantay kung ang kanilang mga katumbas na anggulo ay pantay.
  2. Para sa mga gilid ng isang spherical triangle, mayroong 3 hindi pagkakapantay-pantay na tatsulok: ang bawat panig ay mas mababa sa kabuuan ng iba pang dalawang panig at mas malaki sa kanilang pagkakaiba.
  3. Ang kabuuan ng lahat ng panig a + b + c ay palaging mas mababa sa 2πR.
  4. Ang dami 2πR − (a + b + c) ay tinatawag na spherical defect
  5. Ang kabuuan ng mga anggulo ng isang spherical triangle s = α + β + γ ay palaging mas mababa sa 3π at mas malaki sa π
  6. Ang dami ay tinatawag na spherical excess o spherical excess
  7. Ang lugar ng isang spherical triangle ay tinutukoy ng formula.
  8. Hindi tulad ng flat triangle, ang spherical triangle ay maaaring magkaroon ng dalawa o kahit tatlong 90° na anggulo bawat isa.

Sa lahat ng spherical polygons, ang pinaka-interesante ay ang spherical triangle. Tatlong malalaking bilog, na nagsasalubong sa dalawang punto, ay bumubuo ng walong spherical triangle sa globo. Ang pag-alam sa mga elemento (mga gilid at anggulo) ng isa sa mga ito, maaari mong matukoy ang mga elemento ng lahat ng iba pa, samakatuwid, isaalang-alang ang ugnayan sa pagitan ng mga elemento ng isa sa kanila, ang isa kung saan ang lahat ng panig ay mas mababa sa kalahati ng malaking bilog. Ang mga gilid ng tatsulok ay sinusukat ng mga patag na anggulo ng trihedral na anggulo OABS, ang mga anggulo ng tatsulok ay sinusukat ng mga dihedral na anggulo ng parehong trihedral na anggulo, tingnan ang Fig.

Ang mga katangian ng mga spherical triangle ay naiiba sa maraming paraan mula sa mga katangian ng mga triangles sa eroplano. Kaya, sa kilalang tatlong kaso ng pagkakapantay-pantay ng mga rectilinear triangle, idinagdag ang ikaapat: dalawang triangles ABC at A`B`C` ay pantay-pantay kung ang tatlong anggulo PA = RA`, PB = PB`, PC = PC` ay pantay, ayon sa pagkakabanggit. Kaya, ang mga katulad na tatsulok ay hindi umiiral sa globo; bukod dito, sa spherical geometry ay walang konsepto ng pagkakapareho mismo, dahil walang mga pagbabagong nagbabago sa lahat ng distansya sa parehong (hindi katumbas ng 1) bilang ng beses. Ang mga tampok na ito ay nauugnay sa paglabag sa Euclidean axiom tungkol sa mga parallel na linya at likas din sa geometry ni Lobachevsky. Ang mga tatsulok na may pantay na elemento at magkaibang oryentasyon ay tinatawag na simetriko, gaya ng, halimbawa, mga tatsulok na AC`C at BCC`

Ang kabuuan ng mga anggulo ng anumang spherical triangle ay palaging mas malaki sa 180°. Ang pagkakaiba ng RA + RV + RS - p \u003d d (sinusukat sa radians) - ay isang positibong halaga at tinatawag na spherical na labis ng isang ibinigay na spherical triangle. Lugar ng isang spherical triangle: S = R2 d kung saan ang R ay ang radius ng sphere at ang d ay ang spherical na labis. Ang pormula na ito ay unang inilathala ng Dutchman na si A. Girard noong 1629 at ipinangalan sa kanya.

Kung isasaalang-alang namin ang isang diagon na may anggulo a, pagkatapos ay sa 226 = 2p/n (n ay isang integer), ang globo ay maaaring i-cut sa eksaktong n mga kopya ng naturang digon, at ang lugar ng globo ay 4pR2 = 4p sa R = 1, kaya ang lugar ng digon ay 4p/n = 2a. Ang formula na ito ay totoo rin para sa a = 2pt/n at, samakatuwid, ay totoo para sa lahat ng a. Kung ipagpapatuloy natin ang mga gilid ng spherical triangle ABC at ipahayag ang lugar ng globo sa mga tuntunin ng mga lugar ng mga diagons na nabuo sa kasong ito na may mga anggulo A, B, C at sarili nitong lugar, pagkatapos ay maaari tayong makarating sa itaas Formula ng Girard.

Sa pamamagitan ng isang spherical triangle ay nangangahulugang isang tatsulok sa ibabaw ng isang globo, na binubuo ng mga arko ng mahusay na mga bilog - iyon ay, tulad ng mga bilog, ang gitna nito ay ang sentro ng globo. Ang mga anggulo ng isang spherical triangle ay ang mga anggulo sa pagitan ng mga tangent sa mga gilid nito na iginuhit sa mga vertices nito. Tulad ng mga anggulo ng isang regular na tatsulok, saklaw sila mula 0 hanggang 180°. Hindi tulad ng isang patag na tatsulok, ang isang spherical triangle ay walang kabuuan ng mga anggulo na katumbas ng 180°, ngunit higit pa: ito ay madaling i-verify sa pamamagitan ng pagsasaalang-alang, halimbawa, isang tatsulok na nabuo ng mga arko ng dalawang meridian at ang ekwador sa isang globo : bagaman ang mga meridian ay nagtatagpo sa poste, pareho silang patayo sa ekwador, kaya ang tatsulok na ito ay may dalawang tamang anggulo!

Ang isang spherical triangle ay maaaring magkaroon ng dalawang tamang anggulo

Na ang Indian Varahamihira (ika-5-6 na siglo), ang mga Arabong matematiko at astronomo mula noong ika-9 na siglo. (Sabit ibn Korra, al-Battani), at sa mga Kanluraning mathematician, simula sa Regiomontanus (XV siglo), mayroong isang kahanga-hangang teorama sa spherical triangles sa iba't ibang formulations. Narito kung paano ito mabubuo sa modernong notasyon:

cosa = cosbcosc + sinbsinccosA. Ang spherical cosine theorem ay napakahalaga para sa parehong astronomy at heograpiya. Ang theorem na ito ay nagpapahintulot sa paggamit ng mga coordinate ng dalawang lungsod A at B upang mahanap ang distansya sa pagitan nila. Bilang karagdagan, ang spherical cosine theorem ay nakatulong sa mga mathematician sa mga Islamic na bansa sa paglutas ng isa pang praktikal na problema: sa isang lungsod na may ibinigay na mga coordinate, hanapin ang direksyon patungo sa banal na lungsod ng Mecca (bawat orthodox Muslim ay dapat magdasal ng limang beses sa isang araw sa direksyon ng Mecca) . Kapag nilutas ang problemang ito, isinasaalang-alang ang lungsod B bilang Mecca, kinakailangan upang mahanap ang anggulo A ng parehong tatsulok.

Isang pahina mula sa "Collection of Rules for the Science of Astronomy", ika-11 siglo, hindi kilala ang may-akda.

Sa astronomiya, pinapayagan ka ng spherical cosine theorem na lumipat mula sa isang coordinate system sa celestial sphere patungo sa isa pa. Tatlong ganoong sistema ang kadalasang ginagamit: sa isa, ang celestial equator ay nagsisilbing ekwador, at ang mga pole ng mundo ay nagsisilbing pole, kung saan nangyayari ang nakikitang araw-araw na pag-ikot ng mga luminaries; sa kabilang banda, ang ekwador ay ang ecliptic - ang bilog kung saan ang nakikitang paggalaw ng Araw laban sa background ng mga bituin ay nagaganap sa taon; sa ikatlo, ang papel ng ekwador ay ginagampanan ng abot-tanaw, at ang papel ng mga pole ay ginagampanan ng zenith at nadir. Sa partikular, salamat sa spherical cosine theorem, posibleng kalkulahin ang taas ng Araw sa itaas ng abot-tanaw sa iba't ibang oras at sa iba't ibang araw ng taon.

Ang mga layag sa arkitektura ay isang spherical triangle, na nagbibigay ng paglipat mula sa isang parisukat na espasyo ng simboryo patungo sa isang simboryo ng circumference. Sail, pandative (mula sa French pendentif) - bahagi ng vault, isang elemento ng istraktura ng simboryo, kung saan ginawa ang paglipat mula sa hugis-parihaba na base hanggang sa kisame ng simboryo o drum nito. Ang layag ay may hugis ng isang spherical triangle, na may tuktok nito pababa, at pinupuno ang espasyo sa pagitan ng mga arko ng tagsibol na nagkokonekta sa mga katabing haligi ng domed square. Ang mga base ng spherical triangles ng mga layag ay magkakasamang bumubuo ng isang bilog at ipinamahagi ang pagkarga ng simboryo sa kahabaan ng perimeter ng mga arko.

Dome sa mga layag pagpipinta ng layag

George Nelson

"Ang taga-disenyo ay maaaring mag-relax at magsaya; ang resulta ay maaaring maging isang biro, masaya. Ito ay kamangha-manghang kung gaano kadalas ito ay napaka makabuluhang kasiyahan. " George Nelson

Si George Nelson ay isang Amerikanong taga-disenyo, arkitekto, kritiko at teorista ng disenyo. (1908, Hartford, Connecticut - 1986, New York)

Nagdisenyo siya ng mga lighting fixture, orasan, muwebles, packaging, at nakikibahagi sa disenyo ng eksibisyon.

Ang pinakasikat na mga proyekto sa disenyo ni George Nelson ay ang mahusay na pag-istilo ng mga geometric na hugis sa diwa ng op art o geometric abstractionism.

Ang taga-disenyo ay nagtatayo ng hugis ng kanyang sikat na itim na upuan sa batayan ng isang spherical triangle, na malawakang ginagamit sa mga istrukturang arkitektura ng mga domed na istruktura. Sa partikular, sa mga simbahan ng Byzantine at Ruso, ang gayong spherical triangle ay tinatawag na "layag". Salamat sa "layag", isang maayos na paglipat mula sa suporta ng simboryo hanggang sa simboryo ay isinagawa.

George Nelson (George Harold Nelson, 1908-1986)

Pag-ukit ng Escher

Concentric spheres. 1935. End engraving 24 by 24 cm.

Apat na guwang na concentric spheres ay iluminado ng isang central light source. Ang bawat globo ay binubuo ng isang grid na nabuo sa pamamagitan ng siyam na malalaking intersecting ring; hinahati nila ang spherical surface sa 48 katulad na spherical triangles. Maurits Cornelis Escher (Dutch. Maurits Cornelis Hunyo 17, 1898, Leeuwarden, Netherlands - Marso 27, 1972, Laren, Netherlands) - Dutch graphic artist.

Application ng spherical triangle:

  1. Paggamit ng mga spherical triangle sa 3D graphics
  2. Sa astronomiya
  3. Sa heograpiya. Pinapayagan ka ng spherical triangle theorem na gamitin ang mga coordinate ng dalawang lungsod A at B upang mahanap ang distansya sa pagitan nila.
  4. Sa arkitektura
  5. Disenyo ng upuan ni George Nelson
  6. Sa pag-uukit

Spherical trigonometrya

spherical triangles. Sa ibabaw ng isang bola, ang pinakamaikling distansya sa pagitan ng dalawang puntos ay sinusukat kasama ang circumference ng isang malaking bilog, iyon ay, isang bilog na ang eroplano ay dumadaan sa gitna ng bola. Vertices ng isang spherical triangle ay ang mga intersection point ng tatlong ray na lumalabas mula sa gitna ng bola at sa spherical surface. Mga partido a, b, c ng isang spherical triangle ay ang mga anggulo sa pagitan ng mga ray na mas maliit (kung ang isa sa mga anggulong ito ay pantay, kung gayon ang spherical triangle ay bumababa sa isang kalahating bilog ng isang malaking bilog). Ang bawat panig ng tatsulok ay tumutugma sa isang arko ng isang malaking bilog sa ibabaw ng bola (tingnan ang figure).

mga sulok A, B, C spherical triangle sa magkabilang panig a, b, c ayon sa pagkakabanggit, ay, ayon sa kahulugan, ay mas maliit kaysa , ang mga anggulo sa pagitan ng mga arko ng malalaking bilog na tumutugma sa mga gilid ng tatsulok, o ang mga anggulo sa pagitan ng mga eroplano na tinukoy ng mga sinag na ito.

Spherical trigonometrya tumatalakay sa pag-aaral ng ugnayan sa pagitan ng mga gilid at anggulo ng mga spherical triangle (halimbawa, sa ibabaw ng Earth at sa celestial sphere). Gayunpaman, ang mga physicist at inhinyero sa maraming problema ay mas gustong gumamit ng mga pagbabago sa pag-ikot kaysa sa spherical trigonometry.

Mga katangian ng spherical triangles. Ang bawat gilid at anggulo ng isang spherical triangle ay, sa kahulugan, mas mababa sa .

Ang geometry sa ibabaw ng bola ay hindi Euclidean; sa bawat spherical triangle ang kabuuan ng mga gilid ay nasa pagitan ng 0 at , ang kabuuan ng mga anggulo ay nasa pagitan ng at . Sa bawat spherical triangle, ang mas malaking anggulo ay nasa tapat ng mas malaking bahagi. Ang kabuuan ng alinmang dalawang panig ay mas malaki kaysa sa ikatlong panig, ang kabuuan ng alinmang dalawang anggulo ay mas mababa sa kasama ang ikatlong anggulo.

Spherical triangle at mga pangunahing formula ng spherical trigonometry

Maraming mga problema ng astronomiya na may kaugnayan sa mga maliwanag na posisyon at paggalaw ng mga celestial na katawan ay nabawasan sa paglutas ng mga spherical triangle.

Ang isang spherical triangle ay isang figure na ABC sa ibabaw ng isang globo, na nabuo sa pamamagitan ng mga arko ng tatlong malalaking bilog (Larawan 15).

Ang mga anggulo ng isang spherical triangle ay ang mga dihedral na anggulo sa pagitan ng mga eroplano ng malalaking bilog na bumubuo sa mga gilid ng spherical triangle. Ang mga anggulong ito ay sinusukat ng mga patag na anggulo sa mga vertices ng tatsulok sa pagitan ng mga tangent sa mga gilid nito.

Karaniwang isinasaalang-alang ang mga tatsulok, ang mga anggulo at gilid nito ay mas mababa sa 180°. Para sa gayong mga spherical triangle, ang kabuuan ng mga anggulo ay palaging mas malaki sa 180° ngunit mas mababa sa 540°, at ang kabuuan ng mga gilid ay palaging mas mababa sa 360°. Ang pagkakaiba sa pagitan ng kabuuan ng tatlong anggulo ng isang spherical triangle at 180° ay tinatawag na spherical excess σ, i.e.

σ = DA + DB + DC - 180°.

Ang lugar ng isang spherical triangle s ay

Kung saan ang R ay ang radius ng globo sa ibabaw kung saan nabuo ang tatsulok.

Ang isang spherical triangle, samakatuwid, ay naiiba sa mga katangian nito mula sa isang patag, at imposibleng ilapat ang mga formula ng trigonometry dito sa isang eroplano.

Kumuha ng spherical triangle ABC (Fig. 15), na nabuo sa isang globo ng radius R at nakasentro sa punto O.

Mula sa vertex A ay iginuhit namin ang mga tangent AD at AE sa mga gilid b at c hanggang sa magsalubong sila sa mga extension ng radii OS at 0B, na nasa parehong eroplano na may kaukulang tangent. Pagkonekta sa mga direktang punto ng intersection ng D at E, nakakakuha kami ng dalawang flat oblique triangles ADE at ODE na may isang karaniwang side DE. Ang paglalapat ng elementarya geometry theorems sa mga tatsulok na ito, isinusulat namin:

DE 2 \u003d OD 2 + OE 2 - 2OD × OE × cos a,

DE 2 \u003d AD 2 + AE 2 - 2AD × AE × cos A.

Sa pamamagitan ng pagbabawas ng pangalawang equation mula sa una, nakukuha natin ang:

2OD × OE × cos a \u003d OD 2 - AD 2 + OE 2 - AE 2 + 2AD × AE × cos A. (1.31)

Mula sa right-angled flat triangles OAE at OAD ito ay sumusunod:

OD 2 -AD 2 =R 2 ;OE 2 -AE 2 =R 2 ;

AD = Rtg b ; AE = Rtg s;

Ang pagpapalit ng mga ugnayang ito sa formula (1.31) at paggawa ng kaukulang mga pagbawas at paglilipat, nakukuha namin

cos a \u003d cos b cos c + sin b sin c cos A, (1.32)

mga. ang cosine ng isang gilid ng isang spherical triangle ay katumbas ng produkto ng mga cosine ng iba pang dalawang panig nito kasama ang produkto ng mga sine ng parehong panig at ang cosine ng anggulo sa pagitan nila.

Ang formula (1.32) ay maaaring isulat para sa anumang panig ng tatsulok. Isulat natin ito, halimbawa, para sa side b:

cos b = cos with cos a + sin with sin a cos B

at, pinapalitan ang cos a dito mula sa formula (1.32), nakukuha natin

cos b = cos c (cos b cos c + sin b sin c cos A) + sin c sin a cos B.

Ang pagpapalawak ng mga bracket at paglipat ng unang termino ng kanang bahagi sa kaliwa, magkakaroon tayo ng:

cos b (1 - cos 2 s) \u003d sin b sin with cos with cos A + sin c sin a cos B.

Ang pagpapalit ng (1 - cos 2 s) ng sin 2 s at binabawasan ang lahat ng sin c, sa wakas ay makukuha natin

sin a cos B \u003d sinc cos b - cos c sin b cos A, (1.33)

mga. ang produkto ng sine ng gilid at ang cosine ng kasamang anggulo ay katumbas ng produkto ng sine ng kabilang panig na nagbubuklod sa kasamang anggulo ng cosine ng ikatlong panig minus ang produkto ng cosine ng gilid na nagbubuklod sa kasama anggulo ng sine ng ikatlong panig at ang cosine ng anggulo sa tapat ng unang panig.

Ang formula (1.33) ay tinatawag na formula ng limang elemento. Maaari itong isulat sa pamamagitan ng pagkakatulad para sa mga produkto ng sin a cos C, sin b cos A, sin b cos C, sin na may cos A at sin na may cos B.

Nalutas na natin ngayon ang pagkakapantay-pantay (1.32) na may paggalang sa cos A:

Sa pamamagitan ng pag-square sa magkabilang panig ng huling pagkakapantay-pantay at pagbabawas ng mga ito mula sa 1, nakukuha natin ang:

Ang pagbubukas ng mga bracket at paghahati sa parehong bahagi ng expression na ito sa pamamagitan ng sin 2 a, nakukuha natin

Ang resultang expression ay perpektong simetriko na may paggalang sa a, b at c, at pinapalitan ang A ng B at b o A ng C at a ng c, isinusulat namin

mga. ang mga sine ng mga gilid ng isang spherical triangle ay proporsyonal sa mga sine ng kanilang magkasalungat na mga anggulo; o ang ratio ng sine ng isang gilid ng isang spherical triangle sa sine ng kabaligtaran na anggulo ay pare-pareho.

Ang tatlong nagmula na mga relasyon (1.32), (1.33), (1.34) sa pagitan ng mga gilid at anggulo ng isang spherical triangle ay ang mga pangunahing; maraming iba pang mga formula ng spherical trigonometry ang maaaring makuha mula sa kanila. Pinipigilan namin ang aming sarili sa pagkuha lamang ng isang formula para sa isang right-angled spherical triangle. Hayaan ang A = 90°; pagkatapos ay kasalanan A \u003d 1, cos A \u003d 0, at mula sa formula (1.33) nakukuha namin

kasalanan a cos B \u003d kasalanan sa cos b.

Ang paghahati sa parehong bahagi ng pagkakapantay-pantay na ito sa pamamagitan ng kasalanan b at pagpapalit, ayon sa (1.34), magkakaroon tayo ng:

ctg B = sin c ctg b

mga. ang ratio ng tangent ng isang binti ng isang right-angled spherical triangle sa tangent ng tapat na anggulo ay katumbas ng sine ng kabilang binti.

Upang kumatawan ng impormasyon tungkol sa isang imahe sa isang Gaussian sphere sa isang computer, makatuwirang hatiin ang ibabaw nito sa mga cell.

Sa kasong ito, ang lugar ng bahaging iyon ng orihinal na ibabaw, na nakatuon sa loob ng kono ng mga direksyon na tinutukoy ng partition cell, ay nauugnay sa bawat cell. Ang nasabing discrete approximation ng pinahabang spherical na imahe ay tinatawag na orientation histogram. Sa isip, ang mga cell ay dapat matugunan ang mga sumusunod na kinakailangan:

Magkaroon ng parehong lugar;

Maging pareho ang hugis

Maging regular na espasyo;

Magkaroon ng isang bilugan na hugis;

Ang pagkahati ay dapat magbigay ng isang sapat na magandang angular na resolusyon;

Dapat mayroong mga pag-ikot na kumuha ng partisyon sa sarili nito.

Ang mga pinahabang mga cell ay dapat na hindi kasama, dahil sila ay tumutugma sa impormasyon tungkol sa mga lugar sa ibabaw, ang oryentasyon kung saan nagbabago nang higit kaysa sa kaso ng mas bilugan na mga cell ng parehong lugar. Kasabay nito, kung ang mga cell ay regular na nakaayos, kung gayon ang kanilang lokasyon na may kaugnayan sa kanilang mga kapitbahay ay magiging pareho para sa lahat ng mga cell, at ang mga naturang pagsasaayos ay lubos na kanais-nais. Sa kasamaang palad, hindi posible na matugunan ang lahat ng mga kinakailangang ito nang sabay-sabay.

Ang isa sa mga posibleng partisyon ay nabuo sa pamamagitan ng mga latitudinal na sinturon, na ang bawat isa ay nahahati sa mga meridional na guhit (Larawan 16.13). Ang mga resultang mga cell ay maaaring gawin halos pantay sa lugar kung ang bilang ng mga naturang banda sa matataas na latitude ay nabawasan. Ang isa sa mga pakinabang ng naturang pamamaraan ay ang pagiging simple ng paghahanap ng isang cell kung saan kinakailangan upang magtalaga ng isang tiyak na normal sa ibabaw. Gayunpaman, ang gayong pamamaraan ay napakalayo sa pagtupad sa mga kinakailangan na nakalista sa itaas. Halimbawa, walang mga pag-ikot sa tulong kung saan ang itinayong partisyon ng globo ay isinalin sa sarili nito (maliban sa mga pag-ikot tungkol sa axis na nagkokonekta sa mga pole).

Ang mas angkop na mga partisyon ay maaaring makuha sa pamamagitan ng pag-project sa unit sphere na regular na polyhedra na ang mga sentro ay nag-tutugma sa gitna ng globo. Ang mga mukha ng isang regular na polyhedron ay mga regular na polygon (at lahat sila ay pareho). Samakatuwid, ang partisyon na nakuha ng projection ng isang regular na polyhedron ay may pag-aari na ang lahat ng mga cell ay may parehong hugis at lugar. Bilang karagdagan, ang geometric na pag-aayos ng lahat ng mga cell na may paggalang sa kanilang mga kapitbahay ay pareho. Sa kasamaang palad,

kanin. 16.13. Ang paghahati ng isang globo sa mga elemento sa pamamagitan ng mga meridian at parallel. Sa kasamaang palad, ang naturang partition ay may iilan lamang sa mga katangiang kinakailangan upang mag-imbak ng isang orientation histogram.

kanin. 16.14. (tingnan ang pag-scan) Pag-project ng dodecahedron at isang icosahedron papunta sa isang sphere upang makakuha ng partition sa at mga cell.

limang regular na katawan lamang ang kilala, kung saan dapat pumili ang isa (tetrahedron, hexahedron, octahedron, dodecahedron at icosahedron). Para sa isang dodecahedron, ang mga cell ay medyo bilugan (Larawan 16.14, a). Ang dodecahedron, gayunpaman, ay may labindalawang mukha lamang. Kahit na ang icosahedron ay nagbibigay ng isang napaka krudong representasyon ng oryentasyon (Larawan 16.14b). Bilang karagdagan, dalawampu sa mga selula nito ay hindi masyadong bilugan.

Maaari tayong magpatuloy at isaalang-alang ang semi-regular na polyhedra. Ang kanilang mga mukha ay regular din na mga polygon, ngunit hindi palaging pareho. Ang mga lugar ng lahat ng mga mukha ay hindi pantay. Sa ilang mga kaso, posibleng gumawa ng bagong polyhedron na may parehong topology ng mga koneksyon sa pagitan ng mga mukha gaya ng orihinal na semiregular polyhedron, ngunit ang mga lugar ng mukha ay pantay. Kung saan

kanin. 16.15. a - isang pinutol na icosahedron, na isang semi-regular na polyhedron na may 32 na mukha; b - penta hanggang decahedron, na binubuo ng 60 tatsulok na mukha. Ang mas maliliit na partisyon ng ibabaw ng unit sphere ay maaaring batay sa naturang semiregular polyhedra.

kanin. 16.16. Kakayahang bumuo ng mga geodetic na network batay sa alinman sa mga projection ng regular o semi-regular na polyhedra.

Ang bawat mukha ay nahahati sa mga triangular na selula. Ang network na ipinapakita dito ay batay sa icosahedron at may 12 vertices, na katabi ng 5 cell. Anim na mga cell ang nagtatagpo sa natitirang mga vertex.

hindi na tama ang hugis ng ilang mukha. Ang isang halimbawa ng isang partisyon batay sa isang semi-regular na polyhedron ay nagbibigay ng isang soccer ball (Larawan 16.15, a). Ang pinutol na icosahedron, ibig sabihin, isang katawan na may 12 pentagonal at 20 hexagonal na mukha, ay kinuha bilang paunang isa. Sa kasamaang-palad, mayroon lamang 13 semi-regular na polyhedra (limang pinutol na regular na polyhedra, ang cuboctahedron, icosidodecahedron, snub cube, snub icosidodecahedron, truncated cuboctahedron, rhombicuboctahedron, truncated icosidodecahedronosido, at rhombicuboctahedron). Hindi sila humahantong sa mga partisyon na sapat na maliit para sa aming mga layunin.

Kung gusto pa rin nating makakuha ng mas pinong partition, maaari nating subukang i-decompose ang umiiral na isa sa mga triangular na elemento. Halimbawa, kung sisirain natin ang bawat pentagonal na mukha ng dodecahedron sa limang pantay na tatsulok, makakakuha tayo ng pentadodecahedron na may 60 mukha (Larawan 16.15, b). Ang Ohm ay dalawahan sa pinutol na icosahedron.

Sa pagpapatuloy sa parehong direksyon, ang bawat isa sa mga resultang triangles ay maaaring hatiin sa apat na mas maliit na triangles, alinsunod sa mga domed na istruktura na kilala sa geodesy (Fig. 16.16). Sa pamamagitan ng pagrerelaks sa ilan sa mga kinakailangan sa itaas, maaaring makamit ang mataas na resolusyon. Sa katunayan, mas mainam na gumamit ng dalawahang konstruksyon, dahil ang kanilang mga mukha ay napakalaki (irregular) na mga hexagon na may 12 pentagons na nakakalat sa pagitan nila (Larawan 16.15, b). Ang mga di-makatwirang maliliit na partisyon ay maaaring ibigay sa ganitong paraan.

Upang magamit ang diskarteng ito, kinakailangan upang mahusay na matukoy ang elemento na tumutugma sa isang naibigay na normal sa ibabaw. Sa kaso ng mga partisyon na nakuha sa batayan ng regular na polyhedra, madaling kalkulahin ang mga cosine ng mga anggulo sa pagitan ng isang naibigay na unit vector at ang mga vector na naaayon sa mga sentro ng cell. (Ang huli ay tumutugma sa mga vertex ng dalawahan

regular polyhedron.) Pagkatapos ang ibinigay na vector ay itatalaga sa cell na ang sentro ay pinakamalapit. Sa kaso ng isang partisyon na katulad ng isang geodetic network, posible na kumilos sa isang hierarchical na paraan. Ang nasabing partisyon ay batay sa ilang regular na polyhedron. Ang cell na may pinakamalapit na sentro ay matatagpuan tulad ng inilarawan sa itaas. Pagkatapos nito, tinutukoy namin kung alin sa mga tatsulok na naghahati dito, ang unit na normal na vector ay nahuhulog. Ang prosesong ito ay nagpapatuloy para sa susunod na apat na tatsulok na naghahati sa isa na natagpuan, at iba pa. Sa pagsasagawa, ang mga paraan ng paghahanap ng talahanayan ay maaaring gamitin na, bagama't hindi tumpak, ay napakabilis.

Hayaang ang solid na anggulo na napuno ng isang cell sa globo ay (sa kaso ng icosahedron). Ang inaasahang bilang ng mga normal na nasa loob ng naturang cell para sa isang matambok na bagay ay

Malinaw na ang orientation histogram, ibig sabihin, ang discrete approximation ng pinahabang spherical na imahe, ay maaaring kalkulahin nang lokal. Binibilang lang namin ang bilang ng mga normal na nabibilang sa bawat cell. Kasabay nito, ang Gaussian curvature ay ipinahayag sa mga tuntunin ng una at pangalawang partial derivatives ng function na tumutukoy sa ibabaw. Sa pagsasagawa, ang mga pagtatantya ng mga derivatives na ito ay lumalabas na hindi mapagkakatiwalaan dahil sa pagkakaroon ng ingay. Samakatuwid, ang katotohanan na ang pinalawak na spherical na imahe ay maaaring kalkulahin nang walang pagkalkula ng mga derivatives ay napakahalaga.

Ang kuwento ng demo na ito ay ang mga sumusunod: minsan ang isang kaibigan ko ay gumawa ng planeta map generator para sa kanyang laro at nais na ang mga mapa na ginawa sa ganitong paraan ay ipakita bilang isang umiikot na globo. Gayunpaman, sa parehong oras, hindi niya nais na gumamit ng 3D graphics, ngunit sa halip ay nakabuo ng maraming mga frame na may parehong globo na pinaikot sa iba't ibang mga anggulo. Ang dami ng memorya na ginamit ay ... sasabihin natin, sobra-sobra, ngunit ang bilis ng pagbuo ng frame (pati na rin ang kalidad ng kanilang pagpapatupad) ay lubhang nagdusa. Pagkatapos ng kaunting pag-iisip, nagawa kong tulungan siyang i-optimize ang prosesong ito, ngunit sa pangkalahatan ay nagkaroon ako ng makatarungang pakiramdam na ito ay isang gawain para sa OpenGL, at hindi para sa 2D graphics sa lahat.

At kaya, isang araw, nang ako ay pinahirapan ng hindi pagkakatulog, nagpasya akong subukang pagsamahin ang dalawang pamamaraang ito: gumuhit ng umiikot na globo (na may mapa ng planeta na nakaunat sa ibabaw nito) sa pamamagitan ng OpenGL, ngunit sa parehong oras ay iniiwan itong patag.

At dapat kong sabihin na nagtagumpay ako. Ngunit una sa lahat.

Proseso ng Matematika

Upang magsimula, tukuyin natin ang aktwal na gawain. Para sa bawat punto sa screen, mayroon kaming dalawang screen coordinates sa Cartesian coordinate system, at kailangan naming maghanap ng spherical coordinates para dito (sa katunayan, latitude at longitude), na, sa katunayan, ay ang texture coordinates para sa mapa ng planeta.

Kaya. Ang paglipat mula sa isang spherical coordinate system patungo sa isang Cartesian ay ibinibigay ng isang sistema ng mga equation (kinuha mula sa Wikipedia):

At ang reverse transition - na may ganitong mga equation:

Coordinate Z madali tayong makalabas X at Y, alam ang radius, at maaari nating kunin ang radius mismo na katumbas ng isa.
Sa hinaharap, sasang-ayon kami na bahagyang babaguhin namin ang mga equation sa itaas sa pamamagitan ng pagpapalitan ng mga konsepto Y(para sa amin ito ay isang screen vertical) at Z(ito ang magiging lalim ng eksena).

Teknikal na bahagi

Ang pagpapatupad ng ideya ay mangangailangan sa amin na gumamit ng isang quad (napag-usapan ko na kung paano gamitin ito, kaya hindi ko na ito uulitin, lalo na dahil sa ibaba ay isang link sa buong source code ng proyekto), pati na rin ang dalawa texture: ang aktwal na mapa ng planeta (ginamit ko ang Earth texture na 2048x1024 ) at texture coordinate na mga mapa. Ang code para sa pagbuo ng pangalawang texture ay maayos na inuulit ang matematika ng pag-convert mula sa Cartesian patungo sa spherical coordinates:

int texSize = 1024; double r = texSize * 0.5; int pixels = bagong int; para sa (int row = 0, idx = 0; row< texSize; row++) { double y = (r - row) / r; double sin_theta = Math.sqrt(1 - y*y); double theta = Math.acos(y); long v = Math.round(255 * theta / Math.PI); for (int col = 0; col < texSize; col++) { double x = (r - col) / r; long u = 0, a = 0; if (x >= -sin_theta && x<= sin_theta) { double z = Math.sqrt(1 - y*y - x*x); double phi = Math.atan2(z, x); u = Math.round(255 * phi / (2 * Math.PI)); a = Math.round(255 * z); } pixels = (int) ((a << 24) + (v << 8) + u); } } GLES20.glGenTextures(1, genbuf, 0); offsetTex = genbuf; if (offsetTex != 0) { GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, offsetTex); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_NONE); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_NONE); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, texSize, texSize, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, IntBuffer.wrap(pixels)); }
Tandaan na ang mga coordinate X at Y ay inililipat mula sa hanay patungo sa hanay [-1..1], at sa mga coordinate ng texture U at V ay na-convert mula sa mga radian patungo sa hanay , pagkatapos ay isinusulat ang mga ito sa pula at berdeng bahagi ng 32-bit na texture, ayon sa pagkakabanggit. Ang alpha channel ay ginagamit upang mag-imbak ng "depth" (coordinate Z), habang ang asul ay nananatiling hindi ginagamit sa ngayon. Ang hindi pagpapagana ng pag-filter ng bilinear ay hindi rin sinasadya: sa yugtong ito ay hindi ito nagbibigay ng anumang epekto (ang mga kalapit na punto sa anumang kaso ay may parehong mga halaga, na may medyo matalim na pagtalon), at sa kung ano ang susunod kong ipapakita, ito ay makakasama. Ngunit higit pa sa ibaba.

Ang parehong mga texture ay pinapakain sa input ng isang simpleng pixel shader (pagkatapos dito, ang mga larawan ay naki-click):

Private final String quadFS = "precision mediump float;\n" + "uniform sampler2D uTexture0;\n" + "uniform sampler2D uTexture1;\n" + "varying vec4 TexCoord0;\n" + "void main() (\n" + " vec4 vTex = texture2D(uTexture0, TexCoord0.xy);\n" + " vec3 vCol = texture2D(uTexture1, vTex.xy).rgb;\n" + " gl_FragColor = vec4(vCol, (vTex.w >
Hindi ako nagbibigay ng code sa pag-render ng eksena, dahil ang lahat ay medyo walang halaga sa loob nito (at, muli, makikita mo ito sa buong pinagmulan), at ang shader mismo ay medyo primitive. Ang pinaka-curious na bagay tungkol dito, marahil, ay ang alpha channel ay sinusuri lamang para sa positivity sa ngayon, habang maaari itong magamit para sa isang epekto ng pag-iilaw.

Ito ay naging maayos, ngunit sa paanuman ay flat, at gusto kong idagdag ang aktwal na pag-ikot ng planeta sa paligid ng axis nito.

Nagsasama kami ng isa pang parameter sa shader (papalitan namin ito depende sa oras sa hanay), at nagdaragdag kami ng "depth" (pag-multiply ng kulay sa halaga mula sa alpha channel):

Private final String quadFS = "precision mediump float;\n" + "uniform sampler2D uTexture0;\n" + "uniform sampler2D uTexture1;\n" + "uniform float uOffset;\n" + "varying vec4 TexCoord0;\n" + "void main() (\n" + " vec4 vTex = texture2D(uTexture0, TexCoord0.xy);\n" + " vTex.x += uOffset;\n" + " vec3 vCol = texture2D(uTexture1, vTex.xy ).rgb;\n" + " gl_FragColor = vec4(vCol * vTex.w, (vTex.w > 0.0 ? 1.0: 0.0));\n" + ")\n";
Well, walang mga reklamo tungkol sa globo mismo, ngunit ang larawan ay mukhang sa paanuman ... walong-bit, o isang bagay. At hindi nakakagulat: naitala namin ang mga coordinate ng texture sa isang hanay (ang maximum na magagamit sa amin sa mga ordinaryong bahagi ng kulay), na nangangahulugan na ang aming texture ay maaaring magkaroon ng hindi hihigit sa 256 puntos sa taas (at 512 ang lapad, kung isasaalang-alang ang pag-ikot). Hindi sapat, kailangan mo ng hindi bababa sa 10-bit na katumpakan.

Pagtaas ng resolution

Kaagad kitang binabalaan: ang code na inilalarawan dito ay maaaring gumana nang baluktot sa anumang mga device, bagama't nagawa kong makamit ang normal na pag-render sa lahat ng mga device na maaari kong hawakan sa aking mga kamay. Sa anumang kaso, ang inilalarawan dito ay isang karaniwang hack.

Kaya, ginamit namin ang dalawa sa tatlong bahagi ng kulay sa ngayon, i.e. 16 bits sa 24. Buweno, i-pack natin ang data upang ang bawat texture coordinate ay may sukat na 12 bits, na magbibigay-daan sa amin na magtrabaho sa mga texture na hanggang 4096 pixels ang taas! Upang gawin ito, literal naming babaguhin ang tatlong linya sa programa:

Long v = Math.round(4095 * theta / Math.PI); ...u = Math.round(4095 * phi / (2 * Math.PI)); ... mga pixel = (int) ((a<< 24) + (v << 12) + ((u & 15) << 8) + (u >> 4)); ...
at sumulat ng bagong shader na isinasaalang-alang ang 12-bit addressing scheme (ito ang lugar kung saan dapat i-disable ang bilinear filtering!):

pribadong panghuling String quadFS = "precision mediump float;\n" + "uniform sampler2D uTexture0;\n" + "uniform sampler2D uTexture1;\n" + "uniform float uOffset;\n" + "varying vec4 TexCoord0;\n" + "void main() (\n" + " vec4 vTex = texture2D(uTexture0, TexCoord0.xy);\n" + " vec3 vOff = vTex.xyz * 255.0 + vec3(0.5, 0.5, 0.5);\n" + " float hiY = floor(vOff.y / 16.0);\n" + " float loY = vOff.y - 16.0 * hiY;\n" + " vec2 vCoord = vec2(\n" + " (vOff.x * 16.0 + loY) / 4095.0 + uOffset,\n" + " (vOff.z * 16.0 + hiY) / 4095.0);\n" + " vec3 vCol = texture2D(uTexture1, vCoord).rgb;\n" + " gl_FragColor = vec4(vCol * vTex.w, (vTex.w > 0.0 ? 1.0: 0.0));\n" + ")\n";
Well, ito ay isang ganap na naiibang bagay! Sa mga menor de edad na pagbabago (pagdaragdag ng pinch zoom at pag-ikot ng daliri), ipinakita ko ang program na ito sa aking mga kaibigan at kasamahan, at sabay na tinanong kung ilang mga tatsulok ang inaakala nilang nasa eksenang ito. Ang mga resulta ay iba-iba, at ang tanong mismo ay nagpukaw ng hinala sa pagkakaroon ng isang catch (sa kasong ito, ang mga sumasagot ay nagbiro ng "isa", na hindi malayo sa katotohanan), ngunit ang tamang sagot ay patuloy na nakakagulat. At lahat, bilang isa, ay nagtanong: bakit ang isang globo ay maaaring paikutin sa isang axis, ngunit hindi ikiling? .. Hmm.

Sandal

Ngunit ang katotohanan ay ang slope sa scheme na ito ay mas mahirap ipatupad. Sa katunayan, ang gawain ay hindi malulutas, at nakayanan ko pa ito, ngunit hindi walang mga nuances.

Sa esensya, ang gawain ay bumababa sa pagkuha ng inilipat na coordinate V, habang ang coordinate U ay hindi nagbabago: ito ay dahil nagdaragdag kami ng pag-ikot sa paligid ng axis X. Ang plano ay ang mga sumusunod: binabago namin ang mga coordinate ng texture sa mga coordinate ng screen (sa saklaw [-1..1]), ilapat ang rotation matrix sa paligid ng pahalang na axis sa kanila (upang gawin ito, sumulat kami sa isang bagong pare-pareho nang maaga uTilt sine at cosine ng anggulo ng inclination), at pagkatapos ay ginagamit namin ang bagong coordinate Y para sample sa aming template texture. "Pinaikot" na coordinate Z ito ay magiging kapaki-pakinabang din para sa atin, sa tulong nito ay isasalamin natin ang longitude para sa likurang bahagi ng bola). Coordinate ng screen Z kailangan mong kalkulahin nang tahasan upang hindi makagawa ng dalawang mga pagpipilian sa texture mula sa isang texture, sa parehong oras na ito ay magpapataas ng katumpakan nito.

pribadong panghuling String quadFS = "precision mediump float;\n" + "uniform sampler2D uTexture0;\n" + "uniform sampler2D uTexture1;\n" + "uniform float uOffset;\n" + "uniform vec2 uTilt;\n" + "varying vec4 TexCoord0;\n" + "void main() (\n" + " float sx = 2.0 * TexCoord0.x - 1.0;\n" + " float sy = 2.0 * TexCoord0.y - 1.0;\n" + " float z2 = 1.0 - sx * sx - sy * sy;\n" + " if (z2 > 0.0) (;\n" + " float sz = sqrt(z2);\n" + " float y = ( sy * uTilt.y - sz * uTilt.x + 1.0) * 0.5;\n" + " float z = (sy * uTilt.x + sz * uTilt.y);\n" + " vec4 vTex = texture2D(uTexture0 , vec2(TexCoord0.x, y));\n" + " vec3 vOff = vTex.xyz * 255.0 + vec3(0.5, 0.5, 0.5);\n" + " float hiY = floor(vOff.y / 16.0) ;\n" + " float loY = vOff.y - 16.0 * hiY;\n" + " vec2 vCoord = vec2(\n" + " (vOff.x * 16.0 + loY) / 4095.0,\n" + " ( vOff.z * 16.0 + hiY) / 4095.0);\n" + " kung (z< 0.0) { vCoord.x = 1.0 - vCoord.x; }\n" + " vCoord.x += uOffset;\n" + " vec3 vCol = texture2D(uTexture1, vCoord).rgb;\n" + " gl_FragColor = vec4(vCol * sz, 1.0);\n" + " } else {\n" + " gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n" + " }\n" + "}\n";
Hooray, gumana ang slope! Kakaibang ingay lang yan sa hangganan ng hemispheres medyo nakakahiya. Malinaw, ang problema ay nakasalalay sa hindi sapat na katumpakan ng pagtugon sa mga hangganan ng mga punto (ang mga punto sa bilog mismo ay tumutugma sa isang napakalaking hanay ng mga coordinate, ang isang texel ay kumakalat sa isang pagitan ng medyo kapansin-pansing haba). Sa huli, nagawa kong talunin ito sa pamamagitan ng paggamit ng dalawang nabuong mga texture sa halip na isa.

Bilang resulta, maaari kang mag-zoom in at paikutin ang bola sa halos parehong paraan tulad ng sa Google Earth. Sa pagkakaiba na mayroon lamang dalawang tatsulok.

At sa wakas, ang pangako. Ang source code para sa proyekto ay makukuha sa