374 lines
38 KiB
HTML
374 lines
38 KiB
HTML
<!DOCTYPE html><html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Iosevka</title>
|
||
<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>
|
||
<script src="https://cdn.bootcss.com/zepto/1.1.6/zepto.min.js"></script>
|
||
<script>if (!window.Zepto) document.write('<script src="zepto.min.js">\x3C/script>')</script>
|
||
</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-beta4 “Yamanashi”</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><h2>Preview</h2>
|
||
<p><span id="themes-holder" class="options"></span>| <span id="samples-holder" class="options"></span></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section id="preview">
|
||
<pre id="javascript"><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></pre>
|
||
<pre id="cpp"><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></pre>
|
||
<pre id="less"><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></pre>
|
||
<pre id="python"><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></pre>
|
||
<pre id="elixir"><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></pre>
|
||
</section>
|
||
<script>
|
||
var blocks = $('pre');
|
||
var fn;
|
||
blocks.forEach(function(b){
|
||
var name = b.id;
|
||
var a = $('<a>');
|
||
a.html(name);
|
||
a.attr('href', '#');
|
||
var handler = function(){
|
||
blocks.hide();
|
||
$(b).show();
|
||
$('#samples-holder > a').removeClass('active');
|
||
a.addClass('active');
|
||
return false;
|
||
}
|
||
if(!fn) fn = handler;
|
||
a.on('click', handler);
|
||
$('#samples-holder').append(a);
|
||
});
|
||
|
||
fn();
|
||
|
||
var ft;
|
||
['dark', 'light'].forEach(function(theme){
|
||
var a = $('<a>');
|
||
a.html(theme);
|
||
a.attr('href', '#');
|
||
var handler = function(){
|
||
$('section#preview').attr('class', theme);
|
||
$('#themes-holder > a').removeClass('active');
|
||
a.addClass('active');
|
||
return false;
|
||
}
|
||
if(!ft) ft = handler;
|
||
a.on('click', handler);
|
||
$('#themes-holder').append(a);
|
||
});
|
||
ft();
|
||
</script>
|
||
</body>
|
||
</html> |