346 lines
37 KiB
HTML
346 lines
37 KiB
HTML
<!DOCTYPE html><html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Iosevka</title>
|
||
<script src="http://cdn.jsdelivr.net/vue/1.0.4/vue.min.js"></script>
|
||
<script>if (!window.Vue) document.write('<script src="vue-1.0.4.min.js">\x3C/script>')</script>
|
||
<link href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.2.3/css/simple-line-icons.min.css" rel="stylesheet">
|
||
<style> @import url(homepage.css); </style>
|
||
</head>
|
||
<body>
|
||
<section id="introduction">
|
||
<h1>Iosevka</h1>
|
||
<div id="downlinks">
|
||
<a href="https://github.com/be5invis/Iosevka/releases/latest"><icon class="icon-cloud-download"></icon>Download Iosevka<span>1.0-beta6 “Tsieng-Ye”</span></a>
|
||
<a href="specimen.html"><icon class="icon-book-open"></icon>View Specimen<span>All characters & styles</span></a>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="descriptions">
|
||
<ul class="col">
|
||
<li><h2>Concept</h2>
|
||
<p>Iosevka is a slender monospace typeface inspired by <a href="http://www.fsd.it/fonts/pragmatapro.htm">Pragmata Pro</a>, <a href="http://mplus-fonts.osdn.jp/">M+</a> and <a href="http://www.parachute.gr/typefaces/allfonts/din-mono-pro">PF DIN Mono</a>, designed to be the ideal font for programming.</p>
|
||
</li>
|
||
<li><h2>Features</h2>
|
||
<p>Slender and distinguishable glyphs with serious geometry. Powerful world language support. Fully hinted for screen display.</p>
|
||
</li>
|
||
<li><h2>Open Source</h2>
|
||
<p>Iosevka is completely generated from its <a href="https://github.com/be5invis/Iosevka">source code</a>. You can build your own variant by adjusting its <a href="https://github.com/be5invis/Iosevka/blob/master/parameters.toml">parameters</a>.</p>
|
||
</li>
|
||
</ul>
|
||
<ul class="col">
|
||
<li><h2>Support</h2>
|
||
<p>Iosevka comes in regular, bold, italic and bold-italic with over 2000 latin, greek, cyrillic, phonetic and PowerLine glyphs. A IosevkaCC variant is also provided, with several symbols enwiden, to be compatible with most CJK typefaces.</p>
|
||
</li>
|
||
<li><h2>Readme</h2>
|
||
<p>The instructions, building procedure, and other informations can be found in <a href="https://github.com/be5invis/Iosevka/blob/master/README.md">its readme</a>.</p>
|
||
</li>
|
||
<li v-show="(true)" style="display:none"><h2>Preview</h2>
|
||
<p><span id="theme-picker" class="options"><compact-picker v-bind:items="themes" v-bind:current.sync="theme" ></compact-picker></span>| <span id="snippet-picker" class="options"><compact-picker v-bind:items="snippets" v-bind:current.sync="snippet"></compact-picker></span></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section id="preview" class="{{theme}}">
|
||
<snippet v-bind:name="'javascript'" v-bind:current="snippet"><code class="javascript hljs"><span class=hljs-keyword>var</span> languages = [
|
||
{lang: <span class=hljs-string>'English'</span>, sample: <span class=hljs-string>'Shaw, those twelve beige hooks are joined if I patch a young, gooey mouth.'</span>},
|
||
{lang: <span class=hljs-string>'IPA'</span>, sample: <span class=hljs-string>'[ɢʷɯʔ.nas.doːŋ.kʰlja] [ŋan.ȵʑi̯wo.ɕi̯uĕn.ɣwa]'</span>},
|
||
{lang: <span class=hljs-string>'Bulgarian'</span>, sample: <span class=hljs-string>'Я, пазачът Вальо уж бди, а скришом хапва кюфтенца зад щайгите.'</span>},
|
||
{lang: <span class=hljs-string>'Czech'</span>, sample: <span class=hljs-string>'Nechť již hříšné saxofony ďáblů rozezvučí síň úděsnými tóny waltzu, tanga a quickstepu.'</span>},
|
||
{lang: <span class=hljs-string>'Finnish'</span>, sample: <span class=hljs-string>'Charles Darwin jammaili Åken hevixylofonilla Qatarin yöpub Zeligissä.'</span>},
|
||
{lang: <span class=hljs-string>'French'</span>, sample: <span class=hljs-string>'Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwi.'</span>},
|
||
{lang: <span class=hljs-string>'German'</span>, sample: <span class=hljs-string>'Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich.'</span>},
|
||
{lang: <span class=hljs-string>'Greek'</span>, sample: <span class=hljs-string>'Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός.'</span>},
|
||
{lang: <span class=hljs-string>'Ancient Greek'</span>, sample: <span class=hljs-string>'Ἄδμηθ’, ὁρᾷς γὰρ τἀμὰ πράγμαθ’ ὡς ἔχει, λέξαι θέλω σοι πρὶν θανεῖν ἃ βούλομαι. '</span>},
|
||
{lang: <span class=hljs-string>'Hungarian'</span>, sample: <span class=hljs-string>'Jó foxim és don Quijote húszwattos lámpánál ülve egy pár bűvös cipőt készít.'</span>},
|
||
{lang: <span class=hljs-string>'Icelandic'</span>, sample: <span class=hljs-string>'Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa.'</span>},
|
||
{lang: <span class=hljs-string>'Irish'</span>, sample: <span class=hljs-string>'Ċuaiġ bé ṁórṡáċ le dlúṫspád fíorḟinn trí hata mo ḋea-ṗorcáin ḃig.'</span>},
|
||
{lang: <span class=hljs-string>'Latvian'</span>, sample: <span class=hljs-string>'Muļķa hipiji mēģina brīvi nogaršot celofāna žņaudzējčūsku.'</span>},
|
||
{lang: <span class=hljs-string>'Lithuanian'</span>, sample: <span class=hljs-string>'Įlinkdama fechtuotojo špaga sublykčiojusi pragręžė apvalų arbūzą.'</span>},
|
||
{lang: <span class=hljs-string>'Macedonian'</span>, sample: <span class=hljs-string>'Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех.'</span>},
|
||
{lang: <span class=hljs-string>'Norwegian'</span>, sample: <span class=hljs-string>'Jeg begynte å fortære en sandwich mens jeg kjørte taxi på vei til quiz'</span>},
|
||
{lang: <span class=hljs-string>'Polish'</span>, sample: <span class=hljs-string>'Pchnąć w tę łódź jeża lub ośm skrzyń fig.'</span>},
|
||
{lang: <span class=hljs-string>'Portuguese'</span>, sample: <span class=hljs-string>'Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português.'</span>},
|
||
{lang: <span class=hljs-string>'Romanian'</span>, sample: <span class=hljs-string>'Înjurând pițigăiat, zoofobul comandă vexat whisky și tequila.'</span>},
|
||
{lang: <span class=hljs-string>'Russian'</span>, sample: <span class=hljs-string>'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.'</span>},
|
||
{lang: <span class=hljs-string>'Serbian'</span>, sample: <span class=hljs-string lang=sr>'Ајшо, лепото и чежњо, за љубав срца мога дођи у Хаџиће на кафу.'</span>},
|
||
{lang: <span class=hljs-string>'Spanish'</span>, sample: <span class=hljs-string>'Benjamín pidió una bebida de kiwi y fresa; Noé, sin vergüenza, la más exquisita champaña del menú.'</span>},
|
||
{lang: <span class=hljs-string>'Turkish'</span>, sample: <span class=hljs-string>'Pijamalı hasta yağız şoföre çabucak güvendi.'</span>},
|
||
{lang: <span class=hljs-string>'Ukrainian'</span>, sample: <span class=hljs-string>'Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів!'</span>}
|
||
]
|
||
</code></snippet>
|
||
<snippet v-bind:name="'cpp'" v-bind:current="snippet"><code class="cpp hljs">
|
||
<span class=hljs-preprocessor>#<span class=hljs-keyword>include</span> <span class=hljs-string><math.h></span> // smallpt, a Path Tracer by Kevin Beason, 2008 </span>
|
||
<span class=hljs-preprocessor>#<span class=hljs-keyword>include</span> <span class=hljs-string><stdlib.h></span> // Make : g++ -O3 -fopenmp smallpt.cpp -o smallpt </span>
|
||
<span class=hljs-preprocessor>#<span class=hljs-keyword>include</span> <span class=hljs-string><stdio.h></span> // </span>
|
||
<span class=hljs-keyword>struct</span> Vec { <span class=hljs-comment>// Usage: time ./smallpt 5000 && xv image.ppm </span>
|
||
<span class=hljs-keyword>double</span> x, y, z; <span class=hljs-comment>// position, also color (r,g,b) </span>
|
||
Vec(<span class=hljs-keyword>double</span> x_=<span class=hljs-number>0</span>, <span class=hljs-keyword>double</span> y_=<span class=hljs-number>0</span>, <span class=hljs-keyword>double</span> z_=<span class=hljs-number>0</span>){ x=x_; y=y_; z=z_; }
|
||
Vec <span class=hljs-keyword>operator</span>+(<span class=hljs-keyword>const</span> Vec &b) <span class=hljs-keyword>const</span> { <span class=hljs-keyword>return</span> Vec(x+b.x,y+b.y,z+b.z); }
|
||
Vec <span class=hljs-keyword>operator</span>-(<span class=hljs-keyword>const</span> Vec &b) <span class=hljs-keyword>const</span> { <span class=hljs-keyword>return</span> Vec(x-b.x,y-b.y,z-b.z); }
|
||
Vec <span class=hljs-keyword>operator</span>*(<span class=hljs-keyword>double</span> b) <span class=hljs-keyword>const</span> { <span class=hljs-keyword>return</span> Vec(x*b,y*b,z*b); }
|
||
<span class=hljs-function>Vec <span class=hljs-title>mult</span><span class=hljs-params>(<span class=hljs-keyword>const</span> Vec &b)</span> <span class=hljs-keyword>const</span> </span>{ <span class=hljs-keyword>return</span> Vec(x*b.x,y*b.y,z*b.z); }
|
||
<span class=hljs-function>Vec& <span class=hljs-title>norm</span><span class=hljs-params>()</span></span>{ <span class=hljs-keyword>return</span> *<span class=hljs-keyword>this</span> = *<span class=hljs-keyword>this</span> * (<span class=hljs-number>1</span>/<span class=hljs-built_in>sqrt</span>(x*x+y*y+z*z)); }
|
||
<span class=hljs-function><span class=hljs-keyword>double</span> <span class=hljs-title>dot</span><span class=hljs-params>(<span class=hljs-keyword>const</span> Vec &b)</span> <span class=hljs-keyword>const</span> </span>{ <span class=hljs-keyword>return</span> x*b.x+y*b.y+z*b.z; } <span class=hljs-comment>// cross: </span>
|
||
Vec <span class=hljs-keyword>operator</span>%(Vec&b){<span class=hljs-keyword>return</span> Vec(y*b.z-z*b.y,z*b.x-x*b.z,x*b.y-y*b.x);}
|
||
};
|
||
<span class=hljs-keyword>struct</span> Ray { Vec o, d; Ray(Vec o_, Vec d_) : o(o_), d(d_) {} };
|
||
<span class=hljs-keyword>enum</span> Refl_t { DIFF, SPEC, REFR }; <span class=hljs-comment>// material types, used in radiance() </span>
|
||
<span class=hljs-keyword>struct</span> Sphere {
|
||
<span class=hljs-keyword>double</span> rad; <span class=hljs-comment>// radius </span>
|
||
Vec p, e, c; <span class=hljs-comment>// position, emission, color </span>
|
||
Refl_t refl; <span class=hljs-comment>// reflection type (DIFFuse, SPECular, REFRactive) </span>
|
||
Sphere(<span class=hljs-keyword>double</span> rad_, Vec p_, Vec e_, Vec c_, Refl_t refl_):
|
||
rad(rad_), p(p_), e(e_), c(c_), refl(refl_) {}
|
||
<span class=hljs-function><span class=hljs-keyword>double</span> <span class=hljs-title>intersect</span><span class=hljs-params>(<span class=hljs-keyword>const</span> Ray &r)</span> <span class=hljs-keyword>const</span> </span>{ <span class=hljs-comment>// returns distance, 0 if nohit </span>
|
||
Vec op = p-r.o; <span class=hljs-comment>// Solve t^2*d.d + 2*t*(o-p).d + (o-p).(o-p)-R^2 = 0 </span>
|
||
<span class=hljs-keyword>double</span> t, eps=<span class=hljs-number>1e-4</span>, b=op.dot(r.d), det=b*b-op.dot(op)+rad*rad;
|
||
<span class=hljs-keyword>if</span> (det<<span class=hljs-number>0</span>) <span class=hljs-keyword>return</span> <span class=hljs-number>0</span>; <span class=hljs-keyword>else</span> det=<span class=hljs-built_in>sqrt</span>(det);
|
||
<span class=hljs-keyword>return</span> (t=b-det)>eps ? t : ((t=b+det)>eps ? t : <span class=hljs-number>0</span>);
|
||
}
|
||
};
|
||
Sphere spheres[] = {<span class=hljs-comment>//Scene: radius, position, emission, color, material </span>
|
||
Sphere(<span class=hljs-number>1e5</span>, Vec( <span class=hljs-number>1e5</span>+<span class=hljs-number>1</span>,<span class=hljs-number>40.8</span>,<span class=hljs-number>81.6</span>), Vec(),Vec(<span class=hljs-number>.75</span>,<span class=hljs-number>.25</span>,<span class=hljs-number>.25</span>),DIFF),<span class=hljs-comment>//Left </span>
|
||
Sphere(<span class=hljs-number>1e5</span>, Vec(-<span class=hljs-number>1e5</span>+<span class=hljs-number>99</span>,<span class=hljs-number>40.8</span>,<span class=hljs-number>81.6</span>),Vec(),Vec(<span class=hljs-number>.25</span>,<span class=hljs-number>.25</span>,<span class=hljs-number>.75</span>),DIFF),<span class=hljs-comment>//Rght </span>
|
||
Sphere(<span class=hljs-number>1e5</span>, Vec(<span class=hljs-number>50</span>,<span class=hljs-number>40.8</span>, <span class=hljs-number>1e5</span>), Vec(),Vec(<span class=hljs-number>.75</span>,<span class=hljs-number>.75</span>,<span class=hljs-number>.75</span>),DIFF),<span class=hljs-comment>//Back </span>
|
||
Sphere(<span class=hljs-number>1e5</span>, Vec(<span class=hljs-number>50</span>,<span class=hljs-number>40.8</span>,-<span class=hljs-number>1e5</span>+<span class=hljs-number>170</span>), Vec(),Vec(), DIFF),<span class=hljs-comment>//Frnt </span>
|
||
Sphere(<span class=hljs-number>1e5</span>, Vec(<span class=hljs-number>50</span>, <span class=hljs-number>1e5</span>, <span class=hljs-number>81.6</span>), Vec(),Vec(<span class=hljs-number>.75</span>,<span class=hljs-number>.75</span>,<span class=hljs-number>.75</span>),DIFF),<span class=hljs-comment>//Botm </span>
|
||
Sphere(<span class=hljs-number>1e5</span>, Vec(<span class=hljs-number>50</span>,-<span class=hljs-number>1e5</span>+<span class=hljs-number>81.6</span>,<span class=hljs-number>81.6</span>),Vec(),Vec(<span class=hljs-number>.75</span>,<span class=hljs-number>.75</span>,<span class=hljs-number>.75</span>),DIFF),<span class=hljs-comment>//Top </span>
|
||
Sphere(<span class=hljs-number>16.5</span>,Vec(<span class=hljs-number>27</span>,<span class=hljs-number>16.5</span>,<span class=hljs-number>47</span>), Vec(),Vec(<span class=hljs-number>1</span>,<span class=hljs-number>1</span>,<span class=hljs-number>1</span>)*<span class=hljs-number>.999</span>, SPEC),<span class=hljs-comment>//Mirr </span>
|
||
Sphere(<span class=hljs-number>16.5</span>,Vec(<span class=hljs-number>73</span>,<span class=hljs-number>16.5</span>,<span class=hljs-number>78</span>), Vec(),Vec(<span class=hljs-number>1</span>,<span class=hljs-number>1</span>,<span class=hljs-number>1</span>)*<span class=hljs-number>.999</span>, REFR),<span class=hljs-comment>//Glas </span>
|
||
Sphere(<span class=hljs-number>600</span>, Vec(<span class=hljs-number>50</span>,<span class=hljs-number>681.6</span>-<span class=hljs-number>.27</span>,<span class=hljs-number>81.6</span>),Vec(<span class=hljs-number>12</span>,<span class=hljs-number>12</span>,<span class=hljs-number>12</span>), Vec(), DIFF) <span class=hljs-comment>//Lite </span>
|
||
};
|
||
<span class=hljs-function><span class=hljs-keyword>inline</span> <span class=hljs-keyword>double</span> <span class=hljs-title>clamp</span><span class=hljs-params>(<span class=hljs-keyword>double</span> x)</span></span>{ <span class=hljs-keyword>return</span> x<<span class=hljs-number>0</span> ? <span class=hljs-number>0</span> : x><span class=hljs-number>1</span> ? <span class=hljs-number>1</span> : x; }
|
||
<span class=hljs-function><span class=hljs-keyword>inline</span> <span class=hljs-keyword>int</span> <span class=hljs-title>toInt</span><span class=hljs-params>(<span class=hljs-keyword>double</span> x)</span></span>{ <span class=hljs-keyword>return</span> <span class=hljs-keyword>int</span>(<span class=hljs-built_in>pow</span>(clamp(x),<span class=hljs-number>1</span>/<span class=hljs-number>2.2</span>)*<span class=hljs-number>255</span>+<span class=hljs-number>.5</span>); }
|
||
<span class=hljs-function><span class=hljs-keyword>inline</span> <span class=hljs-keyword>bool</span> <span class=hljs-title>intersect</span><span class=hljs-params>(<span class=hljs-keyword>const</span> Ray &r, <span class=hljs-keyword>double</span> &t, <span class=hljs-keyword>int</span> &id)</span></span>{
|
||
<span class=hljs-keyword>double</span> n=<span class=hljs-keyword>sizeof</span>(spheres)/<span class=hljs-keyword>sizeof</span>(Sphere), d, inf=t=<span class=hljs-number>1e20</span>;
|
||
<span class=hljs-keyword>for</span>(<span class=hljs-keyword>int</span> i=<span class=hljs-keyword>int</span>(n);i--;) <span class=hljs-keyword>if</span>((d=spheres[i].intersect(r))&&d<t){t=d;id=i;}
|
||
<span class=hljs-keyword>return</span> t<inf;
|
||
}
|
||
<span class=hljs-function>Vec <span class=hljs-title>radiance</span><span class=hljs-params>(<span class=hljs-keyword>const</span> Ray &r, <span class=hljs-keyword>int</span> depth, <span class=hljs-keyword>unsigned</span> <span class=hljs-keyword>short</span> *Xi)</span></span>{
|
||
<span class=hljs-keyword>double</span> t; <span class=hljs-comment>// distance to intersection </span>
|
||
<span class=hljs-keyword>int</span> id=<span class=hljs-number>0</span>; <span class=hljs-comment>// id of intersected object </span>
|
||
<span class=hljs-keyword>if</span> (!intersect(r, t, id)) <span class=hljs-keyword>return</span> Vec(); <span class=hljs-comment>// if miss, return black </span>
|
||
<span class=hljs-keyword>const</span> Sphere &obj = spheres[id]; <span class=hljs-comment>// the hit object </span>
|
||
Vec x=r.o+r.d*t, n=(x-obj.p).norm(), nl=n.dot(r.d)<<span class=hljs-number>0</span>?n:n*-<span class=hljs-number>1</span>, f=obj.c;
|
||
<span class=hljs-keyword>double</span> p = f.x>f.y && f.x>f.z ? f.x : f.y>f.z ? f.y : f.z; <span class=hljs-comment>// max refl </span>
|
||
<span class=hljs-keyword>if</span> (++depth><span class=hljs-number>5</span>) <span class=hljs-keyword>if</span> (erand48(Xi)<p) f=f*(<span class=hljs-number>1</span>/p); <span class=hljs-keyword>else</span> <span class=hljs-keyword>return</span> obj.e; <span class=hljs-comment>//R.R. </span>
|
||
<span class=hljs-keyword>if</span> (obj.refl == DIFF){ <span class=hljs-comment>// Ideal DIFFUSE reflection </span>
|
||
<span class=hljs-keyword>double</span> r1=<span class=hljs-number>2</span>*<span class=hljs-function>M_PI*<span class=hljs-title>erand48</span><span class=hljs-params>(Xi)</span>, r2</span>=erand48(Xi), r2s=<span class=hljs-built_in>sqrt</span>(r2);
|
||
Vec w=nl, u=((<span class=hljs-built_in>fabs</span>(w.x)><span class=hljs-number>.1</span>?Vec(<span class=hljs-number>0</span>,<span class=hljs-number>1</span>):Vec(<span class=hljs-number>1</span>))%w).norm(), v=w%u;
|
||
Vec d = (<span class=hljs-function>u*<span class=hljs-title>cos</span><span class=hljs-params>(r1)</span>*r2s + v*<span class=hljs-title>sin</span><span class=hljs-params>(r1)</span>*r2s + w*<span class=hljs-title>sqrt</span><span class=hljs-params>(<span class=hljs-number>1</span>-r2)</span>).<span class=hljs-title>norm</span><span class=hljs-params>()</span></span>;
|
||
<span class=hljs-keyword>return</span> obj.e + f.mult(radiance(Ray(x,d),depth,Xi));
|
||
} <span class=hljs-keyword>else</span> <span class=hljs-keyword>if</span> (obj.refl == SPEC) <span class=hljs-comment>// Ideal SPECULAR reflection </span>
|
||
<span class=hljs-keyword>return</span> obj.e + f.mult(radiance(Ray(x,r.d-n*<span class=hljs-number>2</span>*n.dot(r.d)),depth,Xi));
|
||
<span class=hljs-function>Ray <span class=hljs-title>reflRay</span><span class=hljs-params>(x, r.d-n*<span class=hljs-number>2</span>*n.dot(r.d)</span>)</span>; <span class=hljs-comment>// Ideal dielectric REFRACTION </span>
|
||
<span class=hljs-keyword>bool</span> into = n.dot(nl)><span class=hljs-number>0</span>; <span class=hljs-comment>// Ray from outside going in? </span>
|
||
<span class=hljs-keyword>double</span> nc=<span class=hljs-number>1</span>, nt=<span class=hljs-number>1.5</span>, nnt=into?nc/nt:nt/nc, ddn=r.d.dot(nl), cos2t;
|
||
<span class=hljs-keyword>if</span> ((cos2t=<span class=hljs-number>1</span>-nnt*nnt*(<span class=hljs-number>1</span>-ddn*ddn))<<span class=hljs-number>0</span>) <span class=hljs-comment>// Total internal reflection </span>
|
||
<span class=hljs-keyword>return</span> obj.e + f.mult(radiance(reflRay,depth,Xi));
|
||
Vec tdir = (r.d*nnt - n*((into?<span class=hljs-number>1</span>:-<span class=hljs-number>1</span>)*(ddn*nnt+<span class=hljs-built_in>sqrt</span>(cos2t)))).norm();
|
||
<span class=hljs-keyword>double</span> a=nt-nc, b=nt+nc, R0=a*a/(b*b), c = <span class=hljs-number>1</span>-(into?-ddn:tdir.dot(n));
|
||
<span class=hljs-keyword>double</span> Re=R0+(<span class=hljs-number>1</span>-R0)*c*c*c*c*c,Tr=<span class=hljs-number>1</span>-Re,P=<span class=hljs-number>.25</span>+<span class=hljs-number>.5</span>*Re,RP=Re/P,TP=Tr/(<span class=hljs-number>1</span>-P);
|
||
<span class=hljs-keyword>return</span> obj.e + f.mult(depth><span class=hljs-number>2</span> ? (erand48(Xi)<P ? <span class=hljs-comment>// Russian roulette </span>
|
||
radiance(reflRay,depth,Xi)*RP:radiance(Ray(x,tdir),depth,Xi)*TP) :
|
||
radiance(reflRay,depth,Xi)*Re+radiance(Ray(x,tdir),depth,Xi)*Tr);
|
||
}
|
||
<span class=hljs-function><span class=hljs-keyword>int</span> <span class=hljs-title>main</span><span class=hljs-params>(<span class=hljs-keyword>int</span> argc, <span class=hljs-keyword>char</span> *argv[])</span></span>{
|
||
<span class=hljs-keyword>int</span> w=<span class=hljs-number>1024</span>, h=<span class=hljs-number>768</span>, samps = argc==<span class=hljs-number>2</span> ? atoi(argv[<span class=hljs-number>1</span>])/<span class=hljs-number>4</span> : <span class=hljs-number>1</span>; <span class=hljs-comment>// # samples </span>
|
||
<span class=hljs-function>Ray <span class=hljs-title>cam</span><span class=hljs-params>(Vec(<span class=hljs-number>50</span>,<span class=hljs-number>52</span>,<span class=hljs-number>295.6</span>)</span>, <span class=hljs-title>Vec</span><span class=hljs-params>(<span class=hljs-number>0</span>,-<span class=hljs-number>0.042612</span>,-<span class=hljs-number>1</span>)</span>.<span class=hljs-title>norm</span><span class=hljs-params>()</span>)</span>; <span class=hljs-comment>// cam pos, dir </span>
|
||
Vec cx=Vec(w*<span class=hljs-number>.5135</span>/h), cy=(cx%cam.d).norm()*<span class=hljs-number>.5135</span>, r, *c=<span class=hljs-keyword>new</span> Vec[w*h];
|
||
<span class=hljs-preprocessor>#<span class=hljs-keyword>pragma</span> omp parallel for schedule(dynamic, <span class=hljs-number>1</span>) private(r) <span class=hljs-comment>// OpenMP </span></span>
|
||
<span class=hljs-keyword>for</span> (<span class=hljs-keyword>int</span> y=<span class=hljs-number>0</span>; y<h; y++){ <span class=hljs-comment>// Loop over image rows </span>
|
||
<span class=hljs-built_in>fprintf</span>(<span class=hljs-built_in>stderr</span>,<span class=hljs-string>"\rRendering (%d spp) %5.2f%%"</span>,samps*<span class=hljs-number>4</span>,<span class=hljs-number>100.</span>*y/(h-<span class=hljs-number>1</span>));
|
||
<span class=hljs-keyword>for</span> (<span class=hljs-keyword>unsigned</span> <span class=hljs-keyword>short</span> x=<span class=hljs-number>0</span>, Xi[<span class=hljs-number>3</span>]={<span class=hljs-number>0</span>,<span class=hljs-number>0</span>,y*y*y}; x<w; x++) <span class=hljs-comment>// Loop cols </span>
|
||
<span class=hljs-keyword>for</span> (<span class=hljs-keyword>int</span> sy=<span class=hljs-number>0</span>, i=(h-y-<span class=hljs-number>1</span>)*w+x; sy<<span class=hljs-number>2</span>; sy++) <span class=hljs-comment>// 2x2 subpixel rows </span>
|
||
<span class=hljs-keyword>for</span> (<span class=hljs-keyword>int</span> sx=<span class=hljs-number>0</span>; sx<<span class=hljs-number>2</span>; sx++, r=Vec()){ <span class=hljs-comment>// 2x2 subpixel cols </span>
|
||
<span class=hljs-keyword>for</span> (<span class=hljs-keyword>int</span> s=<span class=hljs-number>0</span>; s<samps; s++){
|
||
<span class=hljs-keyword>double</span> r1=<span class=hljs-number>2</span>*erand48(Xi), dx=r1<<span class=hljs-number>1</span> ? <span class=hljs-built_in>sqrt</span>(r1)-<span class=hljs-number>1</span>: <span class=hljs-number>1</span>-<span class=hljs-built_in>sqrt</span>(<span class=hljs-number>2</span>-r1);
|
||
<span class=hljs-keyword>double</span> r2=<span class=hljs-number>2</span>*erand48(Xi), dy=r2<<span class=hljs-number>1</span> ? <span class=hljs-built_in>sqrt</span>(r2)-<span class=hljs-number>1</span>: <span class=hljs-number>1</span>-<span class=hljs-built_in>sqrt</span>(<span class=hljs-number>2</span>-r2);
|
||
Vec d = cx*( ( (sx+<span class=hljs-number>.5</span> + dx)/<span class=hljs-number>2</span> + x)/w - <span class=hljs-number>.5</span>) +
|
||
cy*( ( (sy+<span class=hljs-number>.5</span> + dy)/<span class=hljs-number>2</span> + y)/h - <span class=hljs-number>.5</span>) + cam.d;
|
||
r = r + radiance(Ray(cam.o+d*<span class=hljs-number>140</span>,d.norm()),<span class=hljs-number>0</span>,Xi)*(<span class=hljs-number>1.</span>/samps);
|
||
} <span class=hljs-comment>// Camera rays are pushed ^^^^^ forward to start in interior </span>
|
||
c[i] = c[i] + Vec(clamp(r.x),clamp(r.y),clamp(r.z))*<span class=hljs-number>.25</span>;
|
||
}
|
||
}
|
||
FILE *f = fopen(<span class=hljs-string>"image.ppm"</span>, <span class=hljs-string>"w"</span>); <span class=hljs-comment>// Write image to PPM file. </span>
|
||
<span class=hljs-built_in>fprintf</span>(f, <span class=hljs-string>"P3\n%d %d\n%d\n"</span>, w, h, <span class=hljs-number>255</span>);
|
||
<span class=hljs-keyword>for</span> (<span class=hljs-keyword>int</span> i=<span class=hljs-number>0</span>; i<w*h; i++)
|
||
<span class=hljs-built_in>fprintf</span>(f,<span class=hljs-string>"%d %d %d "</span>, toInt(c[i].x), toInt(c[i].y), toInt(c[i].z));
|
||
} </code></snippet>
|
||
<snippet v-bind:name="'less'" v-bind:current="snippet"><code class="less hljs"><span class=hljs-comment>// Bootstrap</span>
|
||
<span class=hljs-comment>// Buttons</span>
|
||
<span class=hljs-comment>// --------------------------------------------------</span>
|
||
|
||
|
||
<span class=hljs-comment>// Base styles</span>
|
||
<span class=hljs-comment>// --------------------------------------------------</span>
|
||
|
||
<span class=hljs-class>.btn</span> {
|
||
<span class=hljs-attribute>display</span>: inline-block;
|
||
<span class=hljs-attribute>margin-bottom</span>: <span class=hljs-number>0</span>; <span class=hljs-comment>// For input.btn</span>
|
||
<span class=hljs-attribute>font-weight</span>: <span class=hljs-variable>@btn-font-weight</span>;
|
||
<span class=hljs-attribute>text-align</span>: center;
|
||
<span class=hljs-attribute>vertical-align</span>: middle;
|
||
<span class=hljs-attribute>touch-action</span>: manipulation;
|
||
<span class=hljs-attribute>cursor</span>: pointer;
|
||
<span class=hljs-attribute>background-image</span>: none; <span class=hljs-comment>// Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214</span>
|
||
<span class=hljs-attribute>border</span>: <span class=hljs-number>1px</span> solid transparent;
|
||
<span class=hljs-attribute>white-space</span>: nowrap;
|
||
<span class=hljs-class>.button-size</span>(<span class=hljs-variable>@padding-base-vertical</span>; <span class=hljs-variable>@padding-base-horizontal</span>; <span class=hljs-variable>@font-size-base</span>; <span class=hljs-variable>@line-height-base</span>; <span class=hljs-variable>@border-radius-base</span>);
|
||
<span class=hljs-class>.user-select</span>(none);
|
||
|
||
<span class=hljs-keyword>&</span>,
|
||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:active</span>,
|
||
<span class=hljs-keyword>&</span><span class=hljs-class>.active</span> {
|
||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:focus</span>,
|
||
<span class=hljs-keyword>&</span><span class=hljs-class>.focus</span> {
|
||
<span class=hljs-class>.tab-focus</span>();
|
||
}
|
||
}
|
||
|
||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:hover</span>,
|
||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:focus</span>,
|
||
<span class=hljs-keyword>&</span><span class=hljs-class>.focus</span> {
|
||
<span class=hljs-attribute>color</span>: <span class=hljs-variable>@btn-default-color</span>;
|
||
<span class=hljs-attribute>text-decoration</span>: none;
|
||
}
|
||
|
||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:active</span>,
|
||
<span class=hljs-keyword>&</span><span class=hljs-class>.active</span> {
|
||
<span class=hljs-attribute>outline</span>: <span class=hljs-number>0</span>;
|
||
<span class=hljs-attribute>background-image</span>: none;
|
||
<span class=hljs-class>.box-shadow</span>(inset <span class=hljs-number>0</span> <span class=hljs-number>3px</span> <span class=hljs-number>5px</span> <span class=hljs-function>rgba</span>(<span class=hljs-number>0</span>,<span class=hljs-number>0</span>,<span class=hljs-number>0</span>,.<span class=hljs-number>125</span>));
|
||
}
|
||
|
||
<span class=hljs-keyword>&</span><span class=hljs-class>.disabled</span>,
|
||
<span class=hljs-keyword>&</span><span class=hljs-attr_selector>[disabled]</span>,
|
||
<span class=hljs-tag>fieldset</span><span class=hljs-attr_selector>[disabled]</span> <span class=hljs-keyword>&</span> {
|
||
<span class=hljs-attribute>cursor</span>: <span class=hljs-variable>@cursor-disabled</span>;
|
||
<span class=hljs-class>.opacity</span>(.<span class=hljs-number>65</span>);
|
||
<span class=hljs-class>.box-shadow</span>(none);
|
||
}
|
||
|
||
<span class=hljs-tag>a</span><span class=hljs-keyword>&</span> {
|
||
<span class=hljs-keyword>&</span><span class=hljs-class>.disabled</span>,
|
||
<span class=hljs-tag>fieldset</span><span class=hljs-attr_selector>[disabled]</span> <span class=hljs-keyword>&</span> {
|
||
<span class=hljs-attribute>pointer-events</span>: none; <span class=hljs-comment>// Future-proof disabling of clicks on `<a>` elements</span>
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
<span class=hljs-comment>// Alternate buttons</span>
|
||
<span class=hljs-comment>// --------------------------------------------------</span>
|
||
|
||
<span class=hljs-class>.btn-default</span> {
|
||
<span class=hljs-class>.button-variant</span>(<span class=hljs-variable>@btn-default-color</span>; <span class=hljs-variable>@btn-default-bg</span>; <span class=hljs-variable>@btn-default-border</span>);
|
||
}
|
||
<span class=hljs-class>.btn-primary</span> {
|
||
<span class=hljs-class>.button-variant</span>(<span class=hljs-variable>@btn-primary-color</span>; <span class=hljs-variable>@btn-primary-bg</span>; <span class=hljs-variable>@btn-primary-border</span>);
|
||
}
|
||
<span class=hljs-comment>// Success appears as green</span>
|
||
<span class=hljs-class>.btn-success</span> {
|
||
<span class=hljs-class>.button-variant</span>(<span class=hljs-variable>@btn-success-color</span>; <span class=hljs-variable>@btn-success-bg</span>; <span class=hljs-variable>@btn-success-border</span>);
|
||
}
|
||
<span class=hljs-comment>// Info appears as blue-green</span>
|
||
<span class=hljs-class>.btn-info</span> {
|
||
<span class=hljs-class>.button-variant</span>(<span class=hljs-variable>@btn-info-color</span>; <span class=hljs-variable>@btn-info-bg</span>; <span class=hljs-variable>@btn-info-border</span>);
|
||
}
|
||
<span class=hljs-comment>// Warning appears as orange</span>
|
||
<span class=hljs-class>.btn-warning</span> {
|
||
<span class=hljs-class>.button-variant</span>(<span class=hljs-variable>@btn-warning-color</span>; <span class=hljs-variable>@btn-warning-bg</span>; <span class=hljs-variable>@btn-warning-border</span>);
|
||
}
|
||
<span class=hljs-comment>// Danger and error appear as red</span>
|
||
<span class=hljs-class>.btn-danger</span> {
|
||
<span class=hljs-class>.button-variant</span>(<span class=hljs-variable>@btn-danger-color</span>; <span class=hljs-variable>@btn-danger-bg</span>; <span class=hljs-variable>@btn-danger-border</span>);
|
||
}</code></snippet>
|
||
<snippet v-bind:name="'python'" v-bind:current="snippet"><code class="python hljs"><span class=hljs-comment># Curio, https://github.com/dabeaz/curio/blob/master/curio/network.py</span>
|
||
<span class=hljs-keyword>async</span> <span class=hljs-function><span class=hljs-keyword>def</span> <span class=hljs-title>open_connection</span><span class=hljs-params>(host, port, *, ssl=None, source_addr=None, server_hostname=None, timeout=None)</span>:</span>
|
||
<span class=hljs-string>'''
|
||
Create a TCP connection to a given Internet host and port with optional SSL applied to it.
|
||
'''</span>
|
||
<span class=hljs-keyword>if</span> server_hostname <span class=hljs-keyword>and</span> <span class=hljs-keyword>not</span> ssl:
|
||
<span class=hljs-keyword>raise</span> ValueError(<span class=hljs-string>'server_hostname is only applicable with SSL'</span>)
|
||
|
||
sock = <span class=hljs-keyword>await</span> socket.create_connection((host,port), timeout, source_addr)
|
||
|
||
<span class=hljs-keyword>try</span>:
|
||
<span class=hljs-comment># Apply SSL wrapping to the connection, if applicable</span>
|
||
<span class=hljs-keyword>if</span> ssl:
|
||
sock = <span class=hljs-keyword>await</span> _wrap_ssl_client(sock, ssl, server_hostname)
|
||
|
||
<span class=hljs-keyword>return</span> sock
|
||
<span class=hljs-keyword>except</span> Exception:
|
||
sock._socket.close()
|
||
<span class=hljs-keyword>raise</span>
|
||
|
||
<span class=hljs-keyword>async</span> <span class=hljs-function><span class=hljs-keyword>def</span> <span class=hljs-title>open_unix_connection</span><span class=hljs-params>(path, *, ssl=None, server_hostname=None)</span>:</span>
|
||
<span class=hljs-keyword>if</span> server_hostname <span class=hljs-keyword>and</span> <span class=hljs-keyword>not</span> ssl:
|
||
<span class=hljs-keyword>raise</span> ValueError(<span class=hljs-string>'server_hostname is only applicable with SSL'</span>)
|
||
|
||
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||
<span class=hljs-keyword>try</span>:
|
||
<span class=hljs-keyword>await</span> sock.connect(path)
|
||
|
||
<span class=hljs-comment># Apply SSL wrapping to connection, if applicable</span>
|
||
<span class=hljs-keyword>if</span> ssl:
|
||
sock = <span class=hljs-keyword>await</span> _wrap_ssl_client(sock, ssl, server_hostname)
|
||
|
||
<span class=hljs-keyword>return</span> sock
|
||
<span class=hljs-keyword>except</span> Exception:
|
||
sock._socket.close()
|
||
<span class=hljs-keyword>raise</span>
|
||
</code></snippet>
|
||
<snippet v-bind:name="'elixir'" v-bind:current="snippet"><code class="elixiar hljs ruby"><span class=hljs-comment># Phoenix, https://github.com/phoenixframework/phoenix/blob/master/lib/phoenix.ex</span>
|
||
defmodule <span class=hljs-constant>Phoenix</span> <span class=hljs-keyword>do</span>
|
||
<span class=hljs-variable>@moduledoc</span> <span class=hljs-string>""</span><span class=hljs-string>"
|
||
This is documentation for the Phoenix project.
|
||
By default, Phoenix applications depend on other packages besides
|
||
Phoenix itself. Below we provide a short explanation with links to
|
||
their documentation for each of those projects:
|
||
* [Ecto](http://hexdocs.pm/ecto) - a language integrated query and
|
||
database wrapper
|
||
* [Phoenix](http://hexdocs.pm/phoenix) - the Phoenix web framework
|
||
(these docs)
|
||
* [Phoenix HTML](http://hexdocs.pm/phoenix_html) - conveniences for
|
||
working with HTML in Phoenix
|
||
* [Plug](http://hexdocs.pm/plug) - a specification and conveniences
|
||
for composable modules in between web applications
|
||
There are also optional packages depending on your configuration:
|
||
* [Phoenix PubSub Redis](http://hexdocs.pm/phoenix_pubsub_redis) - use
|
||
Redis to power Phoenix PubSub system
|
||
"</span><span class=hljs-string>""</span>
|
||
use <span class=hljs-constant>Application</span>
|
||
|
||
<span class=hljs-variable>@doc</span> <span class=hljs-keyword>false</span>
|
||
<span class=hljs-function><span class=hljs-keyword>def</span> <span class=hljs-title>start</span><span class=hljs-params>(_type, _args)</span> <span class=hljs-title>do</span></span>
|
||
<span class=hljs-comment># Warm up caches</span>
|
||
<span class=hljs-number>_</span> = <span class=hljs-constant>Phoenix</span>.<span class=hljs-constant>Template</span>.engines
|
||
<span class=hljs-number>_</span> = <span class=hljs-constant>Phoenix</span>.<span class=hljs-constant>Template</span>.format_encoder(<span class=hljs-string>"index.html"</span>)
|
||
|
||
<span class=hljs-comment># Configure proper system flags from Phoenix only</span>
|
||
<span class=hljs-keyword>if</span> stacktrace_depth = <span class=hljs-constant>Application</span>.get_env(<span class=hljs-symbol>:phoenix</span>, <span class=hljs-symbol>:stacktrace_depth</span>) <span class=hljs-keyword>do</span>
|
||
<span class=hljs-symbol>:erlang</span>.system_flag(<span class=hljs-symbol>:backtrace_depth</span>, stacktrace_depth)
|
||
<span class=hljs-keyword>end</span>
|
||
|
||
<span class=hljs-comment># Start the supervision tree</span>
|
||
<span class=hljs-constant>Phoenix</span>.<span class=hljs-constant>Supervisor</span>.start_link
|
||
<span class=hljs-keyword>end</span>
|
||
<span class=hljs-keyword>end</span>
|
||
</code></snippet>
|
||
</section>
|
||
<script type="text/x-template" id="compact-picker-template">
|
||
<template v-for="item in items">
|
||
<a href="javascript:;" v-bind:class="{active:(item === current)}" v-on:click.prevent="setItem(item)">{{item}}</a>
|
||
</template>
|
||
</script>
|
||
<script type="text/x-template" id="code-snippet-template">
|
||
<pre v-bind:id="name" v-show="(name === current)">
|
||
<slot></slot>
|
||
</pre>
|
||
</script>
|
||
<script src="index-tabs.js"></script>
|
||
</body>
|
||
</html> |