<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>htkc [dot] org</title>
	<atom:link href="http://htkc.org/feed" rel="self" type="application/rss+xml" />
	<link>http://htkc.org</link>
	<description>Les tribulations de madprog</description>
	<lastBuildDate>Fri, 03 Feb 2012 12:44:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Code C# permettant de tracer les entrées et sorties des méthodes</title>
		<link>http://htkc.org/archives/244</link>
		<comments>http://htkc.org/archives/244#comments</comments>
		<pubDate>Fri, 03 Feb 2012 12:44:29 +0000</pubDate>
		<dc:creator>madprog</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://htkc.org/?p=244</guid>
		<description><![CDATA[using System.Diagnostics; using System.Web.UI; public static class DebugExtensions { private static string traceIndent = ""; public static void traceEnter(this TemplateControl self, params object[] args) { StackTrace st = new StackTrace(); string method = st.GetFrame(1).GetMethod().Name; string parent_method = st.GetFrame(2).GetMethod().Name; string filename = st.GetFrame(2).GetFileName(); int fileline = st.GetFrame(2).GetFileLineNumber(); if (args != null &#038;&#038; args.Length > 0) { [...]]]></description>
			<content:encoded><![CDATA[<pre>using System.Diagnostics;
using System.Web.UI;

public static class DebugExtensions
{
    private static string traceIndent = "";

    public static void traceEnter(this TemplateControl self, params object[] args)
    {
        StackTrace st = new StackTrace();
        string method = st.GetFrame(1).GetMethod().Name;
        string parent_method = st.GetFrame(2).GetMethod().Name;
        string filename = st.GetFrame(2).GetFileName();
        int fileline = st.GetFrame(2).GetFileLineNumber();
        if (args != null &#038;& args.Length > 0)
        {
            string arguments = "";
            foreach (object arg in args) arguments += ", " + (arg ?? "<null>").ToString();
            method += "(" + arguments.Substring(2) + ")";
        }
        Debug.WriteLine(traceIndent + ">> " + method + " (called from " + parent_method + "@" + filename + ":" + fileline + ")");
        traceIndent += "  ";
    }

    public static void traceExit(this TemplateControl self)
    {
        StackTrace st = new StackTrace();
        traceIndent = traceIndent.Substring(2);
        Debug.WriteLine(traceIndent + "<< " + st.GetFrame(1).GetMethod().Name);
    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://htkc.org/archives/244/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSL root certificates &amp; curl</title>
		<link>http://htkc.org/archives/239</link>
		<comments>http://htkc.org/archives/239#comments</comments>
		<pubDate>Sat, 10 Dec 2011 15:41:11 +0000</pubDate>
		<dc:creator>madprog</dc:creator>
				<category><![CDATA[Administration système]]></category>

		<guid isPermaLink="false">http://htkc.org/?p=239</guid>
		<description><![CDATA[Afin de mettre à jour la liste des certificats racine de curl, il suffit de : sauvegarder l'ancienne liste : mv $(curl-config --ca){,.old} télécharger la nouvelle liste : curl -o $(curl-config --ca) http://curl.haxx.se/ca/cacert.pem]]></description>
			<content:encoded><![CDATA[<p>Afin de mettre à jour la liste des certificats racine de curl, il suffit de :</p>
<ol>
<li>sauvegarder l'ancienne liste : <code>mv $(curl-config --ca){,.old}</code></li>
<li>télécharger la nouvelle liste : <code>curl -o $(curl-config --ca) http://curl.haxx.se/ca/cacert.pem</code></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://htkc.org/archives/239/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache, Mercurial, hgweb.cgi unique pour plusieurs dépôts de version</title>
		<link>http://htkc.org/archives/212</link>
		<comments>http://htkc.org/archives/212#comments</comments>
		<pubDate>Sat, 20 Feb 2010 03:14:53 +0000</pubDate>
		<dc:creator>madprog</dc:creator>
				<category><![CDATA[Administration système]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://htkc.org/?p=212</guid>
		<description><![CDATA[Afin de pouvoir héberger plusieurs dépôts de version sur mon serveur, j'ai tendance à dupliquer la configuration Apache suivante : &#60;Directory "/path/to/repository"&#62; AuthType Basic AuthName "repository login" AuthGroupFile /dev/null AuthUserFile /path/to/repository/.htpasswd &#60;LimitExcept GET&#62; require valid-user &#60;/LimitExcept&#62; AllowOverride None Options None Order allow,deny Allow from all &#60;/Directory&#62; ScriptAliasMatch ^/repository(.*) /path/to/repository/hgweb.cgi$1 Seulement, cette configuration oblige à copier [...]]]></description>
			<content:encoded><![CDATA[<p>Afin de pouvoir héberger plusieurs dépôts de version sur mon serveur, j'ai tendance à dupliquer la configuration Apache suivante :</p>
<pre>&lt;Directory "/path/to/repository"&gt;
    AuthType Basic
    AuthName "repository login"
    AuthGroupFile /dev/null
    AuthUserFile /path/to/repository/.htpasswd
    &lt;LimitExcept GET&gt;
        require valid-user
    &lt;/LimitExcept&gt;
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
&lt;/Directory&gt;

ScriptAliasMatch ^/repository(.*) /path/to/repository/hgweb.cgi$1</pre>
<p>Seulement, cette configuration oblige à copier le script CGI <code>hgweb.cgi</code> dans tous les dépôts, ce qui n'est évidemment pas très propre. Une solution plus acceptable serait de placer ce script dans le dossier CGI standard d'Apache (<code>/usr/local/www/apache22/cgi-bin</code> sous FreeBSD), et d'utiliser toujours le même.</p>
<p>J'ai donc regardé le contenu de ce script (ici sans les commentaires) :</p>
<pre>#!/usr/bin/env python
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgweb_mod import hgweb
import mercurial.hgweb.wsgicgi as wsgicgi
import os

repo_path = os.getcwd()
application = hgweb(repo_path, os.path.basename(repo_path))
wsgicgi.launch(application)</pre>
<p>Très rapidement, on voit que les modules de mercurial sont importés, puis le script récupère le chemin du répertoire courant et lance l'application hgweb à partir de ce paramètre.</p>
<p>Dans l'état actuel des choses, si on place ce script dans le dossier <code>cgi-bin</code> d'Apache, <code>repo_path</code> contiendra toujours le chemin de ce dossier. L'idée du hack est donc de transmettre l'information du chemin du dépôt au script CGI.</p>
<p>La première solution qui vient à l'esprit est d'utiliser une variable d'environnement. Seulement, dans le cas où plusieurs dépôts doivent être gérés dans le même <code>VirtualHost</code> (ou pour le serveur global), une seule variable d'environnement est utilisable.</p>
<p>Mon idée est de le passer en paramètre du script CGI à l'aide de la ligne suivante :</p>
<pre>ScriptAliasMatch ^/repository(.*) /path/to/repository/hgweb.cgi$1</pre>
<p>En effet, le script peut récupérer la chaîne <code>$1</code>, située après le chemin du script. En ajoutant les séparateurs <code>/_/</code> permettant d'isoler le chemin du dépôt, on obtient par exemple :</p>
<pre>ScriptAliasMatch ^/repository(.*) /path/to/repository/hgweb.cgi/_/path/to/repository/_/$1</pre>
<p>Il reste ensuite à modifier le script CGI de manière à ce qu'il récupère le chemin en question, le retire des variables d'environnement concernées (afin que l'application hgweb ne soit pas perturbée), et lance l'application comme avant :</p>
<pre>#!/usr/bin/env python
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgweb_mod import hgweb
import mercurial.hgweb.wsgicgi as wsgicgi
import os

repo_path = os.getcwd()

path_info = os.getenv('PATH_INFO', '')
if path_info.startswith('/_/'):
    repo_path, new_path_info = path_info[2:].split('/_', 1)
    os.environ['PATH_INFO'] = new_path_info
    os.environ['PATH_TRANSLATED'] = os.environ['DOCUMENT_ROOT'] + new_path_info

application = hgweb(repo_path, os.path.basename(repo_path))
wsgicgi.launch(application)</pre>
<p>Quelques explications s'imposent. Comme avant, on récupère le chemin du répertoire où se situe le script CGI. Puis, on récupère la variable d'environnement <code>PATH_INFO</code>. Si elle commence par notre séparateur, alors on isole le chemin du dépôt des paramètres de hgweb. On met à jour les variables d'environnement <code>PATH_INFO</code> et <code>PATH_TRANSLATED</code> (même si je pense que seule la première est utilisée par hgweb). Enfin, on lance l'application en utilisant, soit le chemin où se situe le script CGI, soit le chemin passé en paramètre.</p>
<p>Une fois ce script installé, la configuration d'Apache est légèrement différente :</p>
<pre>&lt;Location "/repository"&gt;
    AuthType Basic
    AuthName "repository login"
    AuthGroupFile /dev/null
    AuthUserFile /path/to/repository/.htpasswd
    &lt;LimitExcept GET&gt;
        require valid-user
    &lt;/LimitExcept&gt;
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
&lt;/Location&gt;

ScriptAliasMatch ^/repository(.*) /usr/local/www/apache22/cgi-bin/hgweb.cgi/_/path/to/repository/_/$1</pre>
<p>L'autorisation ne s'effectue plus sur le répertoire du dépôt <code>/path/to/repository/</code>, mais sur l'emplacement <code>/repository</code>.</p>
<p>Ce hack est certainement faisable d'une manière plus propre, mais comme je n'ai rien trouvé de mieux pour l'instant, je le propose. Si quelqu'un connaît une autre manière de faire, je lui serai gré de m'en faire part dans les commentaire parce qu'elle m'intéresse !</p>
]]></content:encoded>
			<wfw:commentRss>http://htkc.org/archives/212/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bigos</title>
		<link>http://htkc.org/archives/207</link>
		<comments>http://htkc.org/archives/207#comments</comments>
		<pubDate>Tue, 24 Nov 2009 11:41:47 +0000</pubDate>
		<dc:creator>madprog</dc:creator>
				<category><![CDATA[Cuisine]]></category>

		<guid isPermaLink="false">http://htkc.org/?p=207</guid>
		<description><![CDATA[Ingrédients : 1kg de choucroute crue ; 1kg (ou plus) de chou blanc (en fait une «boule») ; 250g de poitrine fumée de bonne qualité ; 1kg de saucisson à l'ail fumé ou 2 saucisses de Morteau ; 1kg de palette ou d'échine de porc rôti au four avec des oignons ; quelques cèpes séchés [...]]]></description>
			<content:encoded><![CDATA[<p>Ingrédients :</p>
<ul>
<li>1kg de choucroute crue ;</li>
<li>1kg (ou plus) de chou blanc (en fait une «boule») ;</li>
<li>250g de poitrine fumée de bonne qualité ;</li>
<li>1kg de saucisson à l'ail fumé ou 2 saucisses de Morteau ;</li>
<li>1kg de palette ou d'échine de porc rôti au four avec des oignons ;</li>
<li>quelques cèpes séchés trempés dans un bol d'eau la veille ;</li>
<li>une toute petite boîte de concentré de tomate (ou tomates séchées)</li>
<li>1 feuille de laurier, poivre, sel : ± 2 cuillères à café, baies de genièvre ;</li>
<li>1 verre de vin blanc.</li>
</ul>
<p>Préparation :</p>
<ol>
<li>dans une grande marmite couvrir la 	choucroute d’eau, ajouter la poitrine fumée en cubes, le laurier et le genièvre et cuire une heure à feu moyen ;</li>
<li>couper le chou blanc en fines lamelles, le saler puis le faire bouillir 10 minutes dans l’eau de trempage des cèpes en remuant ;</li>
<li>réunir les deux choux, ajouter les cèpes, le poivre en grains, la viande, la saucisse, le vin, les tomates ; on peut ajouter une cuillère à soupe rase de sucre ;</li>
<li>faire braiser : les choux doivent être fondants ; on peut diviser la cuisson en plusieurs jours, réchauffer, ce n’est que meilleur !</li>
</ol>
<p>Merci à ma mère pour cette recette que j'espère pouvoir réaliser bientôt !</p>
]]></content:encoded>
			<wfw:commentRss>http://htkc.org/archives/207/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ragoût de pommes de terre et de courgettes (pour deux personnes)</title>
		<link>http://htkc.org/archives/203</link>
		<comments>http://htkc.org/archives/203#comments</comments>
		<pubDate>Mon, 23 Nov 2009 20:37:23 +0000</pubDate>
		<dc:creator>madprog</dc:creator>
				<category><![CDATA[Cuisine]]></category>

		<guid isPermaLink="false">http://htkc.org/?p=203</guid>
		<description><![CDATA[épluchez quatre pommes de terre ; mettez les pommes de terre dans une casserole avec de l'eau, et mettez le tout à cuire ; émincez un oignon que vous ferez revenir dans une poêle avec de l'huile d'olive à feu doux ; découpez deux courgettes en tranches ; une fois que les oignons ont commencé [...]]]></description>
			<content:encoded><![CDATA[<ol>
<li>épluchez quatre pommes de terre ;</li>
<li>mettez les pommes de terre dans une casserole avec de l'eau, et mettez le tout à cuire ;</li>
<li>émincez un oignon que vous ferez revenir dans une poêle avec de l'huile d'olive à feu doux ;</li>
<li>découpez deux courgettes en tranches ;</li>
<li>une fois que les oignons ont commencé à fondre légèrement, recouvrez-les des courgettes, et remuez de temps en temps afin que les oignons ne brûlent pas et que les courgettes cuisent bien, salez et poivrez ;</li>
<li>quand les pommes de terre sont cuites, sortez-les de l'eau et découpez-les en morceaux ;</li>
<li>mélangez les pommes de terre, les oignons et les courgettes dans une casserole (si possible la casserole qui a servi à cuire les pommes de terre : ça fera moins de vaisselle) ;</li>
<li>ajoutez un grand verre d'eau dans la casserole et touillez en continuant à faire cuire, jusqu'à ce que les morceaux soient mêlés d'une purée de pommes de terre et de courgettes ;</li>
<li>ajoutez une gousse d'ail découpée en morceaux et continuez à touiller jusqu'à ce que ça vous paraisse bon ;</li>
<li>bon appétit !</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://htkc.org/archives/203/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quart de cercle à base de courbes de Bézier</title>
		<link>http://htkc.org/archives/3</link>
		<comments>http://htkc.org/archives/3#comments</comments>
		<pubDate>Sun, 15 Mar 2009 14:13:14 +0000</pubDate>
		<dc:creator>madprog</dc:creator>
				<category><![CDATA[Mathématiques]]></category>

		<guid isPermaLink="false">http://htkc.org/?p=3</guid>
		<description><![CDATA[La librairie Swing de Java permet de dessiner directement sur un JComponent à l'aide des méthodes de Graphics2D. Il est même possible d'avoir quelque chose de joliment anti-aliasé ! Seulement, pour ça, il faut dessiner à l'aide de Shapes. Il y a des formes prédéfinies (arcs, ellipses, rectangles droits et arrondis, polygones, …), mais si [...]]]></description>
			<content:encoded><![CDATA[<p>La librairie Swing de Java permet de dessiner directement sur un <code>JComponent</code> à l'aide des méthodes de <code>Graphics2D</code>.</p>
<p>Il est même possible d'avoir quelque chose de joliment anti-aliasé ! Seulement, pour ça, il faut dessiner à l'aide de <code>Shape</code>s. Il y a des formes prédéfinies (arcs, ellipses, rectangles droits et arrondis, polygones, …), mais si on veut créer des formes personnalisées, il faut passer par un <code>GeneralPath</code> construit à partir de courbes de Bézier.</p>
<p>Et en construisant une forme personnalisée contenant un quart de cercle, j'ai cherché comment placer les points de façon optimale pour que la courbe s'approche le plus possible d'un quart de cercle. Pour ça, j'ai fait un peu de mathématiques…<span id="more-3"></span></p>
<h3>Définition d'une courbe de Bézier</h3>
<p>Les courbes de Bézier sont des courbes polynomiales paramétriques (<a href="http://fr.wikipedia.org/wiki/Courbe_de_B%C3%A9zier">définition sur Wikipédia</a>). Plus simplement, il s'agit d'un ensemble de barycentres de points de contrôle.</p>
<p>Les courbes sont l'ensemble des barycentres G tels que, pour <span class='MathJax_Preview'>\(t\in\left[0,1\right]\)</span></p>
<ul>
<li>deux points :<br />
<blockquote><p><span class='MathJax_Preview'>\(\overrightarrow{G}=\overrightarrow{A}\left(1-t\right)+\overrightarrow{B}t\)</span></p></blockquote>
</li>
<li>trois points :<br />
<blockquote><p><span class='MathJax_Preview'>\(\overrightarrow{G}=\overrightarrow{A}\left(1-t\right)^2+2\overrightarrow{B}\left(1-t\right)t+\overrightarrow{C}t^2\)</span></p></blockquote>
</li>
<li>quatre points :<br />
<blockquote><p><span class='MathJax_Preview'>\(\overrightarrow{G}=\overrightarrow{A}\left(1-t\right)^3+3\overrightarrow{B}\left(1-t\right)^2t+3\overrightarrow{C}\left(1-t\right)t^2+\overrightarrow{D}t^3\)</span></p></blockquote>
</li>
<li>n points :<br />
<blockquote><p><span class='MathJax_Preview'>\(\overrightarrow{G}=\sum_{i=0}^n\dbinom{n}{i}t^i\left(1-t\right)^{n-i}\overrightarrow{P_i}\)</span></p></blockquote>
</li>
</ul>
<p>Dans mon cas, je vais utiliser des courbes cubiques (donc de degré trois). J'aurai donc quatre points A, B, C et D.</p>
<h3>Approcher un quart de cercle</h3>
<div id="attachment_36" class="wp-caption alignright" style="width: 239px"><img class="size-full wp-image-36" title="quart_cercle" src="http://htkc.org/wp-content/uploads/2009/03/quart_cercle1.png" alt="quart_cercle" width="229" height="227" /><p class="wp-caption-text">Dessin</p></div>
<p>En chacun de ses points le cercle admet une tangente. La tangente en M est la droite passant par M et perpendiculaire au rayon issu de M. (<a href="http://fr.wikipedia.org/wiki/Tangente_(g%C3%A9om%C3%A9trie)#Exemple_:_tangente_au_cercle">article "Tagente (géométrie)" sur Wikipédia</a>)</p>
<p>Par conséquent, ma courbe devra être tangente aux droites a et d en A et D respectivement. Une courbe de Bézier définie par quatre points de contrôle A, B, C et D est toujours tangente en A à la droite (AB), et en D à la droite (CD). Par conséquent, (AB) = a et (CD) = d. Je peux donc localiser C sur la droite d, et B sur la droite A.</p>
<p>D'autre part, afin de respecter l'axe de symétrie du quart de cercle (l'axe x-y=0), |AB| = |DC|.</p>
<p>On peut donc définir A comme étant aux coordonnées (R, 0), B en (R, Rk), C en (Rk, R) et D en (0, R), R étant le rayon du quart de cercle (R=2 sur le dessin ci-contre), et k étant tel que l'erreur entre la courbe et le cercle soit minimale ou nulle.</p>
<p>En équations paramétriques, notre courbe de Bézier est définie par :</p>
<blockquote><p><span class='MathJax_Preview'>\(C:\left\{\begin{array}{l}x=x_A\left(1-t\right)^3+3x_B\left(1-t\right)^2t+3x_C\left(1-t\right)t^2+x_Dt^3\\y=y_A\left(1-t\right)^3+3y_B\left(1-t\right)^2t+3y_C\left(1-t\right)t^2+y_Dt^3\end{array}\right.,t\in\left[0,1\right]\)</span></p></blockquote>
<p>Soit, compte tenu de nos définitions :</p>
<blockquote><p><span class='MathJax_Preview'>\(C:\left\{\begin{array}{l}x=R\left(1-t\right)^3+3R\left(1-t\right)^2t+3Rk\left(1-t\right)t^2\\y=3Rk\left(1-t\right)^2t+3R\left(1-t\right)t^2+Rt^3\end{array}\right.,t\in\left[0,1\right]\)</span></p></blockquote>
<p>Il ne reste qu'à factoriser tout ça proprement pour isoler les degrés de t :</p>
<blockquote><p><span class='MathJax_Preview'>\(C:\left\{\begin{array}{l}x=\left(\left(2-3\,k\right)\,t^3+\left(3\,k-3\right)\,t^2+1\right)\,R\\y=\left(\left(3\,k-2\right)\,t^3+\left(3-6\,k\right)\,t^2+3\,k\,t\right)\,R\end{array}\right.,t\in\left[0,1\right]\)</span></p></blockquote>
<h3>Calcul de l'erreur</h3>
<p>Afin de définir la différence entre la courbe et l'arc de cercle, j'ai choisi de comparer les surfaces définies par le quart de disque d'une part, et par la courbe de Bézier, [OA] et [OD] d'autre part.</p>
<p>La surface du quart de disque est connue :</p>
<blockquote><p><span class='MathJax_Preview'>\(S_1=\frac\pi4R^2\)</span></p></blockquote>
<p>La surface délimitée par la courbe de Bézier est une intégrale. La surface d'une courbe paramétrique définie par <span class='MathJax_Preview'>\(\left\{\begin{array}{l}x=x(t)\\y=y(t)\end{array}\right.,t\in\left[0,1\right]\)</span> est :</p>
<blockquote><p><span class='MathJax_Preview'>\(S=-\int_0^1y(t)x^\prime(t)dt\)</span></p></blockquote>
<p>Dans mon cas :</p>
<blockquote><p><span class='MathJax_Preview'>\(S_2=-R^2\int_0^1\left(\left(3\,k-2\right)\,t^3+\left(3-6\,k\right)\,t^2+3\,k\,t<br />
\right)\left(\left(6-9\,k\right)\,t^2+\left(6\,k-6\right)\,t\right)dt\)</span></p>
<p><span class='MathJax_Preview'>\(S_2=-R^2\,\left[-\frac12\left(9\,k^2-12\,k+4\right)\,t^6+\frac35\left(24\,k^2-31\,k+10\right)\,t^5-\frac94\left(7\,k^2-8\,k+2\right)\,t^4+6k\left(k-1\right)\,t^3\right]_0^1\)</span></p>
<p><span class='MathJax_Preview'>\(S_2=-\frac1{20}\left(3\,k^2-12\,k-10\right)\,R^2\)</span></p></blockquote>
<p>L'erreur commise est la distance entre <span class='MathJax_Preview'>\(S_1\)</span> et <span class='MathJax_Preview'>\(S_2\)</span> :</p>
<blockquote><p><span class='MathJax_Preview'>\(E=S_1-S_2\)</span></p></blockquote>
<h3>Calcul de k</h3>
<p>On cherche k tel que E=0 :</p>
<blockquote><p><span class='MathJax_Preview'>\(\frac\pi4R^2+\frac1{20}\left(3\,k^2-12\,k-10\right)\,R^2=0\)</span></p></blockquote>
<blockquote><p><span class='MathJax_Preview'>\(\frac3{20}\,k^2-\frac35\,k+\frac{-2+\pi}4=0\)</span></p>
<p><span class='MathJax_Preview'>\(\Delta_2=\frac{66-15\pi}{100}>0\)</span></p>
<p><span class='MathJax_Preview'>\(k_1=\frac{6+\sqrt{66-15\pi}}{3}\simeq3.448221522195532\)</span></p></blockquote>
<blockquote><p><span class='MathJax_Preview'>\(k_2=\frac{6-\sqrt{66-15\pi}}{3}\simeq0.5517784778044676\)</span></p></blockquote>
<h3>Conclusion</h3>
<div id="attachment_123" class="wp-caption alignright" style="width: 160px"><a href="http://htkc.org/wp-content/uploads/2009/03/courbes_k1_k22.png"><img class="size-thumbnail wp-image-123" title="courbes_k1_k22" src="http://htkc.org/wp-content/uploads/2009/03/courbes_k1_k22-150x150.png" alt="Tracé des courbes de Bézier pour les deux valeurs de k" width="150" height="150" /></a><p class="wp-caption-text">Tracé des courbes de Bézier pour les deux valeurs de k</p></div>
<p>La valeur de k qui nous intéresse est <span class='MathJax_Preview'>\(k_2\)</span> car elle est la seule telle que <span class='MathJax_Preview'>\(0<=k<=1\)</span>. Pour se convaincre que les autres valeurs ne conviennent pas, il suffit de tracer les deux courbes de Bézier (voir le schéma ci-contre).</p>
<p>On remarque alors que la courbe étant un quart de cercle est la courbe de Bézier telle que <span class='MathJax_Preview'>\(k=\frac{6-\sqrt{66-15\pi}}{3}\simeq0.5517784778044676\)</span>.</p>
<p>Pour construire un cercle complet, il suffit de construire les images de ce quart de cercle par symétries.</p>
]]></content:encoded>
			<wfw:commentRss>http://htkc.org/archives/3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

