<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=251341</guid>
        <pubDate>Mon, 24 Nov 2003 14:59:44 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=251341</link>
        <description><![CDATA[wormball:  <!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->ну так на ноль можно не умножать, если не хочешь, зато у тебя куча синусов. и с помощью матриц можно поворачивать не только в плоскости ху, и можно несколько поворотов представлять как один.&nbsp; <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br><!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Обычно поворот состоит из 3-х поворотов вокруг 3-х осей. По твоему способу придется каждую точку повернуть 3 раза. Используя матрицу - 1 раз. Если к этому прибавить перемещение, то у тебя будут 4 действия (3 поворота + перемещение); используя матрицу - 1 действие. <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>именно ето я и хотел сказать<br><!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->вот, что я пытался сказать. я написал вот так:<br><br><br><br>template &lt;class T&gt; <br>void CxVertex&lt;T&gt;::RotateX(double Angle)<br>{<br>T COS = cos(Angle);<br>T SIN&nbsp; = sin(Angle);<br>T Y, Z;<br><br> Y&nbsp; = y * COS - z * SIN;<br> Z&nbsp; = y * SIN + z * COS;<br> y&nbsp; = Y;<br> z&nbsp; = Z;<br>}<br><br><br><br>а если написать вот так:<br><br><br><br>template &lt;class T&gt; <br>void CxVertex&lt;T&gt;::RotateX(double Angle)<br>{<br>CxMatrix &lt;T&gt; M(4,4);<br>M.Fill(T(0));<br>M.At(0,0) = 1;<br>M.At(1,1) = cos(Angle);<br>M.At(2,2) = M.At(1,1);<br>M.At(1,2) = -sin(Angle);<br>M.At(2,1) = -M.At(1,2);<br>v = M*v;<br>}<br><br><br><br>то при v = M*v; будет происходить вот, что:<br><br><br><br>template &lt;class T&gt; <br>CxMatrix&lt;T&gt;&amp; CxMatrix&lt;T&gt;::operator *= (CxMatrix &amp;m)<br>{<br>u_int i,j,k,Ni = GetNumRows(),Nj = GetNumColumns();<br>if(m.GetNumRows() &#33;= Nj)<br> throw INVALID_MATRIX_SIZES;<br>CxMatrix mRet(Ni,m.GetNumColumns());<br>T tFillValue = T(0);<br>mRet.Fill(tFillValue);<br>for(i = 0; i &lt; Ni; i++)<br> for(j = 0; j &lt; m.GetNumColumns(); j++)<br>&nbsp; for(k = 0; k &lt; Nj; k++)<br>&nbsp; mRet.At(i,j) += At(i,k)*m.At(k,j);<br>*this = mRet;<br>return&nbsp; *this;<br>}<br><br><br><br>что есть не так круто, как первое. не знаю, вообще, как эти матрицы вообще используются здесь, если они столько ресурсов жрут.<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>а ето я вобще не понял. я в етих с++ных заморочках ничо не понимаю, наверное у тебя тормозит не изза матриц, а именно изза них ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=250227</guid>
        <pubDate>Sat, 22 Nov 2003 11:14:51 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=250227</link>
        <description><![CDATA[experimenter: <!--QuoteBegin-TrivialCore+21.11.03, 19:44--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (TrivialCore @ 21.11.03, 19:44)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> <!--QuoteBegin-Serg&#045;Zerg+21.11.03, 13:09--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (Serg&#045;Zerg &#064; 21.11.03, 13:09)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> Спасибо всем учасникам, лабу здал, вот только МОЯ ф-ия проекции преподу не понравилась как правильно считать эту const C? <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>Например так:<br>C = 360*Resx/(2*PI*angle)<br><br>angle - угол поля зрения в градусах, Resx - разрешение окна по х, PI = 3.1415926535 <br><br><span style='font-family:Verdana'><b>Добавлено в</b> <time class="tag-mergetime" datetime="2003-11-21T19:49:25+00:00">21.11.03, 19:49</time></span><br><!--QuoteBegin-experimenter+21.11.03, 07:18--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (experimenter &#064; 21.11.03, 07:18)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> <!--QuoteBegin-wormball+21.11.03, 09:08--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (wormball &#064; 21.11.03, 09:08)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> не понял я тебя..... чойто за код ты понаписал?? <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>ну, вот как поворачивается точка на плоскости<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1--><br>x = x cos ф - y sin ф,<br>y = x sin  ф+ y cos ф.<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>а при записи того же в матричном представлении, да еще в однородных координатах, как это любят делать, будет куча умножения на ноль, которую не понятно зачем делать. <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>Обычно поворот состоит из 3-х поворотов вокруг 3-х осей. По твоему способу придется каждую точку повернуть 3 раза. Используя матрицу - 1 раз. Если к этому прибавить перемещение, то у тебя будут 4 действия (3 поворота + перемещение); используя матрицу - 1 действие. <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> ну, с этой точки зрения, я согласен. наверное, действительно, эффект дает о себе знать, при большом количестве поворотов и все такого. хм, да действительно. спасибо за подсказанную идейку. <!--emo&:D--><img src='http://forum.sources.ru/html/emoticons/biggrin.gif' border='0' style='vertical-align:middle' alt='biggrin.gif' /><!--endemo-->  ]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=250008</guid>
        <pubDate>Fri, 21 Nov 2003 19:44:48 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=250008</link>
        <description><![CDATA[Машина: <!--QuoteBegin-Serg-Zerg+21.11.03, 13:09--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (Serg-Zerg @ 21.11.03, 13:09)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> Спасибо всем учасникам, лабу здал, вот только МОЯ ф-ия проекции преподу не понравилась как правильно считать эту const C? <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> Например так:<br>C = 360*Resx/(2*PI*angle)<br><br>angle - угол поля зрения в градусах, Resx - разрешение окна по х, PI = 3.1415926535 <br><br><span style='font-family:Verdana; font-size:9px'><b>Добавлено в</b> <time class="tag-mergetime" datetime="2003-11-21T19:49:25+00:00">21.11.03, 19:49</time></span><br><!--QuoteBegin-experimenter+21.11.03, 07:18--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (experimenter @ 21.11.03, 07:18)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> <!--QuoteBegin-wormball+21.11.03, 09:08--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (wormball &#064; 21.11.03, 09:08)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> не понял я тебя..... чойто за код ты понаписал?? <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>ну, вот как поворачивается точка на плоскости<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1--><br>x = x cos ф - y sin ф,<br>y = x sin  ф+ y cos ф.<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>а при записи того же в матричном представлении, да еще в однородных координатах, как это любят делать, будет куча умножения на ноль, которую не понятно зачем делать. <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> Обычно поворот состоит из 3-х поворотов вокруг 3-х осей. По твоему способу придется каждую точку повернуть 3 раза. Используя матрицу - 1 раз. Если к этому прибавить перемещение, то у тебя будут 4 действия (3 поворота + перемещение); используя матрицу - 1 действие. ]]></description>
        <author>Машина</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249895</guid>
        <pubDate>Fri, 21 Nov 2003 16:20:08 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249895</link>
        <description><![CDATA[Visitor:  Матрицы используются 4x4 (кстати, ето Cyrix придумал, а не Intel), и размеры операционных векторов у SIMD-инструкций, как вы уже догадываетесь, тоже 4 эл-та, типа float или fixed 16.16 <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--> <br><br>Итого умножение матрицы 4x4 на вектор 4 занимает 12 векторных операций -- 4 х загрузка, умножение, суммирование елементов. Как правило ето быстрее, чем работа по &quot;оптимизированным&quot; формулам, где поток операндов _меньше_, но _не_регулярен_ и параллельных операций нет...<br><br> ]]></description>
        <author>Visitor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249872</guid>
        <pubDate>Fri, 21 Nov 2003 15:49:39 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249872</link>
        <description><![CDATA[experimenter: <!--QuoteBegin-wormball+21.11.03, 10:38--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (wormball @ 21.11.03, 10:38)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> а мож у тебя процедура неправильная, или ты каждый раз синус вычислял?? а без матриц не тормозит?? покажи процедуру <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> вот, что я пытался сказать. я написал вот так:<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1--><br>template &#60;class T&#62; <br>void CxVertex&#60;T&#62;&#58;&#58;RotateX&#40;double Angle&#41;<br>{<br>T COS = cos&#40;Angle&#41;;<br>T SIN &nbsp;= sin&#40;Angle&#41;;<br>T Y, Z;<br><br> &nbsp;Y &nbsp;= y * COS - z * SIN;<br> &nbsp;Z &nbsp;= y * SIN + z * COS;<br> &nbsp;y &nbsp;= Y;<br> &nbsp;z &nbsp;= Z;<br>}<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>а если написать вот так:<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1--><br>template &#60;class T&#62; <br>void CxVertex&#60;T&#62;&#58;&#58;RotateX&#40;double Angle&#41;<br>{<br>CxMatrix &#60;T&#62; M&#40;4,4&#41;;<br>M.Fill&#40;T&#40;0&#41;&#41;;<br>M.At&#40;0,0&#41; = 1;<br>M.At&#40;1,1&#41; = cos&#40;Angle&#41;;<br>M.At&#40;2,2&#41; = M.At&#40;1,1&#41;;<br>M.At&#40;1,2&#41; = -sin&#40;Angle&#41;;<br>M.At&#40;2,1&#41; = -M.At&#40;1,2&#41;;<br>v = M*v;<br>}<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>то при v = M*v; будет происходить вот, что:<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b></b> </td></tr><tr><td id='CODE'><!--ec1--><br>template &#60;class T&#62; <br>CxMatrix&#60;T&#62;&amp; CxMatrix&#60;T&#62;&#58;&#58;operator *= &#40;CxMatrix &amp;m&#41;<br>{<br>	u_int i,j,k,Ni = GetNumRows&#40;&#41;,Nj = GetNumColumns&#40;&#41;;<br>	if&#40;m.GetNumRows&#40;&#41; &#33;= Nj&#41;<br> &nbsp;throw INVALID_MATRIX_SIZES;<br>	CxMatrix mRet&#40;Ni,m.GetNumColumns&#40;&#41;&#41;;<br>	T tFillValue = T&#40;0&#41;;<br>	mRet.Fill&#40;tFillValue&#41;;<br>	for&#40;i = 0; i &#60; Ni; i++&#41;<br> &nbsp;for&#40;j = 0; j &#60; m.GetNumColumns&#40;&#41;; j++&#41;<br> &nbsp;	for&#40;k = 0; k &#60; Nj; k++&#41;<br> &nbsp;	mRet.At&#40;i,j&#41; += At&#40;i,k&#41;*m.At&#40;k,j&#41;;<br>	*this = mRet;<br>	return &nbsp;*this;<br>}<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>что есть не так круто, как первое. не знаю, вообще, как эти матрицы вообще используются здесь, если они столько ресурсов жрут.<br><br> ]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249834</guid>
        <pubDate>Fri, 21 Nov 2003 15:09:02 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249834</link>
        <description><![CDATA[Serg-Zerg: <!--QuoteBegin-TrivialCore+13.11.03, 22:42--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>Цитата</b> (TrivialCore @ 13.11.03, 22:42)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> Что у тебя за ф-ия проекции какая-то странная.<br>Обычно берется x1 = x*C/z, y1 = y*C/z, а константа C высчитывается в зависимости от угла видения и величины окна-экрана. <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> Спасибо всем учасникам, лабу здал, вот только МОЯ ф-ия проекции преподу не понравилась как правильно считать эту const C? ]]></description>
        <author>Serg-Zerg</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249591</guid>
        <pubDate>Fri, 21 Nov 2003 10:38:51 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249591</link>
        <description><![CDATA[wormball:  а мож у тебя процедура неправильная, или ты каждый раз синус вычислял?? а без матриц не тормозит?? покажи процедуру ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249583</guid>
        <pubDate>Fri, 21 Nov 2003 10:29:10 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249583</link>
        <description><![CDATA[experimenter: <!--QuoteBegin-wormball+21.11.03, 09:35--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball @ 21.11.03, 09:35)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> ну так на ноль можно не умножать, если не хочешь, зато у тебя куча синусов. и с помощью матриц можно поворачивать не только в плоскости ху, и можно несколько поворотов представлять как один. <!--emo&:P--><img src='http://forum.sources.ru/html/emoticons/tongue.gif' border='0' style='vertical-align:middle' alt='tongue.gif' /><!--endemo--> <br>говорят есь ищо кватернионы, с их помощью тоже можно вращать <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> уже устал с тобой спорить. ты не хочешь понять, что тебе говорю. я сам делал, как ты говоришь и проповедую и это тормозит комп. ]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249528</guid>
        <pubDate>Fri, 21 Nov 2003 09:35:34 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249528</link>
        <description><![CDATA[wormball:  ну так на ноль можно не умножать, если не хочешь, зато у тебя куча синусов. и с помощью матриц можно поворачивать не только в плоскости ху, и можно несколько поворотов представлять как один. <!--emo&:P--><img src='http://forum.sources.ru/html/emoticons/tongue.gif' border='0' style='vertical-align:middle' alt='tongue.gif' /><!--endemo--> <br>говорят есь ищо кватернионы, с их помощью тоже можно вращать ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249509</guid>
        <pubDate>Fri, 21 Nov 2003 09:18:27 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249509</link>
        <description><![CDATA[experimenter: <!--QuoteBegin-wormball+21.11.03, 09:08--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball @ 21.11.03, 09:08)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> не понял я тебя..... чойто за код ты понаписал?? <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> ну, вот как поворачивается точка на плоскости<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>x = x cos ф - y sin ф,<br>y = x sin &nbsp;ф+ y cos ф.<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>а при записи того же в матричном представлении, да еще в однородных координатах, как это любят делать, будет куча умножения на ноль, которую не понятно зачем делать.<br> ]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249502</guid>
        <pubDate>Fri, 21 Nov 2003 09:08:09 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249502</link>
        <description><![CDATA[wormball:  не понял я тебя..... чойто за код ты понаписал?? ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249498</guid>
        <pubDate>Fri, 21 Nov 2003 09:06:17 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=249498</link>
        <description><![CDATA[experimenter: <!--QuoteBegin-wormball+20.11.03, 12:23--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball @ 20.11.03, 12:23)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> <!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->так, если ты повернул кубик, тебе в любом случае предстоит посчитать синус, хоть ты в матрице, хоть нет.  или я не прав?<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->да, но с матрицами тебе его надо будет один раз посчитать, а потом умножать все точки на одну и ту же матрицу.<br><!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Считать его не надо. Его надо брать из один раз для фиксированного шага угла рассчитанной sincos-таблицы.<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>помоему если ты щитаешь синусы один раз, а потом тысячу точек вертишь, то ты врядли на синусе много секономишь, к тому же талбица будет много памяти занимать.<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->и потом, что ты имел в виду, что с фиксированной точкой геморой? вроде бы в компе с плавающей точкой вычисление производится или я что-то подзабыл-попутал? вроде полигональную модель не представить путево в целых числах?<br>в общем, колись&#33;  <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>я лично етим никогда не занимался, но говорят особо извращённые люди представляют вещественные числа как целые, а потом считают их целочисленной математикой. для етого даже ммх придумали. говорят получается быстрее. <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> я про матрицы упомянул в том смысле, что когда ты матрицы множишь, то там много лишних операций выполняется. с моей точки зрения представление преобразований в виде перемножения матриц для компа - это не совсем рационально. зачем использовать матрицы, когда можно преобразования написать, типа<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>Vertex&#58;&#58;RotateX&#40;double Angle&#41;<br>{<br>x = ...;<br>y = ...;<br>z = ...;<br>}<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>чем писать перемножения матриц, типа V = V*M; так как там делается много лишнего из-за разряженности матрицы. ]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248978</guid>
        <pubDate>Thu, 20 Nov 2003 12:23:25 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248978</link>
        <description><![CDATA[wormball:  <!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->так, если ты повернул кубик, тебе в любом случае предстоит посчитать синус, хоть ты в матрице, хоть нет.&nbsp; или я не прав?<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->да, но с матрицами тебе его надо будет один раз посчитать, а потом умножать все точки на одну и ту же матрицу.<br><!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Считать его не надо. Его надо брать из один раз для фиксированного шага угла рассчитанной sincos-таблицы.<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>помоему если ты щитаешь синусы один раз, а потом тысячу точек вертишь, то ты врядли на синусе много секономишь, к тому же талбица будет много памяти занимать.<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->и потом, что ты имел в виду, что с фиксированной точкой геморой? вроде бы в компе с плавающей точкой вычисление производится или я что-то подзабыл-попутал? вроде полигональную модель не представить путево в целых числах?<br>в общем, колись&#33;&nbsp; <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>я лично етим никогда не занимался, но говорят особо извращённые люди представляют вещественные числа как целые, а потом считают их целочисленной математикой. для етого даже ммх придумали. говорят получается быстрее. ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248627</guid>
        <pubDate>Wed, 19 Nov 2003 18:00:23 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248627</link>
        <description><![CDATA[Visitor:  Считать его не надо. Его надо брать из один раз для фиксированного шага угла рассчитанной sincos-таблицы.<br><br>А матрицами или не матрицами, действительно по=, в рассуждении использования SIMD-команд процессора... ]]></description>
        <author>Visitor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248626</guid>
        <pubDate>Wed, 19 Nov 2003 17:57:39 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248626</link>
        <description><![CDATA[experimenter:  <!--QuoteBegin-wormball+19.11.03, 11:41--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball &#064; 19.11.03, 11:41)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> <!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->не понимаю сыр-бора. никто точку в пространстве вертеть не умеет, что ли? а восемь?<br>а матрицы эти я бы все на фиг повыкидывал. еще для них класс писать - слишком много чести. там больше все нули в этих матрицах поворота перемножаются и складываются, а времени при типе double тратиться немеренно, так что лучше сразу формулу писать без всякиз еб*чих матриц. <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>ну так матрицы нужны, чтобы синусы каждый раз не вычислять, а нули перемножаются только вначале. а с фиксированной точкой ето геморрой <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>так, если ты повернул кубик, тебе в любом случае предстоит посчитать синус, хоть ты в матрице, хоть нет. <!--emo&:D--><img src='http://forum.sources.ru/html/emoticons/biggrin.gif' border='0' style='vertical-align:middle' alt='biggrin.gif' /><!--endemo--> или я не прав?<br>и потом, что ты имел в виду, что с фиксированной точкой геморой? вроде бы в компе с плавающей точкой вычисление производится или я что-то подзабыл-попутал? вроде полигональную модель не представить путево в целых числах?<br>в общем, колись&#33;  <!--emo&:D--><img src='http://forum.sources.ru/html/emoticons/biggrin.gif' border='0' style='vertical-align:middle' alt='biggrin.gif' /><!--endemo-->  ]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248361</guid>
        <pubDate>Wed, 19 Nov 2003 11:41:20 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=248361</link>
        <description><![CDATA[wormball:  <!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->не понимаю сыр-бора. никто точку в пространстве вертеть не умеет, что ли? а восемь?<br>а матрицы эти я бы все на фиг повыкидывал. еще для них класс писать - слишком много чести. там больше все нули в этих матрицах поворота перемножаются и складываются, а времени при типе double тратиться немеренно, так что лучше сразу формулу писать без всякиз еб*чих матриц. <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>ну так матрицы нужны, чтобы синусы каждый раз не вычислять, а нули перемножаются только вначале. а с фиксированной точкой ето геморрой ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247864</guid>
        <pubDate>Tue, 18 Nov 2003 16:36:48 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247864</link>
        <description><![CDATA[MeG:  <a href='http://www.intel.com/software/products/mkl/eval.htm' target='_blank'>http://www.intel.com/software/products/mkl/eval.htm</a> <br><a href='http://www.intel.com/software/products/mkl/win_relnotes.pdf' target='_blank'>Краткое описание</a><br><a href='http://www.polyhedron.com/intel/PDFBriefs/Reseller_Briefs_MKL_003.pdf' target='_blank'>еще описание</a><br><a href='http://search.intel.com/support/search.asp?q1=mkl&SearchCrit=ALL&selFamily=All&selLine=All&recsPerPage=25&category=support&hidProductName=All+Products&hidProductAlias=&mh=200&Family=0&Line=All&hidProductIndex=-1&source=http%3A%2F%2Fsearch.intel.com%2Fsupport%2Fsearch.asp&version=2.0&ICrit=0&IRecs=1&x=19&y=11' target='_blank'>Дополнительная информация</a> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247468</guid>
        <pubDate>Tue, 18 Nov 2003 09:11:02 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247468</link>
        <description><![CDATA[Гость trivialcore: <!--QuoteBegin-MeG+18.11.03, 10:14--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (MeG @ 18.11.03, 10:14)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> Быстрее всего и проще взять готовую библиотеку работы с матрицами от интела, опимизированную под MMX, где премножение вектора на матрицу делается за один такт <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> Gde etu biblioteku vziat pod VC++ ? ]]></description>
        <author>Гость trivialcore</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247389</guid>
        <pubDate>Tue, 18 Nov 2003 07:14:58 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247389</link>
        <description><![CDATA[MeG:  Быстрее всего и проще взять готовую библиотеку работы с матрицами от интела, опимизированную под MMX, где премножение вектора на матрицу делается за один такт  ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247301</guid>
        <pubDate>Mon, 17 Nov 2003 22:42:31 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247301</link>
        <description><![CDATA[Serg-Zerg:  Так чтоже получается, мой способ, который был прозван неявным поворотом, оказывается мало того самым простым, так еще и быстрым для конкретной задачи, полчаса програмли+4часа разгрёба глюков=готово... ]]></description>
        <author>Serg-Zerg</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247282</guid>
        <pubDate>Mon, 17 Nov 2003 21:54:09 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247282</link>
        <description><![CDATA[experimenter:  не понимаю сыр-бора. никто точку в пространстве вертеть не умеет, что ли? а восемь?<br>а матрицы эти я бы все на фиг повыкидывал. еще для них класс писать - слишком много чести. там больше все нули в этих матрицах поворота перемножаются и складываются, а времени при типе double тратиться немеренно, так что лучше сразу формулу писать без всякиз еб*чих матриц. ]]></description>
        <author>experimenter</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247168</guid>
        <pubDate>Mon, 17 Nov 2003 18:18:35 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247168</link>
        <description><![CDATA[wormball:  не хочу я ети тонны де**ма раскапывать&#33;&#33; всё равно, что ни говори, ето нелинейный оператор&#33; ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247163</guid>
        <pubDate>Mon, 17 Nov 2003 18:11:34 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247163</link>
        <description><![CDATA[MeG: <!--QuoteBegin-wormball+18.11.03, 00:04--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball @ 18.11.03, 00:04)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> такето что получается, что у мега каждое умножение сопровождается делением?? так же нефефективно <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> Только для тех векторов где четвертая координата отлична от единицы.<br>Смотри исходники, прежде чем коментировать ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247158</guid>
        <pubDate>Mon, 17 Nov 2003 18:04:22 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247158</link>
        <description><![CDATA[wormball:  такето что получается, что у мега каждое умножение сопровождается делением?? так же нефефективно ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247152</guid>
        <pubDate>Mon, 17 Nov 2003 17:53:54 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247152</link>
        <description><![CDATA[wormball:  vot&#33;&#33; <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--><br><br>зы. только щас понял, что вас было двое, а не один. щас пойду находить отличия во взглядах <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo-->  ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247151</guid>
        <pubDate>Mon, 17 Nov 2003 17:52:46 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247151</link>
        <description><![CDATA[Машина:  wоrmball прав в том, что при построении матрицы перспективного проецирования с помощью входного вектора пропадает смысл использовать матрицу (исходный смысл был в том, что много преобразований для разных точек можно сложить в одно; матрицу проецирования к этим преобразованиям не зачислишь). ]]></description>
        <author>Машина</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247150</guid>
        <pubDate>Mon, 17 Nov 2003 17:51:50 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247150</link>
        <description><![CDATA[wormball:  а чо ж ты тогда так защищаешь матрицы?? помоему с самого начала было ясно, что линейным оператором перспективы не получить ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247146</guid>
        <pubDate>Mon, 17 Nov 2003 17:42:04 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247146</link>
        <description><![CDATA[Visitor:  Усе ж гораздо проще можно показать: вот у нас есть рельсы. Мы стоим между ними, и смотрим туда вдаль, куда они уходят. Как они будут выглядеть на фотографии, и как -- после <i>обработки каждой из их точек линейным оператором</i>? ]]></description>
        <author>Visitor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247094</guid>
        <pubDate>Mon, 17 Nov 2003 16:24:08 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247094</link>
        <description><![CDATA[wormball:  уже прочёл <!--emo&:rolleyes:--><img src='http://forum.sources.ru/html/emoticons/rolleyes.gif' border='0' style='vertical-align:middle' alt='rolleyes.gif' /><!--endemo-->  ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247091</guid>
        <pubDate>Mon, 17 Nov 2003 16:22:38 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247091</link>
        <description><![CDATA[MeG:  <!--QuoteBegin-wormball+17.11.03, 22:19--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball &#064; 17.11.03, 22:19)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> ну так z у тебя каждый раз разное, так что ты не сможешь как с поворотом сначала вычислить одну матрицу, а потом на неё умножать <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--> <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>сам прочти что написал <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--><br><br>в матрице нет z ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247084</guid>
        <pubDate>Mon, 17 Nov 2003 16:19:15 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247084</link>
        <description><![CDATA[wormball:  ну так z у тебя каждый раз разное, так что ты не сможешь как с поворотом сначала вычислить одну матрицу, а потом на неё умножать <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo-->  ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247075</guid>
        <pubDate>Mon, 17 Nov 2003 16:08:38 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247075</link>
        <description><![CDATA[MeG:  <!--QuoteBegin-wormball+17.11.03, 22:01--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball &#064; 17.11.03, 22:01)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> просто дело в том что матрицы - ето по определению умножение на некоторые числа, а сдесь идёт деление на z - компоненту входного вектора. <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>после умножения вектора на матрицу, результирующий вектор в однородных координатах <b>(a, b, c, d)</b> приводится к виду <b>(a/d, b/d, c/d, 1)</b> (смотри выше), где и происходит деление на z (для данной матрицы) <br><b>Добавлено в</b> <time class="tag-mergetime" datetime="2003-11-17T16:17:48+00:00">17.11.03, 16:17</time> <br>специально для  wormball<br><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>| x | &nbsp; | 1 &nbsp; 0 &nbsp; 0 &nbsp; 0 |<br>| y | *| 0 &nbsp; 1 &nbsp; 0 &nbsp; 0 | = &#40; x &nbsp; y &nbsp; 0 &nbsp; 1-z/c &#41; &nbsp; &nbsp;-&#62; &nbsp; &#40; x/&#40;1 - z/c&#41; &nbsp; y/&#40;1 - z/c&#41; &nbsp; 0 &nbsp; 1 &#41;<br>| z | &nbsp; | 0 &nbsp; 0 &nbsp; 0 -1/c|<br>| 1 | &nbsp; | 0 &nbsp; 0 &nbsp; 0 &nbsp; 1 |<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247067</guid>
        <pubDate>Mon, 17 Nov 2003 16:01:34 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247067</link>
        <description><![CDATA[wormball:  исходники то понятное дело работают.<br><br>просто дело в том что матрицы - ето по определению умножение на некоторые числа, а сдесь идёт деление на z - компоненту входного вектора.<br><br><!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->еще можешь подумать, и написать уравнение проекции и переложить его на матрицу<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br><br>уменя как ты помнишь свои исходники есь, так что сей путь я тоже прошёл ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247057</guid>
        <pubDate>Mon, 17 Nov 2003 15:51:46 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247057</link>
        <description><![CDATA[MeG: <!--QuoteBegin-wormball+17.11.03, 21:39--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (wormball @ 17.11.03, 21:39)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> всёравно перспективу матрицей не опишешь&#33;&#33; <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> ты открой глазки пошире, увидишь исходники<br><br>еще можешь подумать, и написать уравнение проекции и переложить его на матрицу ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247051</guid>
        <pubDate>Mon, 17 Nov 2003 15:47:51 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247051</link>
        <description><![CDATA[Visitor:  Матрицей чисел. <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--> ]]></description>
        <author>Visitor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247039</guid>
        <pubDate>Mon, 17 Nov 2003 15:39:50 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=247039</link>
        <description><![CDATA[wormball:  всёравно перспективу матрицей не опишешь&#33;&#33; ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246998</guid>
        <pubDate>Mon, 17 Nov 2003 15:06:05 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246998</link>
        <description><![CDATA[Visitor:  Не горячитесь <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--> Используются действительно четырехмерные вектора и матрицы 4х4, т.к, ими можно описать и повороты, и масштабирования, и, самое главное, перемещения объектов <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo-->. А вот как результаты операций интерпретируются (какие координаты вектора используются) -- ето уже другое дело <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--> ]]></description>
        <author>Visitor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246981</guid>
        <pubDate>Mon, 17 Nov 2003 14:52:22 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246981</link>
        <description><![CDATA[wormball:  <!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Матрица проектирования на плоскость параллельную координатной плоскости XY<br>| 1 0 0 0 |<br>| 0 1 0 0 |<br>| 0 0 0 0 |<br>| 0 0 k 1 |<br>k --- это смещение экранной плоскости воль оси Z<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>а ещё курсовую по графике писал&#33;&#33; матрица проектирования переводит трёхмерный вектор в двумерный, стало быть она размера 3*2 и выглядит так (для плоскости ху):<br>1 0 0<br>0 1 0<br><br><!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Центральное (перспективное) проектирование<br>Матрица перспективного проектирования на плоскость XY, (z = 0) Камера находится в точке (0, 0, c)<br>| 1 0 0 0 |<br>| 0 1 0 0 |<br>| 0 0 0 -1/c|<br>| 0 0 0 1 |<br><br>Матрица перспективного проектирования на плоскость XY, для камеры в любой точке (a, b, c)пространства <br>| 1 0 0 -1/a |<br>| 0 1 0 -1/b |<br>| 0 0 0 -1/c |<br>| 0 0 k 1 |<br>k --- это смещение экранной плоскости воль оси Z<br><br>Применять матрицы перспективного проектирования так же как и матрицы параллельного проектирования. <br><br>Для изменения вида проекции остаточно просто сменить одну матрицу на другую. <br><!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->враньё&#33; при перспективе используется нелинейное преобразование - там вращают точку матрицей поворота и делят х и у на разность между z и точкой, в которой находится центр камеры, тоесь точкой (0, 0, -с). ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246571</guid>
        <pubDate>Mon, 17 Nov 2003 04:35:04 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246571</link>
        <description><![CDATA[MeG:  Чтобы повернуть объект вокруг своего геометрического центра нужно:<br> - найти координаты этого геометрического центра<br> - переместить объект в начало координат<br> - повернуть объект на требуемый угол<br> - переместить объект на пержнее место<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->CVector center&#40;x1, y1, z1&#41;; // вектор из начала координат в геометрический центр.<br>double angleX = 0.1;     // угол поворота вокруг оси X<br>double angleZ = -0.3;     // угол поворота вокруг оси Z<br><br>CKub primitive; // вращаемый объект<br><br>CMatrix transform; // матрица преобразований<br><br>transform = Translate&#40;-center&#41; * RotateX&#40;angleX&#41; * RotateZ&#40;angleZ&#41; * Translate&#40;center&#41;;<br><br>primitive *= transform; // вращаем объект вокруг своего центра<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246484</guid>
        <pubDate>Sun, 16 Nov 2003 20:47:31 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246484</link>
        <description><![CDATA[Serg-Zerg: <!--QuoteBegin-MeG+16.11.03, 07:42--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (MeG @ 16.11.03, 07:42)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> 2 Serg-Zerg<br>Вокруг чего ты собрался вращать? <br>Вокруг начала координат, вокруг одного из ребер примитива, вокруг геометрического центра примитива, вокруг оси коодинат, вокруг некоторой прямой? <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd--><br> Мечтал вокруг геометрического центра, но думаю вокруг оси коодинат будет более чем достаточно. ]]></description>
        <author>Serg-Zerg</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246162</guid>
        <pubDate>Sun, 16 Nov 2003 09:44:32 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246162</link>
        <description><![CDATA[MeG:  <b>Проекции</b><br>Что это такое? <br>Есть трехмерное пространство, в этом пространстве резмещены трехмерные объекты. Нужно каким-то образом показать эти трехмерные объекты на плоском экране. Для этого и существуют проекции.Видов проекций огромное количество.<br>Преимущественно применяется параллельное и центральное проектирование (у каждого из них есть несколько подвидов)<br><br>Помещаем в наше пространство плоскость --- экранную плоскость, на нее мы будем проектировать наши трехмерные объекты, и изображение на этой плоскости будем выводить на экан монитора.<br>Дальше нужно задать направление проектирования. Для этого помещаем в пространство камеру. Камера имеет положение в пространстве и направление взгляда (вектор).<br>Для того чтоб на экранной плоскости чтото было видно, необходимо: направить камеру на наши трехмерные объекты, и разместить экранную плоскость между камерой и объектами. Обычно, экранная плоскость перпендикулярна направлению взгляда камеры, это позволяет упростить расчеты.<br>Удобно экранную плоскость разместить в начале координат нашего пространства, на одной из координатных проскостей, например XY. Камеру разместить на оси Z и направить в начало координат O(0, 0, 0). Камера будет описываться двумя векторами: положение Position(0, 0, -100) и направление Direction(0, 0, 1). Все трехмерные объекты размещаем по другую сторону экранной плоскости, для всех точек объектов координата Z будет больше нуля.<br><br>Проектируем. <br>На входе у нас массив трехмерных координат объектов в пространстве. На выходе массив двухмерных координат на экранной плоскости.<br><u>Паралельное проектирование</u> (то которое тебе не нравится, нарушается перспектива), тут, по сути, камера не нужна<br>Матрица проектирования на плоскость параллельную координатной плоскости XY<br>| 1 0 0 0 |<br>| 0 1 0 0 |<br>| 0 0 0 0 |<br>| 0 0 k 1 |<br>k --- это смещение экранной плоскости воль оси Z<br>Как это применить? Берем все координаты трехмерных объектов и перемножаем на эту матрицу проектирования, получаем множество точек у которых координата z равна нулю (x, y, 0). Просто выводим эти точки на экран по X и Y, изображение готово.<br><br>Если матрицу проектирования домножать на матрицу поворота (поворачивать экранную плоскость), можно получить различные виды паралельного проектирования: диметрию, триметрию, изометрию. Еще немного извратившись с этой матрицей проектирования, можно получить свободную и кабинетную параллельные проекции.<br><br><br><u>Центральное (перспективное) проектирование</u><br>Матрица перспективного проектирования на плоскость XY, (z = 0) Камера находится в точке (0, 0, c)<br>| 1 0 0 0 |<br>| 0 1 0 0 |<br>| 0 0 0 -1/c|<br>| 0 0 0 1 |<br><br>Матрица перспективного проектирования на плоскость XY, для камеры в любой точке (a, b, c)пространства <br>| 1 0 0 -1/a |<br>| 0 1 0 -1/b |<br>| 0 0 0 -1/c |<br>| 0 0 k   1  |<br>k --- это смещение экранной плоскости воль оси Z<br><br>Применять матрицы перспективного проектирования так же как и матрицы параллельного проектирования. <br><br>Для изменения вида проекции остаточно просто сменить одну матрицу на другую. ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246141</guid>
        <pubDate>Sun, 16 Nov 2003 07:56:31 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246141</link>
        <description><![CDATA[MeG:  <b>Афинные преобразования в пространстве в общем виде</b><br><br>Про координаты.<br>Чтобы иметь возможность сделать любые преобразования примитива в трехмерном пространстве, необходимо использовать однородные координаты&#33;<br>то есть A(x, y, z, 1) --- четыре кооринаты, четвертая координата имеет геометрический смысл масштаба. Хранить четвертую координату не нужно, достаточно во всех алгоритмах преобразования приводить ее к единице.<br>Соответственно матрицы преобразования тоже размера 4х4<br><br><br>Матрицы в общем виде<ul><li>Матрицы вращения в пространстве<br>Вокруг оси <b>X</b> на угол <b>A</b><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>Rx = | 1     0     0     0 |<br>    &nbsp;| 0   cosA  sinA    0 |<br>    &nbsp;| 0  -sinA  cosA    0 |<br> &nbsp; &nbsp; &nbsp;| 0     0     0     1 |<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>Вокруг оси <b>Y</b> на угол <b>A</b><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>Ry = | cosA 0   -sinA  0 &nbsp;|<br>   &nbsp;  | &nbsp;0    1 &nbsp; &nbsp;0    0 &nbsp;|<br>  &nbsp;  | sinA  0 cosA    0 &nbsp;|<br>  &nbsp;  | &nbsp;0    0    0    1 &nbsp;|<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>Вокруг оси <b>Z</b> на угол <b>A</b><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>Rz = | &nbsp;cosA &nbsp;sinA 0 &nbsp; &nbsp;0 &nbsp;|<br>     | -sinA cosA  0 &nbsp; &nbsp;0 &nbsp;|<br>  &nbsp;  | &nbsp; 0    0 &nbsp; &nbsp;1 &nbsp; &nbsp;0 &nbsp;|<br>  &nbsp;  | &nbsp; 0   &nbsp;0 &nbsp;  0    1 &nbsp;|<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br></li><li>Матрица масштабирования<br>A --- вдоль оси X, B --- вдоль оси Y,  C --- вдоль оси Z. A &gt; 0, B &gt; 0, C &gt; 0.<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>|D| = | A &nbsp;0 &nbsp;0 &nbsp;0 |<br>    &nbsp; | 0 &nbsp;B  0 &nbsp;0 |<br> &nbsp;    &nbsp;| 0  0 &nbsp;C &nbsp;0 |<br>  &nbsp;   | 0 &nbsp;0 &nbsp;0  1 |<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br></li><li>Матрицы отражения (зеркального)<br>относительно плоскости XY<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>|Mz| = | 1 &nbsp;0 &nbsp;0 &nbsp;0 |<br>    &nbsp; &nbsp; | 0 &nbsp;1  0 &nbsp;0 |<br> &nbsp;  &nbsp;  &nbsp;| 0  0 -1 &nbsp;0 |<br>  &nbsp;   &nbsp;| 0 &nbsp;0 &nbsp;0  1 |<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br>относительно плоскости YZ<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>|Mx| = | -1 0 &nbsp;0 &nbsp;0 |<br>    &nbsp; &nbsp;| 0 &nbsp;1  0 &nbsp;0 |<br> &nbsp;  &nbsp;  &nbsp;| 0  0 &nbsp;1 &nbsp;0 |<br>  &nbsp;   &nbsp;| 0 &nbsp;0 &nbsp;0  1 |<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br>относительно плоскости XZ<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>|My| = | 1 &nbsp;0 &nbsp;0 &nbsp;0 |<br>    &nbsp; &nbsp;| 0 -1  0 &nbsp;0 |<br> &nbsp;  &nbsp;  &nbsp;| 0  0 &nbsp;1 &nbsp;0 |<br>  &nbsp;   &nbsp;| 0 &nbsp;0 &nbsp;0  1 |<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br></li><li>Матрица переноса<br>a, b, c --- вектор переноса<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>|T| = | 1 &nbsp;0 &nbsp;0 &nbsp;0 |<br>    &nbsp; | 0 &nbsp;1  0 &nbsp;0 |<br> &nbsp;    &nbsp;| 0  0 &nbsp;1 &nbsp;0 |<br>  &nbsp;  &nbsp;| a &nbsp;b &nbsp;c  1 |<!--c2--></td></tr></table><div class='postcolor'><!--ec2--></li></ul> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246135</guid>
        <pubDate>Sun, 16 Nov 2003 07:42:14 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246135</link>
        <description><![CDATA[MeG:  2 Serg-Zerg<br>Вокруг чего ты собрался вращать? <br>Вокруг начала координат, вокруг одного из ребер примитива, вокруг геометрического центра примитива, вокруг оси коодинат, вокруг некоторой прямой? ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246133</guid>
        <pubDate>Sun, 16 Nov 2003 07:30:08 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=246133</link>
        <description><![CDATA[MeG:  <!--QuoteBegin-Serg&#045;Zerg+16.11.03, 00:25--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (Serg&#045;Zerg &#064; 16.11.03, 00:25)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->vect2 - это типа координаты вершины, а чё такое vect1? matr3-типа матрица поворота, лады. тогда <br>как она заполняется, если надо повернуть на Альфа градусов по XY, по часовой стрелке?<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>Тут произошло разделение понятий. vect2 и vect1 нужно понимать как список вершин гарфического примитива. В моих сорцах вектор --- это направленный отрезок из начала координат в данную точку, а список координат содержится в соответствующем классе примитива.<br>Если тебе нужно вращать параллелепипед:<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// задаешь параллелепипед двумя вершинами главной диагонали, все стороны параллельны осям координат.<br>CVector Avector&#40;1, 1, 1&#41;; // левый нижний передний угол параллелепипеда<br>CVector Bvector&#40;3, 5, 7&#41;; // правый верхний задний угол параллелепипеда<br>// в конструкторе получаешь координаты всех вершин примитива<br>CParallelepiped Primitive&#40;Avector, Bvector&#41;; <br>CMatrix Rmatrix; // матрица без инициализации<br>Rmatrix = RotateX&#40;0.5&#41;; // получаем матрицу поворота вокруг оси X на 0,5 радиана<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>Дальше нужно поворачивать примитив и отображать его<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>ByTimer&#40;...&#41;<br>{<br>Primitive.View&#40;DC&#41;;<br>Primitive *= Rmatrix;<br>}<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>CParallelepiped содержит в себе массив своих вершин<br>CVector m_Vertex[8];<br>и ребер<br>int m_Segments[12][12]; // номера начальной и конечной вершин (векторов вершин)<br>Функция Matrix RotateX (double);<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->Matrix RotateX &#40;double Angle&#41;<br>{<br>Matrix res&#40;1&#41;;<br>double Cosine = cos&#40;Angle&#41;;<br>double Sine = sin&#40;Angle&#41;;<br>res.x&#91;1&#93;&#91;1&#93; = Cosine;<br>res.x&#91;2&#93;&#91;1&#93; = -Sine;<br>res.x&#91;1&#93;&#91;2&#93; = Sine;<br>res.x&#91;2&#93;&#91;2&#93; = Cosine;<br>return res;<br>}<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> это глобальная функция, она не является членом какого-либо класса. Создает матрицу поворота вокруг начала координат. Внутри нее создается объект класса Matrix. Возвращает объект класса Matrix. <br>В строчке <b>Rmatrix = RotateX(0.5);</b> используется оператрор присваивания по умолчанию, то есть матрица возвращаемая из RotateX() копируется один в один в матрицу Rmatrix.<br>Для чего так сделано? Чтобы иметь однообразную запись для любых афинных преобразований.<br><b>Rmatrix = RotateX(.) * RotateY(.) * Scale(.) * Translate(.);</b> --- повернуть, повернуть, отмасштабировать, переместить. Таким образом можно получить <u>любые</u> преобразования объекта в пространстве. ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245944</guid>
        <pubDate>Sat, 15 Nov 2003 19:00:03 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245944</link>
        <description><![CDATA[Машина:  <!--QuoteBegin-Serg&#045;Zerg+15.11.03, 16:25--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> (Serg&#045;Zerg &#064; 15.11.03, 16:25)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->vect2 - это типа координаты вершины, а чё такое vect1? matr3-типа матрица поворота, лады. тогда <br>как она заполняется, если надо повернуть на Альфа градусов по XY, по часовой стрелке?<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--><br>Тебе же MeG сорс выложил, там все есть. Осталось только copy-paste <!--emo&;)--><img src='http://forum.sources.ru/html/emoticons/wink.gif' border='0' style='vertical-align:middle' alt='wink.gif' /><!--endemo-->. Матрица оборота строится или по шпаргалке (vide MeG&#39;s source) или оборачивая базовые версоры (что ты и сделал неявно). Перемножать матрицы недолго, зато в одной 4х4 матрице хранится инфа про обороты и перемещение ВСЕХ вершин, тебе остается только <!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->vect2 = vect1 * matr3;<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd--> каждую вершину.<br>з.ы. тут vect1 - исходные координаты, vect2 - конечные координаты (после оборота-перемещения). ]]></description>
        <author>Машина</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245926</guid>
        <pubDate>Sat, 15 Nov 2003 18:25:45 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245926</link>
        <description><![CDATA[Serg-Zerg: vect2 - это типа координаты вершины, а чё такое vect1? matr3-типа матрица поворота, лады. тогда <br>как она заполняется, если надо повернуть на Альфа градусов по XY, по часовой стрелке?]]></description>
        <author>Serg-Zerg</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245905</guid>
        <pubDate>Sat, 15 Nov 2003 17:55:21 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245905</link>
        <description><![CDATA[wormball:  прямо скажем, не лучшее решение во избежание смайликов - удалить их к чёртовой бабушке в исходнике. лучше бы выключил галку со смайлами или писал бы всё в [code]<br>более того, ты ошибаешься, что перемножать матрицы долго. там всего 9 умножений, как и у тебя, а у тебя ещё и синусы с корнями, что куда дольше. ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245903</guid>
        <pubDate>Sat, 15 Nov 2003 17:50:49 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245903</link>
        <description><![CDATA[Serg-Zerg:  Блин ну вы даёте...Перемножать матрицы долго, Вот фукция поворота любой точки на плоскости вокруг данной на угол 4 пи/180. Применив такую фукцию к каждой точке куба спроектированой на одну из трёх плоскостей(те про одну из трех координат забываем), он повернётся мать его... Только надо обратить внимание на  /*float Abs(float)*/.......<br>void CKubikDlg::TurnVertex(int cx,int cy, float &amp;x,float &amp;y,int q)<br>{ <br>float u,a,b,c;<br>a=cx-x;b=cy-y;c=sqrt(a*a+b*; <br>u = acos(Abs(a) / c) + q*(4*3.14/180) * b / Abs( * a / Abs(a) ; <br>x=cx+c*cos(u)* a / (Abs(a) * (-1));<br>y=cy+c*sin(u)* b / (Abs( * (-1)); <br>}<br>сорец может дам попозжЕ.  ]]></description>
        <author>Serg-Zerg</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245479</guid>
        <pubDate>Fri, 14 Nov 2003 16:23:16 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245479</link>
        <description><![CDATA[wormball: утебя 52 килобайта, уменя 14 килобайт :P <br>
тебя наверное ввели в заблуждение остальные файлы, которые там есь. собственно исходников екшына четыре: action.pas, kol_mov.pas, _13h.pas и mouse.pas .<br>
зы. уменя там оказывается есь архив в чистом виде<br>
<a class='tag-url' href='http://enzyme.nm.ru/prog/action.rar' target='_blank'>http://enzyme.nm.ru/prog/action.rar</a><br>
ззы. только ето немного более ранняя версия]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245473</guid>
        <pubDate>Fri, 14 Nov 2003 16:17:08 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245473</link>
        <description><![CDATA[MeG:  2 wormball<br>что то я не заметил что у тебя меньше кода <!--emo&;)--><img src='http://forum.sources.ru/html/emoticons/wink.gif' border='0' style='vertical-align:middle' alt='wink.gif' /><!--endemo--> <br><br><br><a href='http://www.hw-sw-d.nm.ru/files/ut.zip' target='_blank'>полностью программа с сорцами</a> (управляется стрелками, +, -, правой кнопкой мыши) ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245384</guid>
        <pubDate>Fri, 14 Nov 2003 14:14:12 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245384</link>
        <description><![CDATA[wormball:  ну так у меня тоже приблизительно так, правда у меня матрица каждый раз заново считается <!--emo&:(--><img src='http://forum.sources.ru/html/emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo--> <br>только если её считать заранее, наверняка моя программа станет ещё меньше, со всеми внутренностями&#33; ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245376</guid>
        <pubDate>Fri, 14 Nov 2003 14:07:55 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245376</link>
        <description><![CDATA[Visitor:  Лаконичный-лаконичный <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--><br><br>Если теперь забыть про внутренности етой векторно-матричной библиотеки, то вся программа будет написана в виде<br><br>vect2 = vect1 * matr3;<br><!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--> ]]></description>
        <author>Visitor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245374</guid>
        <pubDate>Fri, 14 Nov 2003 14:04:15 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245374</link>
        <description><![CDATA[wormball:  а ещё говорят, что с++ - лаконичный язык&#33;&#33;<br>да я на паскале 3д екшын написал в ~600 строк, включая мыша и вывод на екран&#33;&#33;&#33;<br>а если только ядро, то ~200 строк<br><a href='http://enzyme.nm.ru/vrash.rar' target='_blank'>http://enzyme.nm.ru/vrash.rar</a> /action.exe<br>выходить буквой q ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245145</guid>
        <pubDate>Fri, 14 Nov 2003 07:48:02 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245145</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// Класс пространства<br>// Space.hpp<br>#ifndef __SPACE__<br>#define __SPACE__<br>#include &#34;vectors.hpp&#34;<br>#include &#34;matrix.hpp&#34;<br>#include &#34;segment.hpp&#34;<br>#include &#34;parall0.hpp&#34;<br>#include &#34;seg_cross.hpp&#34;<br>class space<br>{<br>//Vector * m_pp;<br>Vector m_center;<br>Vector view_center;<br>Vector camera_center;<br>Matrix view, proj;<br>segment AA, BB, CC;<br>segment axisX, axisY, axisZ;<br>segment seg&#91;40&#93;, * par;<br>int proj_num;<br>parall parallelepiped;<br>Matrix &amp; projection&#40;int&#41;; // номер проекции<br>crosser line_c;<br>public&#58;<br>space&#40;&#41;;<br>Vector &amp; get_view_center&#40;&#41;;<br>void set_out_seg&#40;&#41;;<br>segment &amp; get_seg&#40;int&#41;;<br>segment &amp; get_axis&#40;int&#41;;<br>segment * get_parall&#40;&#41;;<br>inline segment * get_line&#40;&#41;<br>{<br>line_c.inwardly&#40;parallelepiped.get_solid&#40;&#41;,<br>parallelepiped.get_normal&#40;&#41;&#41;;<br>// line_c.shadow&#40;camera_center, parallelepiped.get_solid&#40;&#41;&#41;;<br>return line_c.get_cross&#40;view&#41;;<br>};<br>inline Matrix &amp; get_p_pos&#40;&#41;<br>{<br>return parallelepiped.get_pos&#40;&#41;;<br>}<br>inline void move_seg_ex&#40;int dx&#41;{line_c.move_end&#40;Vector&#40;dx, 0, 0&#41;&#41;;}<br>inline void move_seg_bx&#40;int dx&#41;{line_c.move_begin&#40;Vector&#40;dx, 0, 0&#41;&#41;;}<br>};<br>#endif<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->Vector view_center; --- вектор для промежуточных вычислений матрицы<br>отображения;<br>Vector camera_center; --- вектор указывающий положение камеры;<br>Matrix view; --- матрица проецирования;<br>int proj_num; --- номер проекции;<br>parall parallelepiped; --- сам параллелепипед;<br>crosser line_c; --- пересекаемая линия;<br>методы&#58;<br>Matrix &amp; projection&#40;int&#41;; --- устанавливает и возвращает матрицу проецирования;<br>space&#40;&#41;;&#93; --- конструктор класса;<br>Vector &amp; get_view_center&#40;&#41;; --- возвращает ссылку на вектор смещения центра координат;<br>segment * get_parall&#40;&#41;; --- возвращает указатель массива отрезков параллелепипеда;<br>segment * get_line&#40;&#41;; --- возвращает указатель массива отрезков рассекаемой линии;<br>Matrix &amp; get_p_pos&#40;&#41; --- берет ссылку из объекта параллелепипеда на матрицу позиционирования;<br>void move_seg_ex&#40;int dx&#41; --- передает в объект пересекаемой линии смещение конца отрезка;<br>void move_seg_bx&#40;int dx&#41; --- передает в объект пересекаемой линии смещение начала отрезка;<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245139</guid>
        <pubDate>Fri, 14 Nov 2003 07:26:36 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245139</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// parall0.cpp<br><br>#include &#34;parall0.hpp&#34;<br><br>//========================================================================<br>parall&#58;&#58;parall&#40;&#41;<br>{<br> &nbsp;Matrix BB&#40;1&#41;;<br> &nbsp;AA = BB;<br> &nbsp;pos = BB;<br> &nbsp;//tlb = Vector&#40;-20&#41;;<br> &nbsp;//brf = Vector&#40;80&#41;;<br> &nbsp;tlb = Vector&#40;-30, -50, -30&#41;;<br> &nbsp;brf = Vector&#40;30, 50, 50&#41;;<br>}<br><br>//========================================================================<br>void parall&#58;&#58;create_solid&#40;&#41;<br>{<br> &nbsp;//pos = RotateX&#40;1.0&#41;;<br> &nbsp;//pos = RotateY&#40;1.0&#41; * &nbsp;RotateX&#40;1.0&#41;;<br> &nbsp;//pos = Scale&#40; Vector&#40;&#41; = 1.5&#41; * RotateY&#40;3.1415926 / 4&#41; * RotateX&#40;3.1415926 / 4&#41;;<br> &nbsp;//pos = Scale&#40; Vector&#40;&#41; = 1.5&#41;;<br> &nbsp;solid&#91;0&#93; = pos * tlb; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// слева, сверху, сзади<br> &nbsp;solid&#91;1&#93; = pos * Vector&#40;tlb.x, tlb.y, brf.z&#41;; &nbsp;// слева, сверху, спереди<br> &nbsp;solid&#91;2&#93; = pos * Vector&#40;brf.x, tlb.y, brf.z&#41;; &nbsp;// справа, сверху, спереди<br> &nbsp;solid&#91;3&#93; = pos * Vector&#40;brf.x, tlb.y, tlb.z&#41;; &nbsp;// справа, сверху, сзади<br> &nbsp;solid&#91;4&#93; = pos * Vector&#40;brf.x, brf.y, tlb.z&#41;; &nbsp;// справа, снизу, сзади<br> &nbsp;solid&#91;5&#93; = pos * Vector&#40;tlb.x, brf.y, tlb.z&#41;; &nbsp;// слева, снизу, сзади<br> &nbsp;solid&#91;6&#93; = pos * Vector&#40;tlb.x, brf.y, brf.z&#41;; &nbsp;// слева, снизу, спереди<br> &nbsp;solid&#91;7&#93; = pos * brf; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// спрва, снизу, спереди<br><br> &nbsp;normal&#91;0&#93; = pos * Vector&#40;0, -1, 0&#41;; &nbsp; &nbsp;// к верхней грани<br> &nbsp;normal&#91;1&#93; = pos * Vector&#40;-1, 0, 0&#41;; &nbsp; // к левой грани<br> &nbsp;normal&#91;2&#93; = pos * Vector&#40;0, 0, 1&#41;; &nbsp; &nbsp;// к передней грани<br> &nbsp;normal&#91;3&#93; = pos * Vector&#40;1, 0, 0&#41;; &nbsp; &nbsp;// к правой грани<br> &nbsp;normal&#91;4&#93; = pos * Vector&#40;0, 0, -1&#41;; &nbsp; // к задней грани<br> &nbsp;normal&#91;5&#93; = pos * Vector&#40;0, 1, 0&#41;; &nbsp; // к нижней грани<br>}<br><br>//========================================================================<br>// Заполняет таблицу отрезков и возвращает указатель на нее<br>segment * parall&#58;&#58;get_V_table&#40;const Vector d, const Matrix &nbsp;V&#41;<br>{<br> &nbsp;create_solid&#40;&#41;;<br> &nbsp;//vis_plane&#40;d&#41;;//&#40;Vector&#41;//вычисляет cos_seg&#91;6&#93; с позиции камеры<br> &nbsp;view_table&#91;0&#93; = segment&#40;solid&#91;0&#93;, solid&#91;1&#93;, vis_seg&#40;0, d&#41;&#41; * V;<br> &nbsp;view_table&#91;1&#93; = segment&#40;solid&#91;1&#93;, solid&#91;2&#93;, vis_seg&#40;1, d&#41;&#41; * V;<br> &nbsp;view_table&#91;2&#93; = segment&#40;solid&#91;2&#93;, solid&#91;3&#93;, vis_seg&#40;2, d&#41;&#41; * V;<br> &nbsp;view_table&#91;3&#93; = segment&#40;solid&#91;0&#93;, solid&#91;3&#93;, vis_seg&#40;3, d&#41;&#41; * V;<br> &nbsp;view_table&#91;4&#93; = segment&#40;solid&#91;0&#93;, solid&#91;5&#93;, vis_seg&#40;4, d&#41;&#41; * V;<br> &nbsp;view_table&#91;5&#93; = segment&#40;solid&#91;1&#93;, solid&#91;6&#93;, vis_seg&#40;5, d&#41;&#41; * V;<br> &nbsp;view_table&#91;6&#93; = segment&#40;solid&#91;2&#93;, solid&#91;7&#93;, vis_seg&#40;6, d&#41;&#41; * V;<br> &nbsp;view_table&#91;7&#93; = segment&#40;solid&#91;3&#93;, solid&#91;4&#93;, vis_seg&#40;7, d&#41;&#41; * V;<br> &nbsp;view_table&#91;8&#93; = segment&#40;solid&#91;4&#93;, solid&#91;5&#93;, vis_seg&#40;8, d&#41;&#41; * V;<br> &nbsp;view_table&#91;9&#93; = segment&#40;solid&#91;5&#93;, solid&#91;6&#93;, vis_seg&#40;9, d&#41;&#41; * V;<br> &nbsp;view_table&#91;10&#93; = segment&#40;solid&#91;6&#93;, solid&#91;7&#93;, vis_seg&#40;10, d&#41;&#41; * V;<br> &nbsp;view_table&#91;11&#93; = segment&#40;solid&#91;7&#93;, solid&#91;4&#93;, vis_seg&#40;11, d&#41;&#41; * V;<br> &nbsp;return view_table;<br>}<br><br>//========================================================================<br><br>//========================================================================<br>// вычисляет видимость грани с позиции точки размещения камеры<br>float parall&#58;&#58;vis_plane&#40;int n, Vector s&#41;<br>{<br> &nbsp;Vector v;<br> &nbsp;switch&#40;n&#41;<br> &nbsp;{<br> &nbsp; &nbsp;case 0 &#58; v = solid&#91;0&#93;; break; &nbsp; &nbsp; &nbsp; // 0, 1, 2, 3<br> &nbsp; &nbsp;case 1 &#58; v = solid&#91;0&#93;; break; &nbsp; &nbsp; &nbsp; // 0, 1, 5, 6<br> &nbsp; &nbsp;case 2 &#58; v = solid&#91;1&#93;; break; &nbsp; &nbsp; &nbsp; // 1, 2, 6, 7<br> &nbsp; &nbsp;case 3 &#58; v = solid&#91;2&#93;; break; &nbsp; &nbsp; &nbsp; // 2, 3, 4, 7<br> &nbsp; &nbsp;case 4 &#58; v = solid&#91;0&#93;; break; &nbsp; &nbsp; &nbsp; // 0, 3, 4, 5<br> &nbsp; &nbsp;case 5 &#58; v = solid&#91;4&#93;; break; &nbsp; &nbsp; &nbsp; // 4, 5, 6, 7<br> &nbsp;}<br> &nbsp;return normal&#91;n&#93;.z * s.z - &#40;normal&#91;n&#93;.x * v.x +<br> &nbsp; &nbsp; &nbsp;normal&#91;n&#93;.y * v.y + normal&#91;n&#93;.z * v.z&#41;;<br>}<br><br>//========================================================================<br>// вычисляет видимость ребра<br>// возвращает номер типа линии для данного отрезка<br>int parall&#58;&#58;vis_seg&#40;int seg, Vector dir&#41;<br>{<br> &nbsp;int v_s = 8, nv_s = 10;<br> &nbsp;switch&#40;seg&#41;<br> &nbsp;{<br> &nbsp; &nbsp;case 0&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;0, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;1, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 1&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;0, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;2, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 2&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;0, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;3, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 3&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;0, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;4, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 4&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;4, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;1, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 5&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;2, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;1, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 6&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;2, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;3, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 7&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;3, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;4, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 8&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;4, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;5, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 9&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;1, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;5, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 10&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;2, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;5, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp; &nbsp;case 11&#58; return<br> &nbsp; &nbsp;&#40;&#40;vis_plane&#40;3, dir&#41; &#60; 0&#41; &amp;&amp; &#40;vis_plane&#40;5, dir&#41; &#60; 0&#41;&#41; ? nv_s &#58; v_s;<br> &nbsp;}<br> &nbsp;return 0;<br>}<br>//========================================================================<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245135</guid>
        <pubDate>Fri, 14 Nov 2003 07:24:28 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245135</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// Параллелепипед<br>// PARALL0.HPP<br>#ifndef __PARALL0__<br>#define __PARALL0__<br>#include &#34;vectors.hpp&#34;<br>#include &#34;matrix.hpp&#34;<br>#include &#34;segment.hpp&#34;<br>class parall<br>{<br>private&#58;<br> Vector tlb, brf;         // две вершины задающие параллелепипед<br> Vector solid&#91;8&#93;;         // вершины позиционированные<br> segment view_table&#91;12&#93;;  // отрезки на картинной плоскости<br> Vector normal&#91;6&#93;;        // нормали к граням параллелепипеда<br> Matrix AA;<br> Matrix pos;      // матрица позиционирования параллелепипеда<br> void create_solid&#40;&#41;;// создает массивы вершин и нормалей к граням<br> int vis_seg&#40;int, Vector&#41;;// проверка видимости ребра<br> float vis_plane&#40;int, Vector&#41;;// проверка видимости грани<br>public&#58;<br> parall&#40;&#41;;//{Matrix BB&#40;1&#41;; AA = BB; pos = BB;}<br> segment * rot_x&#40;int&#41;;<br> segment * rot_y&#40;int&#41;;<br> segment * rot_z&#40;int&#41;;<br> segment * rot_v&#40;int&#41;;<br> segment * get_V_table&#40;const Vector, const Matrix V&#41;;<br> inline Vector &amp; get_tlb&#40;&#41;{return tlb;}<br> inline Vector &amp; get_brf&#40;&#41;{return brf;}<br> inline Vector * get_solid&#40;&#41;{return solid;}<br> inline Vector * get_normal&#40;&#41;{return normal;}<br> inline Matrix &amp; get_pos&#40;&#41;{return pos;}<br> //inline int get_status&#40;&#41;{return 0;}<br>};<br>#endif<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245126</guid>
        <pubDate>Fri, 14 Nov 2003 07:09:31 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245126</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// SEGMENT.cpp<br><br>#include &#34;segment.hpp&#34;<br><br>//========================================================================<br>/*segment&#58;&#58;segment&#40;const segment &amp; RR&#41;<br>{<br> &nbsp;begin_point.x = RR.begin_point.x;<br> &nbsp;begin_point.y = RR.begin_point.y;<br> &nbsp;begin_point.z = RR.begin_point.z;<br> &nbsp;end_point = RR.end_point;<br> &nbsp;status = RR.status;<br>}*/<br>//========================================================================<br>segment &amp; segment&#58;&#58;operator = &#40;const segment &amp; s&#41;<br>{<br> &nbsp;begin_point = s.begin_point;<br> &nbsp;end_point = s.end_point;<br> &nbsp;status = s.status; return * this;<br>}<br><br>//========================================================================<br>/*segment &amp; segment&#58;&#58;operator * &#40;const Matrix &amp; m&#41;<br>{<br> &nbsp;begin_point = m * begin_point;<br> &nbsp;end_point = m * end_point;<br> &nbsp;return * this;<br>} */<br><br>//========================================================================<br>segment operator * &#40;const segment &amp; s, const Matrix &amp; m&#41;<br>{<br> &nbsp;return segment&#40;m * s.begin_point, m * s.end_point, s.status&#41;;<br>}<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245125</guid>
        <pubDate>Fri, 14 Nov 2003 07:08:01 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245125</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// Класс отрезок<br>// SEGMENT.HPP<br><br>#ifndef __SEGMENT__<br>#define __SEGMENT__<br><br>#include &#34;vectors.hpp&#34;<br>#include &#34;matrix.hpp&#34;<br><br>class segment<br>{<br>private&#58;<br> &nbsp;Vector begin_point, end_point;<br> &nbsp;int status;<br>public&#58;<br> &nbsp;inline segment&#40;&#41;{status = 0;}<br> &nbsp;inline segment&#40;Vector b, Vector e&#41;<br> &nbsp; &nbsp; &nbsp;{begin_point = b, end_point = e, status = 1;}<br> &nbsp;inline segment&#40;Vector b, Vector e, int s&#41;<br> &nbsp; &nbsp; &nbsp;{begin_point = b, end_point = e, status = s;}<br> &nbsp;segment &amp; operator = &#40;const segment &amp;&#41;;<br>// &nbsp;segment &amp; operator * &#40;const Matrix &amp;&#41;;<br> &nbsp;friend segment &nbsp;operator * &#40;const segment &amp;, const Matrix &amp;&#41;;<br> &nbsp;inline Vector &amp; get_begin&#40;&#41;{return begin_point;};<br> &nbsp;inline Vector &amp; get_end&#40;&#41;{return end_point;};<br> &nbsp;inline int &amp; get_status&#40;&#41;{return status;};<br> &nbsp;inline Vector &amp; operator &#91;&#93;&#40;int n&#41;<br> &nbsp; &nbsp; &nbsp;{if&#40;n&#41; return end_point; else return begin_point;};<br>};<br><br>#endif<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245122</guid>
        <pubDate>Fri, 14 Nov 2003 07:05:07 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245122</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// Matrix.cpp<br><br>#include &#60;math.h&#62;<br>#include &#34;Matrix.hpp&#34;<br><br>//========================================================================<br>Matrix&#58;&#58;Matrix&#40;double v&#41;// конструктор диагональной матрицы<br>{<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;x&#91;i&#93;&#91;j&#93;=&#40;i==j&#41;?v&#58;0.0;<br> &nbsp;x&#91;3&#93;&#91;3&#93;=1;<br>}<br><br>//========================================================================<br>void Matrix&#58;&#58;Invert&#40;&#41;<br>{<br> &nbsp;Matrix Out&#40;1&#41;;<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp;{<br> &nbsp; &nbsp;double d = x&#91;i&#93;&#91;i&#93;;<br> &nbsp; &nbsp;if &#40;d &#33;= 1.0&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp;Out.x&#91;i&#93;&#91;j&#93; /= d;<br> &nbsp; &nbsp; &nbsp; &nbsp;x&#91;i&#93;&#91;j&#93; /= d;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp;}<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp;if &#40;j &#33;= i&#41;<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp;if &#40;x&#91;j&#93;&#91;i&#93; &#33;= 0.0&#41;<br> &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double mulby = x&#91;j&#93;&#91;i&#93;;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for &#40;int k = 0; k &#60; 4; k++&#41;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x&#91;j&#93;&#91;k&#93; -= mulby * x&#91;i&#93;&#91;k&#93;;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out.x&#91;j&#93;&#91;k&#93; -= mulby * Out.x&#91;i&#93;&#91;k&#93;;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp;}<br> &nbsp;}<br> &nbsp;*this = Out;<br>}<br><br>//========================================================================<br>// транспонировать матрицу<br>void Matrix&#58;&#58;Transpose&#40;&#41;<br>{<br> &nbsp;double t;<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = i; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;if &#40;i &#33;= j&#41;<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp;t = x&#91;i&#93;&#91;j&#93;;<br> &nbsp; &nbsp; &nbsp; &nbsp;x&#91;i&#93;&#91;j&#93;= x&#91;j&#93;&#91;i&#93;;<br> &nbsp; &nbsp; &nbsp; &nbsp;x&#91;j&#93;&#91;i&#93;= t;<br> &nbsp; &nbsp; &nbsp;}<br>}<br><br>//========================================================================<br>Matrix&amp; Matrix&#58;&#58;operator += &#40;const Matrix&amp; A&#41;<br>{<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;x&#91;i&#93;&#91;j&#93; &nbsp;+= A.x&#91;i&#93;&#91;j&#93;;<br> &nbsp;return *this;<br>}<br><br>//========================================================================<br>Matrix&amp; Matrix&#58;&#58;operator -= &#40;const Matrix&amp; A&#41;<br>{<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;x&#91;i&#93;&#91;j&#93; &nbsp;-= A.x&#91;i&#93;&#91;j&#93;;<br> &nbsp;return *this;<br>}<br><br>//========================================================================<br>Matrix&amp; Matrix&#58;&#58;operator *= &#40;double v&#41;<br>{<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;x&#91;i&#93;&#91;j&#93; &nbsp;*= v;<br> &nbsp;return *this;<br>}<br><br>//========================================================================<br>Matrix&amp; Matrix&#58;&#58;operator *= &#40;const Matrix&amp; A&#41;<br>{<br> &nbsp;Matrix res = *this;<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp;double sum = 0;<br> &nbsp; &nbsp; &nbsp;for &#40;int k = 0; k &#60; 4; k++&#41;<br> &nbsp; &nbsp; &nbsp; &nbsp;sum += res.x&#91;i&#93;&#91;k&#93; * A.x&#91;k&#93;&#91;j&#93;;<br> &nbsp; &nbsp; &nbsp;x&#91;i&#93;&#91;j&#93; &nbsp;= sum;<br> &nbsp; &nbsp;}<br> &nbsp;return *this;<br>}<br><br>//========================================================================<br>Matrix &nbsp;operator + &#40;const Matrix&amp; A,const Matrix&amp; B&#41;<br>{<br> &nbsp;Matrix res;<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp; res.x&#91;i&#93;&#91;j&#93; = A.x&#91;i&#93;&#91;j&#93; + B.x&#91;i&#93;&#91;j&#93;;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix &nbsp;operator - &#40;const Matrix&amp; A,const Matrix&amp; B&#41;<br>{<br> &nbsp;Matrix res;<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;res.x&#91;i&#93;&#91;j&#93; = A.x&#91;i&#93;&#91;j&#93; - B.x&#91;i&#93;&#91;j&#93;;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix &nbsp;operator * &#40;const Matrix&amp; A,const Matrix&amp; B&#41;<br>{<br> &nbsp;Matrix res;<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp;double sum = 0;<br> &nbsp; &nbsp; &nbsp;for &#40;int k = 0; k &#60; 4; k++&#41;<br> &nbsp; &nbsp; &nbsp; &nbsp;sum += &nbsp;A.x&#91;i&#93;&#91;k&#93; * B.x&#91;k&#93;&#91;j&#93;;<br> &nbsp; &nbsp; &nbsp;res.x&#91;i&#93;&#91;j&#93; = sum;<br> &nbsp; &nbsp;}<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix &nbsp;operator * &#40;const Matrix&amp; A,double v&#41;<br>{<br> &nbsp;Matrix res;<br> &nbsp;for &#40;int i = 0; i &#60; 4; i++&#41;<br> &nbsp; &nbsp;for &#40;int j = 0; j &#60; 4; j++&#41;<br> &nbsp; &nbsp; &nbsp;res.x&#91;i&#93;&#91;j&#93; = A.x&#91;i&#93;&#91;j&#93; * v;<br> return res;<br>}<br><br>//========================================================================<br>Vector operator * &#40;const Matrix&amp; M,const Vector&amp; v&#41;<br>{<br> &nbsp;Vector res;<br> &nbsp;res.x = v.x * M.x&#91;0&#93;&#91;0&#93; + v.y * M.x&#91;1&#93;&#91;0&#93; + v.z * M.x&#91;2&#93;&#91;0&#93; + M.x&#91;3&#93;&#91;0&#93;;<br> &nbsp;res.y = v.x * M.x&#91;0&#93;&#91;1&#93; + v.y * M.x&#91;1&#93;&#91;1&#93; + v.z * M.x&#91;2&#93;&#91;1&#93; + M.x&#91;3&#93;&#91;1&#93;;<br> &nbsp;res.z = v.x * M.x&#91;0&#93;&#91;2&#93; + v.y * M.x&#91;1&#93;&#91;2&#93; + v.z * M.x&#91;2&#93;&#91;2&#93; + M.x&#91;3&#93;&#91;2&#93;;<br> &nbsp;double denom = v.x * M.x&#91;0&#93;&#91;3&#93; + v.y * M.x&#91;1&#93;&#91;3&#93; + v.z * M.x&#91;2&#93;&#91;3&#93; + M.x&#91;3&#93;&#91;3&#93;;<br> &nbsp;if &#40; denom &#33;= 1.0&#41;<br> &nbsp; &nbsp;res /= denom;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix Translate &#40;const Vector&amp; Loc&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;res.x&#91;3&#93;&#91;0&#93; = Loc.x;<br> &nbsp;res.x&#91;3&#93;&#91;1&#93; = Loc.y;<br> &nbsp;res.x&#91;3&#93;&#91;2&#93; = Loc.z;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix Scale &#40;const Vector&amp; v&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;res.x&#91;0&#93;&#91;0&#93; = v.x;<br> &nbsp;res.x&#91;1&#93;&#91;1&#93; = v.y;<br> &nbsp;res.x&#91;2&#93;&#91;2&#93; = v.z;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix RotateX &#40;double Angle&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;double Cosine = cos&#40;Angle&#41;;<br> &nbsp;double Sine = sin&#40;Angle&#41;;<br> &nbsp;res.x&#91;1&#93;&#91;1&#93; = Cosine;<br> &nbsp;res.x&#91;2&#93;&#91;1&#93; = -Sine;<br> &nbsp;res.x&#91;1&#93;&#91;2&#93; = Sine;<br> &nbsp;res.x&#91;2&#93;&#91;2&#93; = Cosine;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix RotateY &#40;double Angle&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;double Cosine = cos&#40;Angle&#41;;<br> &nbsp;double Sine = sin&#40;Angle&#41;;<br> &nbsp;res.x&#91;0&#93;&#91;0&#93; = Cosine;<br> &nbsp;res.x&#91;2&#93;&#91;0&#93; = -Sine;<br> &nbsp;res.x&#91;0&#93;&#91;2&#93; = Sine;<br> &nbsp;res.x&#91;2&#93;&#91;2&#93; = Cosine;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix RotateZ &#40;double Angle&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;double Cosine = cos&#40;Angle&#41;;<br> &nbsp;double Sine = sin&#40;Angle&#41;;<br> &nbsp;res.x&#91;0&#93;&#91;0&#93; = Cosine;<br> &nbsp;res.x&#91;1&#93;&#91;0&#93; = -Sine;<br> &nbsp;res.x&#91;0&#93;&#91;1&#93; = Sine;<br> &nbsp;res.x&#91;1&#93;&#91;1&#93; = Cosine;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix Rotate &#40;const Vector&amp; axis, double Angle&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;double Cosine = cos&#40;Angle&#41;;<br> &nbsp;double Sine = sin&#40;Angle&#41;;<br> &nbsp;res.x&#91;0&#93;&#91;0&#93; = axis.x * axis.x + &#40;1 - axis.x * axis.x&#41;* Cosine&#59;<br> &nbsp;res.x&#91;0&#93;&#91;1&#93; = axis.x * axis.y * &#40;1 - Cosine&#41; + axis.z * Sine;<br> &nbsp;res.x&#91;0&#93;&#91;2&#93; = axis.x * axis.z * &#40;1 - Cosine&#41; - axis.y * Sine;<br> &nbsp;res.x&#91;0&#93;&#91;3&#93; = 0;<br> &nbsp;res.x&#91;1&#93;&#91;0&#93; = axis.x * axis.y * &#40;1 - Cosine&#41; - axis.z * Sine;<br> &nbsp;res.x&#91;1&#93;&#91;1&#93; = axis.y * axis.y + &#40;1 - axis.y * axis.y&#41;* Cosine;<br> &nbsp;res.x&#91;1&#93;&#91;2&#93; = axis.y * axis.z * &#40;1 - Cosine&#41; + axis.x * Sine;<br> &nbsp;res.x&#91;1&#93;&#91;3&#93; = 0;<br> &nbsp;res.x&#91;2&#93;&#91;0&#93; = axis.x * axis.z * &#40;1 - Cosine&#41; + axis.y * Sine;<br> &nbsp;res.x&#91;2&#93;&#91;1&#93; = axis.y * axis.z * &#40;1 - Cosine&#41; - axis.x * Sine;<br> &nbsp;res.x&#91;2&#93;&#91;2&#93; = axis.z * axis.z + &#40;1 - axis.z * axis.z&#41;* Cosine;<br> &nbsp;res.x&#91;2&#93;&#91;3&#93; = 0;<br> &nbsp;res.x&#91;3&#93;&#91;0&#93; = 0;<br> &nbsp;res.x&#91;3&#93;&#91;1&#93; = 0;<br> &nbsp;res.x&#91;3&#93;&#91;2&#93; = 0;<br> &nbsp;res.x&#91;3&#93;&#91;3&#93; = 1;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix MirrorX &#40;&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;res.x&#91;0&#93;&#91;0&#93; = -1;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix MirrorY &#40;&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;res.x&#91;1&#93;&#91;1&#93; = -1;<br> &nbsp;return res;<br>}<br><br>//========================================================================<br>Matrix MirrorZ &#40;&#41;<br>{<br> &nbsp;Matrix res&#40;1&#41;;<br> &nbsp;res.x&#91;2&#93;&#91;2&#93; = -1;<br> &nbsp;return res;<br>}<br><br>//========================================================================<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245119</guid>
        <pubDate>Fri, 14 Nov 2003 07:03:49 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245119</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// Определение класса матриц преобразования векторов<br>// MATRIX.HPP<br><br>#ifndef __MATRIX__<br>#define __MATRIX__<br><br>#include &#34;Vectors.hpp&#34;<br><br>class Matrix<br>{<br> &nbsp;public&#58;<br> &nbsp;double x&#91;4&#93;&#91;4&#93;;<br> &nbsp;Matrix &#40;&#41; {};<br> &nbsp;Matrix &#40;double&#41;; // конструктор диагональной матрицы<br> &nbsp;Matrix&amp; operator += &#40;const Matrix&amp;&#41;; // прибавить матрицу<br> &nbsp;Matrix&amp; operator -= &#40;const Matrix&amp;&#41;; &nbsp;// вычесть матрицу<br> &nbsp;Matrix&amp; operator *= &#40;const Matrix&amp;&#41;; &nbsp;// умножить матрицу на матрицу<br> &nbsp;Matrix&amp; operator *= &#40;double&#41;; &nbsp; &nbsp; &nbsp;// умножить матрицу на число<br> &nbsp;Matrix&amp; operator /= &#40;double&#41;; &nbsp; &nbsp; &nbsp;// разделить матирцу на число<br> &nbsp;void Invert&#40;&#41;;<br> &nbsp;void Transpose&#40;&#41;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// транспонировать матрицу<br> &nbsp;friend Matrix operator + &#40;const Matrix&amp;,const Matrix&amp;&#41;;// сложить матрицы<br> &nbsp;friend Matrix operator - &#40;const Matrix&amp;,const Matrix&amp;&#41;;// вычесть матрицы<br> &nbsp;friend Matrix operator * &#40;const Matrix&amp;,double&#41;; &nbsp;// умножить матрицу<br> &nbsp;friend Matrix operator * &#40;const Matrix&amp;,const Matrix&amp;&#41;;// перемножить матрицы<br> &nbsp;friend Vector operator * &#40;const Matrix&amp;,const Vector&amp;&#41;;// перемножить матрицу и вектор<br>};<br> &nbsp;Matrix Translate &#40;const Vector&amp;&#41;; &nbsp; &nbsp;// передвинуть матрицу на вектор<br> &nbsp;Matrix Scale &#40;const Vector&amp;&#41;; &nbsp; &nbsp; &nbsp; &nbsp;// масштабировать матрицу<br> &nbsp;Matrix RotateX &#40;double&#41;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // повернуть матрицу вокруг X<br> &nbsp;Matrix RotateY &#40;double&#41;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // повернуть матрицу вокруг Y<br> &nbsp;Matrix RotateZ &#40;double&#41;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // повернуть матрицу вокруг Z<br> &nbsp;Matrix Rotate &#40;const Vector&amp; v,double&#41;;// повернуть матрицу вокруг вектора<br> &nbsp;Matrix MirrorX &#40;&#41;;<br> &nbsp;Matrix MirrorY &#40;&#41;;<br> &nbsp;Matrix MirrorZ &#40;&#41;;<br><br>#endif<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245114</guid>
        <pubDate>Fri, 14 Nov 2003 07:02:43 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245114</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>// Vectors.cpp<br><br>#include &#60;math.h&#62;<br>#include &#60;stdlib.h&#62;<br>#include &#34;Vectors.hpp&#34;<br>//========================================================================<br>// оператор векторного произведени<br>Vector operator ^ &#40;const Vector&amp; u,const Vector&amp; v&#41;<br> {<br>  return Vector &#40;u.y * v.z - u.z * v.y , u.z * v.x - u.x * v.z,<br>     u.x * v.y - u.y * v.x&#41;;<br> }<br>//========================================================================<br>// получение равномерно распределенного случайного единичного вектора<br> Vector RndVector&#40;&#41;<br>  {<br>    Vector v&#40;rand&#40;&#41; - 0.5*RAND_MAX,<br>      rand&#40;&#41; - 0.5*RAND_MAX,rand&#40;&#41; - 0.5*RAND_MAX&#41;;<br>    return Normalize&#40;v&#41;;<br>  }<br>//========================================================================<br>// отсечение вектора<br> Vector&amp; Clip &#40;Vector&amp; v&#41;<br>  {<br>    if &#40;v.x &#60; 0.0&#41; v.x = 0.0;<br>     else<br>      if &#40;v.x &#62; 1.0&#41; v.x = 1.0;<br>     if &#40;v.y &#60; 0.0&#41; v.y = 0.0;<br>      else<br>if &#40;v.y &#62; 1.0&#41; v.y = 1.0;<br>     if &#40;v.z &#60; 0.0&#41; v.z = 0.0;<br>      else<br>if &#40;v.z &#62; 1.0&#41; v.z = 1.0;<br>    return v;<br>  }<br>//========================================================================<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245113</guid>
        <pubDate>Fri, 14 Nov 2003 07:01:36 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245113</link>
        <description><![CDATA[MeG:  <!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->// Объявление класса вектор<br>// Vectors.hpp<br><br>#ifndef __VECTORS__<br>#define __VECTORS__<br><br>#include &#60;math.h&#62;<br><br>//========================================================================<br>class Vector<br>{<br>public&#58;<br> &nbsp;double x,y,z;<br> &nbsp;//Vector&#40;&#41;;<br> &nbsp;inline Vector&#40;&#41;{x = y = z = 0;}<br> &nbsp;Vector&#40;double v&#41; {x = y = z = v;}; &nbsp;// конструктор с одним параметром<br> &nbsp;Vector&#40;const Vector&amp; v&#41;{x = v.x; y = v.y; z = v.z;}; &nbsp;// конструктор копировани<br> &nbsp;Vector&#40;double vx, double vy, double vz&#41;{x = vx; y = vy; z = vz;}; &nbsp;// конструктор с установкой всех координат<br> &nbsp;Vector&amp; operator = &#40;const Vector&amp; v&#41; &nbsp;// оператор присваивания вектора вектору<br> &nbsp; &nbsp; &nbsp; &nbsp; {x = v.x; y = v.y; z = v.z; return *this;};<br> &nbsp;Vector&amp; operator = &#40;double f&#41; {x = y = z = f; return *this;}; &nbsp;// оператор присваивания одного числа всем координатам<br> &nbsp;Vector operator - &#40;&#41;const; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// оператор инвертирования всех координат<br> &nbsp;Vector&amp; operator += &#40;const Vector&amp;&#41;; // оператор увеличения координат одного вектора на координаты другого вектора<br> &nbsp;Vector&amp; operator -= &#40;const Vector&amp;&#41;; // оператор уменьшения координат одного вектора из координат другого вектора<br> &nbsp;Vector&amp; operator *= &#40;const Vector&amp;&#41;; // оператор умножения координат одного вектра на координаты другого вектора<br> &nbsp;Vector&amp; operator *= &#40;double&#41;; // оператор умножения координат вектора на число<br> &nbsp;Vector&amp; operator /= &#40;double&#41;; // оператор деления координат вектора на число<br><br> &nbsp;friend Vector operator + &#40;const Vector&amp;,const Vector&amp;&#41;; // оператор сложения векторов<br> &nbsp;friend Vector operator - &#40;const Vector&amp;,const Vector&amp;&#41;; // оператор вычитания векторов<br> &nbsp;friend Vector operator * &#40;const Vector&amp;,const Vector&amp;&#41;; // оператор перемножения векторов<br> &nbsp;friend Vector operator * &#40;double,const Vector&amp;&#41;; // оператор умножения числа на вектор<br> &nbsp;friend Vector operator * &#40;const Vector&amp;,double&#41;; // оператор умножения вектора на число<br> &nbsp;friend Vector operator / &#40;const Vector&amp;,double&#41;; // оператор деления вектора на число<br> &nbsp;friend Vector operator / &#40;const Vector&amp;,const Vector&amp;&#41;; // оператор деления векторов<br> &nbsp;friend double operator &amp; &#40;const Vector&amp; u,const Vector&amp; v&#41;; // оператор скалярного произведени<br> &nbsp;friend Vector operator ^ &#40;const Vector&amp;,const Vector&amp;&#41;; // оператор векторного произведени<br> &nbsp;double operator &#33; &#40;&#41; {return &#40;double&#41; sqrt&#40;x*x + y*y + z*z&#41;;}; // оператор вычисления длинны вектора<br> &nbsp;double&amp; operator &#91;&#93; &#40;int n&#41; {return *&#40;&amp;x + n&#41;;}; // оператор получения компонента вектора<br> &nbsp;int &nbsp;operator &#60; &#40;double v&#41;{return x &#60; v &amp;&amp; y &#60; v &amp;&amp; z &#60; v;}; // оператор сравнения векторов<br> &nbsp;int &nbsp;operator &#62; &#40;double v&#41;{return x &#62; v &amp;&amp; y &#62; v &amp;&amp; z &#62; v;}; // оператор сравнения векторов<br> &nbsp;int &nbsp;operator &#60;= &#40;double v&#41;{return x &#60;= v &amp;&amp; y &#60;= v &amp;&amp; z &#60;= v;}; // оператор сравнения векторов<br> &nbsp;int &nbsp;operator &#62;= &#40;double v&#41;{return x &#62;= v &amp;&amp; y &#62;= v &amp;&amp; z &#62;= v;}; // оператор сравнения векторов<br> // &nbsp; operator int&#40;&#41; {return &#40;int&#41;x,&#40;int&#41;y;};<br>};<br><br>//========================================================================<br> &nbsp; class Ray<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; public&#58;<br> &nbsp; &nbsp; &nbsp;Vector Org;<br> &nbsp; &nbsp; &nbsp;Vector Dir;<br> &nbsp; &nbsp; &nbsp;Ray &#40;&#41; {};<br> &nbsp; &nbsp; &nbsp;Ray &#40;Vector&amp; o,Vector&amp; d&#41; {Org = 0;Dir = d;};<br> &nbsp; &nbsp; Vector Point &#40;double t&#41;{return Org + Dir*t;};<br> &nbsp; &nbsp;};<br><br>//========================================================================<br>// Конструктор по умолчанию<br><br>//========================================================================<br>// оператор инвертирования всех координат вектора<br>inline Vector Vector&#58;&#58;operator - &#40;&#41;const<br>{<br> &nbsp;return Vector&#40;-x,-y,-z&#41;;<br>}<br>//========================================================================<br>// оператор скалярного произведения векторов<br>inline double operator &amp; &#40;const Vector&amp; u,const Vector&amp; v&#41;<br>{<br> &nbsp;return u.x*v.x + u.y*v.y + u.z*v.z;<br>}<br>//========================================================================<br>// оператор сложения векторов<br>inline Vector operator + &#40;const Vector&amp; u,const Vector&amp; v&#41;<br>{<br> &nbsp;return Vector &#40;u.x + v.x,u.y + v.y, u.z + v.z&#41;;<br>}<br>//========================================================================<br>// оператор вычитания векторов<br> &nbsp; inline Vector operator - &#40;const Vector&amp; u,const Vector&amp; v&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; return Vector &#40;u.x - v.x,u.y - v.y, u.z - v.z&#41;;<br> &nbsp; &nbsp;}<br>//========================================================================<br>// оператор перемножения векторов<br> &nbsp; inline Vector operator * &#40;const Vector&amp; u,const Vector&amp; v&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; return Vector &#40;u.x * v.x,u.y * v.y, u.z * v.z&#41;;<br> &nbsp; &nbsp;}<br>//========================================================================<br>// оператор умножения вектора на число<br> &nbsp; inline Vector operator * &#40;const Vector&amp; u,double f&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; return Vector &#40;u.x * f,u.y * f, u.z * f&#41;;<br> &nbsp; &nbsp;}<br>//========================================================================<br>// оператор умножения числа на вектор<br> &nbsp; inline Vector operator * &#40;double f, const Vector&amp; u&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; return Vector &#40;f * u.x, f * u.y, f * u.z&#41;;<br> &nbsp; &nbsp;}<br>//========================================================================<br>// оператор деления вектора на число<br> &nbsp; inline Vector operator / &#40;const Vector&amp; u, double f&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; return Vector &#40;u.x / f, u.y / f, u.z / f&#41;;<br> &nbsp; &nbsp;}<br>//========================================================================<br>// оператор деления векторов<br> &nbsp; inline Vector operator / &#40;const Vector&amp; u, const Vector&amp; v&#41;<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; return Vector &#40;u.x / v.x, u.y / v.y, u.z / v.z&#41;;<br> &nbsp; &nbsp;}<br>//========================================================================<br>// оператор увеличения координат одного вектора на координаты другого вектора<br> &nbsp;inline Vector&amp; &nbsp;Vector&#58;&#58; operator += &#40;const Vector&amp; v&#41;<br> &nbsp; {<br> &nbsp; &nbsp;x+= v.x;<br> &nbsp; &nbsp;y+= v.y;<br> &nbsp; &nbsp;z+= v.z;<br> &nbsp; &nbsp; return *this;<br> &nbsp; }<br>//========================================================================<br>// оператор уменьшения координат одного вектора из координаты другого вектора<br> &nbsp;inline Vector&amp; &nbsp;Vector&#58;&#58; operator -= &#40;const Vector&amp; v&#41;<br> &nbsp; {<br> &nbsp; &nbsp;x-= v.x;<br> &nbsp; &nbsp;y-= v.y;<br> &nbsp; &nbsp;z-= v.z;<br> &nbsp; &nbsp; return *this;<br> &nbsp; }<br>//========================================================================<br>// оператор умножения координат вектора на число<br> &nbsp;inline Vector&amp; &nbsp;Vector&#58;&#58; operator *= &#40;double v&#41;<br> &nbsp; {<br> &nbsp; &nbsp;x*= v;<br> &nbsp; &nbsp;y*= v;<br> &nbsp; &nbsp;z*= v;<br> &nbsp; &nbsp; return *this;<br> &nbsp; }<br>//========================================================================<br>// оператор умножения координат одного вектра на координаты другого вектора<br> &nbsp;inline Vector&amp; &nbsp;Vector&#58;&#58;operator *= &#40;const Vector&amp; v&#41;<br> &nbsp; {<br> &nbsp; &nbsp;x*= v.x;<br> &nbsp; &nbsp;y*= v.y;<br> &nbsp; &nbsp;z*= v.z;<br> &nbsp; &nbsp; return *this;<br> &nbsp; }<br>//========================================================================<br>// оператор деления координат вектора на число<br> &nbsp;inline Vector&amp; &nbsp;Vector&#58;&#58; operator /= &#40;double v&#41;<br> &nbsp; {<br> &nbsp; &nbsp;x/= v;<br> &nbsp; &nbsp;y/= v;<br> &nbsp; &nbsp;z/= v;<br> &nbsp; &nbsp; return *this;<br> &nbsp; }<br><br>//========================================================================<br> inline Vector Normalize&#40;Vector&amp; v&#41;{return v/&#33;v;}; &nbsp;// Нормализация вектора<br>//========================================================================<br>// получение равномерно распределенного случайного единичного вектора<br> Vector RndVector&#40;&#41;;<br>//========================================================================<br> Vector&amp; Clip &#40;Vector&amp;&#41;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// отсечение вектора<br><br> #endif<!--c2--></td></tr></table><div class='postcolor'><!--ec2--> ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245112</guid>
        <pubDate>Fri, 14 Nov 2003 06:56:49 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245112</link>
        <description><![CDATA[MeG:  Вопрос достаточно объемный чтобы ответить на него одним постом.<br><br>Проще работать с векторами. Значит нужен соответствующий класс.<br>Все преобразования с векторами удобно делать в матричной форме --- класс матрицы<br>Классы всех примитивов: отрезок, параллелепипед, и тд.<br>Класс пространства с экранной плоскостью и со свойствами перспективы (проецирования).<br>В общем, тут вариантов может быть много.<br><br>При таком подходе, повернуть примитив вокруг одной из своих осей достаточно просто. Нужно перемножить матрицу вершин на матрицу вращения.<br>Примерно так<br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1--><br>CVector one&#40;1, 1, 1&#41;;<br>CVector two&#40;9, 9, 9&#41;;<br><br>CKub sample_kub&#40;one, two&#41;;<br>CKub rotated_kub;<br><br>CMatrix matrix&#40;&#41;;<br><br>CSpace space;<br><br>matrix.RotateZ&#40;10&#41;;<br><br>rotated_kub = sample_kub * matrix;<br><br>space.view&#40;rotated_kub&#41;;<!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br><br>Необходимо правильно математически реализовать вектора, матрицы, перспективу и их свойства.<br><br>Как вариант смотри ниже ]]></description>
        <author>MeG</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245038</guid>
        <pubDate>Thu, 13 Nov 2003 22:42:14 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245038</link>
        <description><![CDATA[Машина:  Вращай точки куба. Создай матрицу оборота или кватернионы оборота. Для матриц: создай матрицы оборота вокруг всех осей и перемножь (помня, что порядок умножения играет роль).<br>Что у тебя за ф-ия проекции какая-то странная.<br>Обычно берется x1 = x*C/z, y1 = y*C/z, а константа C высчитывается в зависимости от угла видения и величины окна-экрана.<br>Фокус.. толщину линии сделай зависимой от z..<br>При нажатии определенной клавиши оборачивай куб на данный угол. ]]></description>
        <author>Машина</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245030</guid>
        <pubDate>Thu, 13 Nov 2003 21:44:38 +0000</pubDate>
        <title>как заставить закрутиться кубик</title>
        <link>https://forum.sources.ru/index.php?showtopic=37822&amp;view=findpost&amp;p=245030</link>
        <description><![CDATA[Serg-Zerg:  Народ вот кусок функции рисующий линию в 3хмерных координатах<br><br>void CKubikDlg::draw3dline(int x1,int y1,int z1,int x2,int y2,int z2,int ch)<br>{		<br>	float kx1,kx2,ky1,ky2;<br>	kx1 = x1 + x1 * (z1 * 0.007);<br>	ky1 = y1 + y1 * (z1 * 0.007);<br>	kx2 = x2 + x2 * (z2 * 0.007);	<br>	ky2 = y2 + y2 * (z2 * 0.007);	<br>	line(kx1,ky1,kx2,ky2,ch);	<br><br>}<br>А как заставить его крутиться програмно, причем не по ламерски как в тесте директ 3Д, а по нажатию клавишь? При чем вертеться он должен на трёх осях симетрии(куба)Типа как глобус.<br>Да, чуть не забыл, должен быть эфект фокуса, это когда дальние грани куба меньше передних. ]]></description>
        <author>Serg-Zerg</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	