<?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>Code | devblog</title>
	<atom:link href="https://eboreal.com/devblog/tag/code/feed/" rel="self" type="application/rss+xml" />
	<link>https://eboreal.com/devblog</link>
	<description></description>
	<lastBuildDate>Fri, 18 Nov 2022 06:56:39 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Un vent nouveau</title>
		<link>https://eboreal.com/devblog/un-vent-nouveau/</link>
		
		<dc:creator><![CDATA[boreal]]></dc:creator>
		<pubDate>Fri, 05 Apr 2013 20:49:52 +0000</pubDate>
				<category><![CDATA[A la une]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Sail Boat Sim Race]]></category>
		<category><![CDATA[Code]]></category>
		<guid isPermaLink="false">http://eboreal.com/devblog/?p=258</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_0 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_0">
								<div class="et_pb_column et_pb_column_4_4 et_pb_column_0  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_0  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner">Comme la version précédente ne me convenait pas, j&rsquo;ai décidé de reprendre la façon de calculer le vent. Je voulais quelque chose de plus prédictible, de plus simple à mettre en œuvre et que l&rsquo;on puisse interroger pour n&rsquo;importe quel point de la carte.</p>
<p>voila le résultat :</p>
<p><a href="https://eboreal.com/devblog/wp-content/uploads/2013/04/Capture-d’écran-2013-03-10-à-23.23.15-copie.png" data-rel="lightbox-gallery-eCtqmJGc" data-rl_title="" data-rl_caption="" title=""><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-260" alt="Capture d’écran 2013-03-10 à 23.23.15 - copie" src="https://eboreal.com/devblog/wp-content/uploads/2013/04/Capture-d’écran-2013-03-10-à-23.23.15-copie.png" width="426" height="321" srcset="https://eboreal.com/devblog/wp-content/uploads/2013/04/Capture-d’écran-2013-03-10-à-23.23.15-copie.png 426w, https://eboreal.com/devblog/wp-content/uploads/2013/04/Capture-d’écran-2013-03-10-à-23.23.15-copie-300x226.png 300w" sizes="(max-width: 426px) 100vw, 426px" /></a></p>
<p>Actuellement les effets sont un peu exagérés, mais c&rsquo;est pour pouvoir visualiser facilement les effets des côtes sur la direction et la force du vent.</p>
<p>L&rsquo;algorithme est assez simple, il consiste à chercher dans un certain rayon (actuellement 300 unités) autour du point concerné si il y a de la terre. Pour ça on « lance » des rayons et pour chaque rayon on calcule la somme des altitudes trouvées.</p>
<p><a href="https://eboreal.com/devblog/wp-content/uploads/2013/04/IMG_0001.jpg" data-rel="lightbox-gallery-eCtqmJGc" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" class="alignnone  wp-image-261" alt="IMG_0001" src="https://eboreal.com/devblog/wp-content/uploads/2013/04/IMG_0001.jpg" width="532" height="235" srcset="https://eboreal.com/devblog/wp-content/uploads/2013/04/IMG_0001.jpg 887w, https://eboreal.com/devblog/wp-content/uploads/2013/04/IMG_0001-300x133.jpg 300w, https://eboreal.com/devblog/wp-content/uploads/2013/04/IMG_0001-768x339.jpg 768w" sizes="(max-width: 532px) 100vw, 532px" /></a></p>
<p>La somme des altitudes trouvées (pondérée par la distance au point que l&rsquo;on étudie) permet de calculer un effet en force et direction sur le vent général (vent synoptique). Pour les rayons proches du sens du vent général, la déviation est faible, mais la force du vent est diminuée. Par contre pour les rayons aux alentours de 45° du vent, la déviation sera plus importante. Pour les rayons proches de la perpendiculaire du vent la force sera augmentée.</p>
<p>&nbsp;</p>
<pre lang="java" line="1">
public Vector3f getWindComposant(Vector3f location) {
    Vector3f currWind = mainWindDir.mult(data.globalWindSpeed);
    for (int angleDeg = -180; angleDeg &lt; 0; angleDeg += stepAngleDeg) {
        float direction = data.globalWindDirection + (FastMath.DEG_TO_RAD * angleDeg);
        Vector3f dirToExplore = new Quaternion().fromAngleAxis(direction, Vector3f.UNIT_Y).mult(Vector3f.UNIT_Z);
        float heightCoeff = 0;
            for (int displacement = -maxDisplacement; displacement &lt;= maxDisplacement; displacement += stepDisplacement) {
            if (displacement == 0) {
                continue;
            }
            Vector3f posToExplore = location.add(dirToExplore.mult(displacement));
            float height = inGameState.getTerrainHeight(posToExplore);
            heightCoeff += FastMath.abs((float) stepDisplacement / (float) displacement) * height;
        }
        heightCoeff = (heightCoeff * data.globalWindSpeed) / coeffSum;
        float deviationAngle = data.globalWindDirection + (FastMath.DEG_TO_RAD * ((2 * angleDeg) + 180f));
        Vector3f deviation = new Quaternion().fromAngleAxis(deviationAngle, Vector3f.UNIT_Y).mult(Vector3f.UNIT_Z).mult(heightCoeff);
        currWind.addLocal(deviation);
    }
    float currWindspeed2 = currWind.lengthSquared();
    if (currWindspeed2 &gt; (maxWindSpeed * maxWindSpeed)) {
        currWind.normalizeLocal().multLocal(maxWindSpeed);
    } else if (currWindspeed2 &lt; 1) {
        currWind.normalizeLocal();
    }
    return currWind;
}
</pre></div>
			</div>
			</div>			
				
				
				
				
			</div>		
				
				
			</div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
