<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Форум программистов и сисадминов Киберфорум - Блоги - Библиотека матвычислений на Delphi.. Автор Massaraksh7</title>
		<link>https://www.cyberforum.ru/blogs/1026121/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Mon, 28 Sep 2026 07:24:47 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Форум программистов и сисадминов Киберфорум - Блоги - Библиотека матвычислений на Delphi.. Автор Massaraksh7</title>
			<link>https://www.cyberforum.ru/blogs/1026121/</link>
		</image>
		<item>
			<title>Рефакторинг программы уравнивания.</title>
			<link>https://www.cyberforum.ru/blogs/1026121/10911.html</link>
			<pubDate>Tue, 26 May 2026 15:20:34 GMT</pubDate>
			<description>Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только...</description>
			<content:encoded><![CDATA[<div>Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.</div>


<!-- attachments -->
	<div style="margin-top:10px">

		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				<tr>
	<td><img loading="lazy" decoding="async" class="inlineimg" src="http://www.cyberforum.ru//cyberstatic.net/images/attach/zip.gif" alt="Тип файла: zip" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
	<td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=11893&amp;d=1779808769">CompareEqual.zip</a> (4.51 Мб, 70 просмотров)</td>
</tr>
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Massaraksh7</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1026121/10911.html</guid>
		</item>
		<item>
			<title>Использование TThread в Lazarus для математических вычислений.</title>
			<link>https://www.cyberforum.ru/blogs/1026121/10910.html</link>
			<pubDate>Mon, 25 May 2026 20:48:51 GMT</pubDate>
			<description>Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой...</description>
			<content:encoded><![CDATA[<div>Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами (1000 x 1000, 2000 x 2000 и больше), и алгоритмические возможности уже исчерпаны. При этом если делать вычисления в лоб, то используется только часть процессорного времени, так как работает это на одном ядре. Но в современных компьютерах число ядер неуклонно растёт. <br />
Хотя и не все операции возможно запараллелить, но такие, как умножение матриц, обращение матриц, решение систем линейных уравнений удалось разделить на независимые части, которые могут обрабатываться разными потоками. На моём компьютере 4 ядра, и, применяя 4 потока, удалось сократить время выполнения умножения примерно в 3.8 раза. На более &quot;продвинутых&quot; компьютерах результат будет ещё лучше. И вынес, конечно, число потоков в настройки программы. <br />
Ниже приведу пример кода из библиотеки для умножения матриц.<br />
<div class="codeblock"><table class="pascal"><thead><tr><td colspan="2" id="59905319"  class="head">Pascal</td></tr></thead><tbody><tr class="li1"><td><div id="59905319" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
</pre></td><td class="de1"><pre class="de1"><span class="kw1">unit</span> threadlib<span class="sy1">;</span>
&nbsp;
<span class="co2">{$mode ObjFPC}{$H+}</span>
&nbsp;
<span class="kw1">interface</span>
&nbsp;
<span class="kw1">uses</span>
&nbsp; Classes<span class="sy1">,</span> SysUtils<span class="sy1">,</span> Common<span class="sy1">,</span> Math<span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> MultMatrixThreads<span class="br0">&#40;</span><span class="kw1">const</span> X<span class="sy1">,</span>Y<span class="sy1">:</span>TMatrix<span class="sy1">;</span><span class="kw1">var</span> Z<span class="sy1">:</span>TMatrix<span class="sy1">;</span>N<span class="sy1">,</span>M<span class="sy1">,</span>P<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>nth<span class="sy1">:</span><span class="kw4">integer</span><span class="sy3">=</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">implementation</span>
&nbsp;
<span class="kw1">type</span> TMultThread<span class="sy3">=</span>class<span class="br0">&#40;</span>TThread<span class="br0">&#41;</span>
&nbsp; &nbsp;<span class="kw1">private</span>
&nbsp; &nbsp; &nbsp;<span class="coMULTI">{ Private declarations }</span>
&nbsp; &nbsp;<span class="kw1">protected</span>
&nbsp; &nbsp;<span class="kw1">procedure</span> Execute<span class="sy1">;</span> <span class="kw1">override</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">public</span>
&nbsp; &nbsp;startrow<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp; &nbsp;stoprow<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">var</span> Th<span class="sy1">:</span><span class="kw4">array</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy1">..</span><span class="nu0">100</span><span class="br0">&#93;</span> <span class="kw1">of</span> TMultThread<span class="sy1">;</span>
AX<span class="sy1">,</span>AY<span class="sy1">,</span>AZ<span class="sy1">:</span>TMatrix<span class="sy1">;</span>
SX<span class="sy1">,</span>SY<span class="sy1">,</span>SZ<span class="sy1">:</span>TMatrix<span class="sy1">;</span>
start<span class="sy1">:</span><span class="kw4">array</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy1">..</span><span class="nu0">100</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">integer</span><span class="sy1">;</span>
stop <span class="sy1">:</span><span class="kw4">array</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy1">..</span><span class="nu0">100</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">integer</span><span class="sy1">;</span>
GP<span class="sy1">,</span>GM<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//</span>
<span class="co1">// Умножение матриц X(N,M)*Y(M,P)=Z(N,P)</span>
<span class="co1">// nth - число потоков, на которые разбиваются вычисления</span>
<span class="co1">//</span>
<span class="kw1">procedure</span> MultMatrixThreads<span class="br0">&#40;</span><span class="kw1">const</span> X<span class="sy1">,</span>Y<span class="sy1">:</span>TMatrix<span class="sy1">;</span><span class="kw1">var</span> Z<span class="sy1">:</span>TMatrix<span class="sy1">;</span>N<span class="sy1">,</span>M<span class="sy1">,</span>P<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>nth<span class="sy1">:</span><span class="kw4">integer</span><span class="sy3">=</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">var</span> i<span class="sy1">,</span>j<span class="sy1">,</span>k<span class="sy1">,</span>np<span class="sy1">,</span>si<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
<span class="kw1">if</span> <span class="nu0">3</span><span class="sy3">*</span>nth&gt;N <span class="kw1">then</span> <span class="kw1">begin</span> MultMatrix<span class="br0">&#40;</span>X<span class="sy1">,</span>Y<span class="sy1">,</span>Z<span class="sy1">,</span>N<span class="sy1">,</span>M<span class="sy1">,</span>P<span class="br0">&#41;</span><span class="sy1">;</span>exit<span class="sy1">;</span> <span class="kw1">end</span><span class="sy1">;</span> <span class="co1">//---Если матрица небольшая, то обычным способом</span>
GM<span class="sy1">:</span><span class="sy3">=</span>M<span class="sy1">;</span>GP<span class="sy1">:</span><span class="sy3">=</span>P<span class="sy1">;</span>
<span class="co1">//----Вычисляем шаг разбиения</span>
np<span class="sy1">:</span><span class="sy3">=</span>n <span class="kw1">div</span> nth<span class="sy1">;</span>si<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> nth<span class="sy3">-</span><span class="nu0">2</span> <span class="kw1">do</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;start<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>si<span class="sy1">;</span>stop<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>si<span class="sy3">+</span>np<span class="sy1">;</span>
&nbsp; &nbsp;si<span class="sy1">:</span><span class="sy3">=</span>si<span class="sy3">+</span>np<span class="sy3">+</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
start<span class="br0">&#91;</span>nth<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>si<span class="sy1">;</span>stop<span class="br0">&#91;</span>nth<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>N<span class="sy3">-</span><span class="nu0">1</span><span class="sy1">;</span>
<span class="co1">//----Создаём и заполняем копии матриц</span>
SetLength<span class="br0">&#40;</span>AX<span class="sy1">,</span>N<span class="sy1">,</span>M<span class="br0">&#41;</span><span class="sy1">;</span><span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> N<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> <span class="kw1">for</span> j<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> M<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> AX<span class="br0">&#91;</span>i<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>X<span class="br0">&#91;</span>i<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">;</span>
SetLength<span class="br0">&#40;</span>AY<span class="sy1">,</span>M<span class="sy1">,</span>P<span class="br0">&#41;</span><span class="sy1">;</span><span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> M<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> <span class="kw1">for</span> j<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> P<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> AY<span class="br0">&#91;</span>i<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>Y<span class="br0">&#91;</span>i<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">;</span>
SetLength<span class="br0">&#40;</span>AZ<span class="sy1">,</span>N<span class="sy1">,</span>P<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="co1">//---Создаём потоки по заданному числу и назначаем им строки матрицы</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> nth<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;Th<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>TMultThread<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span><span class="kw2">False</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;Th<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">startrow</span><span class="sy1">:</span><span class="sy3">=</span>start<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">;</span>
&nbsp; &nbsp;Th<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">stoprow</span><span class="sy1">:</span><span class="sy3">=</span>stop<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> nth<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> Th<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Start</span><span class="sy1">;</span>
<span class="co1">//---Ждём завершения работы всех потоков</span>
<span class="kw1">repeat</span>
&nbsp; <span class="kw1">begin</span>
&nbsp; k<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> nth<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> <span class="kw1">if</span> Th<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Finished</span><span class="sy3">=</span><span class="kw2">True</span> <span class="kw1">then</span> inc<span class="br0">&#40;</span>k<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">until</span> <span class="br0">&#40;</span>k<span class="sy3">=</span>nth<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="co1">//---Освобождаем потоки</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> nth<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> Th<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span>
<span class="co1">//---Перезаписываем результат в Z</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> N<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> <span class="kw1">for</span> j<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> P<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> Z<span class="br0">&#91;</span>i<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>AZ<span class="br0">&#91;</span>i<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">;</span>
<span class="co1">//---Освобождаем память</span>
Finalize<span class="br0">&#40;</span>AX<span class="br0">&#41;</span><span class="sy1">;</span>
Finalize<span class="br0">&#40;</span>AY<span class="br0">&#41;</span><span class="sy1">;</span>
Finalize<span class="br0">&#40;</span>AZ<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TMultThread<span class="sy1">.</span><span class="me1">Execute</span><span class="sy1">;</span>
<span class="kw1">var</span> i<span class="sy1">,</span>j<span class="sy1">,</span>k<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
a<span class="sy1">:</span>Extended<span class="sy1">;</span>
<span class="kw1">begin</span>
<span class="co1">//---Умножение интервала строк</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span>startrow <span class="kw1">to</span> stoprow <span class="kw1">do</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;<span class="kw1">for</span> j<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> GP<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; a<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0.0</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">for</span> k<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> GM<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span> a<span class="sy1">:</span><span class="sy3">=</span>a<span class="sy3">+</span>AX<span class="br0">&#91;</span>i<span class="sy1">,</span>k<span class="br0">&#93;</span><span class="sy3">*</span>AY<span class="br0">&#91;</span>k<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; AZ<span class="br0">&#91;</span>i<span class="sy1">,</span>j<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>a<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">end</span><span class="sy1">.</span></pre></td></tr></table></div></td></tr></tbody></table></div>При этом важно, чтобы разные потоки не записывали в одну переменную (элемент массива), а читать они могут как угодно.</div>

]]></content:encoded>
			<dc:creator>Massaraksh7</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1026121/10910.html</guid>
		</item>
		<item>
			<title>Lazarus. Таблица с объединением ячеек.</title>
			<link>https://www.cyberforum.ru/blogs/1026121/10079.html</link>
			<pubDate>Fri, 21 Mar 2025 12:54:58 GMT</pubDate>
			<description>Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и...</description>
			<content:encoded><![CDATA[<div>Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в Lazarus - не получается вообще. Тут при установленном свойстве DefaultDrawing всё равно рисует то, что не надо. Искал в и-нете причину, но не нашёл. Сторонними компонентами принципиально не пользуюсь - во-первых, не всегда их функционал устраивает, во-вторых, не хотелось бы, чтобы мог подвести в самый неподходящий момент. Ну, и, в третьих, если кто-то написал, то могу и я написать, и именно то, что мне нужно. В результате сделал компонент TTableGrid (во вложении, с демо-примером). В качестве родителя выбрал TCustomControl. Отладил. И уже использую в разработке (скриншот). Если кому надо - пользуйтесь.</div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=10481&amp;d=1742561674" target="attachment" rel="Lightbox" id="attachment10481"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=10481&amp;stc=1&amp;thumb=1&amp;d=1742561674" border="0" alt="Нажмите на изображение для увеличения
Название: Screenshot_3.png
Просмотров: 484
Размер:	111.9 Кб
ID:	10481" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				<tr>
	<td><img loading="lazy" decoding="async" class="inlineimg" src="http://www.cyberforum.ru//cyberstatic.net/images/attach/zip.gif" alt="Тип файла: zip" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
	<td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=10480&amp;d=1742561655">DemoGrid.zip</a> (143.0 Кб, 542 просмотров)</td>
</tr>
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Massaraksh7</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1026121/10079.html</guid>
		</item>
		<item>
			<title>Окончание</title>
			<link>https://www.cyberforum.ru/blogs/1026121/9945.html</link>
			<pubDate>Sun, 09 Mar 2025 08:32:52 GMT</pubDate>
			<description>Анимация динамики просадки фундамента за несколько лет. 
Видео...</description>
			<content:encoded><![CDATA[<div>Анимация динамики просадки фундамента за несколько лет.<br />
<a rel="nofollow noopener noreferrer" href="https://cloud.mail.ru/public/4kfg/CWDZM8rGr" target="_blank" title="https://cloud.mail.ru/public/4kfg/CWDZM8rGr">Видео</a></div>

]]></content:encoded>
			<dc:creator>Massaraksh7</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1026121/9945.html</guid>
		</item>
		<item>
			<title>Продолжение.</title>
			<link>https://www.cyberforum.ru/blogs/1026121/8757.html</link>
			<pubDate>Fri, 03 Jan 2025 04:59:36 GMT</pubDate>
			<description>Всё получилось в Opengl на Lazarus , то, что было сделано в glScene на Delphi. 
А именно,...</description>
			<content:encoded><![CDATA[<div>Всё получилось в Opengl на Lazarus , то, что было сделано в glScene на Delphi.<br />
А именно, интерполяция поверхности по нескольким точкам методом Кригинга, с построением изолиний, и просмотр её с помощью управления камерой из предыдущей записи блога. Результат - на видео:</div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=9141&amp;d=1735880359" target="attachment" rel="Lightbox" id="attachment9141"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=9141&amp;stc=1&amp;thumb=1&amp;d=1735880359" border="0" alt="Нажмите на изображение для увеличения
Название: 0325.gif
Просмотров: 311
Размер:	2.91 Мб
ID:	9141" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Massaraksh7</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1026121/8757.html</guid>
		</item>
		<item>
			<title>Перемещение камеры по сцене для Opengl на Lazarus.</title>
			<link>https://www.cyberforum.ru/blogs/1026121/8755.html</link>
			<pubDate>Tue, 31 Dec 2024 00:05:28 GMT</pubDate>
			<description>Потребовалось отображать трёхмерные графики. Для этого выбрал OpenGl, благо, в Lazarus он есть. С...</description>
			<content:encoded><![CDATA[<div>Потребовалось отображать трёхмерные графики. Для этого выбрал OpenGl, благо, в Lazarus он есть. С Opengl раньше немного работал (простейшие вещи), но, аналогичную задачу в Delphi решал с помощью GlScene. В Lazarus GlScene до ума, видимо, пока не доведена, какие-то ошибки при компиляции, поэтому не стал заморачиваться, и решил полностью сделать на Opengl.<br />
Первостепенная задача, естественно, управление камерой, чем, для начала и занялся. Приведён код, который позволяет: <br />
1. Приближать/отдалять камеру к цели.<br />
2. Осуществлять поворот камеры вокруг цели в плоскости, параллельной XY.<br />
3. Осуществлять поворот камеры вокруг прямой Ax+Bx+C=0 (подъём/опускание)<br />
4. Проводить смещение камеры (и цели) влево или вправо вдоль прямой, перпендикулярной &quot;линии взгляда&quot; камеры на цель.<br />
Код и демо-видео прилагаются.<br />
<div class="codeblock"><table class="pascal"><thead><tr><td colspan="2" id="903356174"  class="head">Pascal</td></tr></thead><tbody><tr class="li1"><td><div id="903356174" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
</pre></td><td class="de1"><pre class="de1"><span class="kw1">unit</span> main<span class="sy1">;</span>
&nbsp;
<span class="co2">{$mode objfpc}{$H+}</span>
&nbsp;
<span class="kw1">interface</span>
&nbsp;
<span class="kw1">uses</span>
&nbsp; Classes<span class="sy1">,</span> SysUtils<span class="sy1">,</span> Forms<span class="sy1">,</span> Controls<span class="sy1">,</span> Graphics<span class="sy1">,</span> Dialogs<span class="sy1">,</span> ExtCtrls<span class="sy1">,</span> 
&nbsp; OpenGLContext<span class="sy1">,</span> gl<span class="sy1">,</span> glu<span class="sy1">,</span> LCLType<span class="sy1">,</span> ComCtrls<span class="sy1">,</span> Types<span class="sy1">,</span> Math<span class="sy1">;</span>
&nbsp;
<span class="kw1">type</span>
&nbsp;
&nbsp; <span class="coMULTI">{ TOGLForm }</span>
&nbsp;
&nbsp; TOGLForm <span class="sy3">=</span> class<span class="br0">&#40;</span>TForm<span class="br0">&#41;</span>
&nbsp; &nbsp; GLBox<span class="sy1">:</span> TOpenGLControl<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> FormCreate<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> GLBoxMouseDown<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Button<span class="sy1">:</span> TMouseButton<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> X<span class="sy1">,</span> Y<span class="sy1">:</span> <span class="kw4">Integer</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> GLBoxMouseMove<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> X<span class="sy1">,</span> Y<span class="sy1">:</span> <span class="kw4">Integer</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> GLBoxMouseUp<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Button<span class="sy1">:</span> TMouseButton<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> X<span class="sy1">,</span> Y<span class="sy1">:</span> <span class="kw4">Integer</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> GLBoxMouseWheel<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> WheelDelta<span class="sy1">:</span> <span class="kw4">Integer</span><span class="sy1">;</span> MousePos<span class="sy1">:</span> TPoint<span class="sy1">;</span> <span class="kw1">var</span> Handled<span class="sy1">:</span> <span class="kw4">Boolean</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> GLBoxPaint<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">private</span>
&nbsp; <span class="kw1">procedure</span> CreateBase<span class="sy1">;</span>
&nbsp; <span class="kw1">procedure</span> CreateNet<span class="sy1">;</span>
&nbsp; <span class="kw1">procedure</span> Draw<span class="sy1">;</span>
&nbsp; <span class="kw1">public</span>
&nbsp; down<span class="sy1">,</span>XS<span class="sy1">,</span>YS<span class="sy1">,</span>dx<span class="sy1">,</span>dy<span class="sy1">,</span>dz<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">var</span>
&nbsp; OGLForm<span class="sy1">:</span> TOGLForm<span class="sy1">;</span>
&nbsp;
<span class="kw1">implementation</span>
&nbsp;
<span class="co2">{$R *.lfm}</span>
&nbsp;
<span class="coMULTI">{ TOGLForm }</span>
<span class="kw1">var</span> xf<span class="sy1">,</span>yf<span class="sy1">,</span>zf<span class="sy1">,</span>x0<span class="sy1">,</span>y0<span class="sy1">,</span>z0<span class="sy1">:</span>double<span class="sy1">;</span>
&nbsp;
&nbsp;
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">FormCreate</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; zf<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">200</span><span class="sy1">;</span>xf<span class="sy1">:</span><span class="sy3">=-</span><span class="nu0">200</span><span class="sy1">;</span>yf<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span> &nbsp;<span class="co1">//--Камера</span>
&nbsp; x0<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>y0<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>z0<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span> &nbsp; &nbsp; &nbsp; <span class="co1">//--Цель</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Нахождение угла (+-180° по x,y)</span>
<span class="kw1">function</span> Angle<span class="br0">&#40;</span>x<span class="sy1">,</span>y<span class="sy1">:</span>double<span class="br0">&#41;</span><span class="sy1">:</span>double<span class="sy1">;</span>
<span class="kw1">begin</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">Abs</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span>&lt;<span class="nu0">0.00000001</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>y&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">90</span><span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">Abs</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span>&lt;<span class="nu0">0.00000001</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>y&lt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=-</span><span class="nu0">90</span><span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">Abs</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span>&lt;<span class="nu0">0.00000001</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>x&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">Abs</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span>&lt;<span class="nu0">0.00000001</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>x&lt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">180</span><span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>x&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>y&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">arctan</span><span class="br0">&#40;</span>y<span class="sy3">/</span>x<span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">180</span><span class="sy3">/</span>PI<span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>x&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>y&lt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">arctan</span><span class="br0">&#40;</span>y<span class="sy3">/</span>x<span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">180</span><span class="sy3">/</span>PI<span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>x&lt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>y&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">180</span><span class="sy3">+</span><span class="kw3">arctan</span><span class="br0">&#40;</span>y<span class="sy3">/</span>x<span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">180</span><span class="sy3">/</span>PI<span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>x&lt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>y&lt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="kw1">begin</span> Result<span class="sy1">:</span><span class="sy3">=-</span><span class="nu0">180</span><span class="sy3">+</span><span class="kw3">arctan</span><span class="br0">&#40;</span>y<span class="sy3">/</span>x<span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">180</span><span class="sy3">/</span>PI<span class="sy1">;</span>exit<span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Нажатие кнопки мыши</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">GLBoxMouseDown</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Button<span class="sy1">:</span> TMouseButton<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> X<span class="sy1">,</span> Y<span class="sy1">:</span> <span class="kw4">Integer</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
XS<span class="sy1">:</span><span class="sy3">=</span>X<span class="sy1">;</span>YS<span class="sy1">:</span><span class="sy3">=</span>Y<span class="sy1">;</span>
<span class="kw1">if</span> Button <span class="sy3">=</span> mbLeft &nbsp;<span class="kw1">then</span> down<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span><span class="sy1">;</span>
<span class="kw1">if</span> Button <span class="sy3">=</span> mbRight <span class="kw1">then</span> down<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">2</span><span class="sy1">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>Button <span class="sy3">=</span> mbRight<span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>ssCtrl <span class="kw1">in</span> Shift<span class="br0">&#41;</span> <span class="kw1">then</span> down<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">3</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Колесо мыши - приближение/удаление</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">GLBoxMouseWheel</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> WheelDelta<span class="sy1">:</span> <span class="kw4">Integer</span><span class="sy1">;</span> MousePos<span class="sy1">:</span> TPoint<span class="sy1">;</span> <span class="kw1">var</span> Handled<span class="sy1">:</span> <span class="kw4">Boolean</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">var</span> r<span class="sy1">,</span>r2<span class="sy1">,</span>rp<span class="sy1">,</span>rp2<span class="sy1">,</span>xa<span class="sy1">,</span>ya<span class="sy1">,</span>za<span class="sy1">:</span>double<span class="sy1">;</span>
<span class="kw1">begin</span>
r<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">Sqrt</span><span class="br0">&#40;</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">+</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">+</span>zf<span class="sy3">*</span>zf<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">if</span> WheelDelta&lt;<span class="nu0">0</span> <span class="kw1">then</span> rp<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">+</span><span class="nu0">5</span> <span class="kw1">else</span> rp<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">-</span><span class="nu0">5</span><span class="sy1">;</span>
r2<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">*</span>r<span class="sy1">;</span>
rp2<span class="sy1">:</span><span class="sy3">=</span>rp<span class="sy3">*</span>rp<span class="sy1">;</span>
xa<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">Sqrt</span><span class="br0">&#40;</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">*</span>rp2<span class="sy3">/</span>r2<span class="br0">&#41;</span><span class="sy1">;</span>
ya<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">Sqrt</span><span class="br0">&#40;</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">*</span>rp2<span class="sy3">/</span>r2<span class="br0">&#41;</span><span class="sy1">;</span>
za<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">Sqrt</span><span class="br0">&#40;</span>zf<span class="sy3">*</span>zf<span class="sy3">*</span>rp2<span class="sy3">/</span>r2<span class="br0">&#41;</span><span class="sy1">;</span>
xf<span class="sy1">:</span><span class="sy3">=</span>xa<span class="sy3">*</span>sign<span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">+</span>x0<span class="sy1">;</span>
yf<span class="sy1">:</span><span class="sy3">=</span>ya<span class="sy3">*</span>sign<span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">+</span>y0<span class="sy1">;</span>
zf<span class="sy1">:</span><span class="sy3">=</span>za<span class="sy3">*</span>sign<span class="br0">&#40;</span>zf<span class="br0">&#41;</span><span class="sy1">;</span>
Draw<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Движение мыши</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">GLBoxMouseMove</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> X<span class="sy1">,</span> Y<span class="sy1">:</span> <span class="kw4">Integer</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">var</span> teta<span class="sy1">,</span>dt<span class="sy1">,</span>dtx<span class="sy1">,</span>dty<span class="sy1">,</span>x1<span class="sy1">,</span>y1<span class="sy1">,</span>r<span class="sy1">,</span>fi<span class="sy1">,</span>fiz<span class="sy1">:</span>Extended<span class="sy1">;</span>
<span class="co1">//label 1;</span>
<span class="kw1">begin</span>
<span class="co1">//---Поворот вокруг прямой Ax+By+C=0 (подъём, фи,тэта)</span>
<span class="kw1">if</span> down<span class="sy3">=</span><span class="nu0">1</span> <span class="kw1">then</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;dt<span class="sy1">:</span><span class="sy3">=</span>YS<span class="sy3">-</span>Y<span class="sy1">;</span>
&nbsp; &nbsp;fiz<span class="sy1">:</span><span class="sy3">=</span>Angle<span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="sy1">,</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;r<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">Sqrt</span><span class="br0">&#40;</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">+</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">+</span>zf<span class="sy3">*</span>zf<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;teta<span class="sy1">:</span><span class="sy3">=</span>arccos<span class="br0">&#40;</span>zf<span class="sy3">/</span>r<span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">180</span><span class="sy3">/</span>PI<span class="sy1">;</span>
&nbsp; &nbsp;teta<span class="sy1">:</span><span class="sy3">=</span>teta<span class="sy3">+</span>dt<span class="sy3">/</span><span class="nu0">2</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>teta&lt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span>teta&gt;<span class="nu0">90</span><span class="br0">&#41;</span> <span class="kw1">then</span> exit<span class="sy1">;</span>
&nbsp; &nbsp;xf<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">*</span><span class="kw3">cos</span><span class="br0">&#40;</span>fiz<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy3">*</span><span class="kw3">sin</span><span class="br0">&#40;</span>teta<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy3">+</span>x0<span class="sy1">;</span>
&nbsp; &nbsp;yf<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">*</span><span class="kw3">sin</span><span class="br0">&#40;</span>fiz<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy3">*</span><span class="kw3">sin</span><span class="br0">&#40;</span>teta<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy3">+</span>y0<span class="sy1">;</span>
&nbsp; &nbsp;zf<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">*</span><span class="kw3">cos</span><span class="br0">&#40;</span>teta<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;YS<span class="sy1">:</span><span class="sy3">=</span>Y<span class="sy1">;</span>
&nbsp; &nbsp;Draw<span class="sy1">;</span>exit<span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
<span class="co1">//---Поворот вокруг оси Z (фи)</span>
<span class="kw1">if</span> down<span class="sy3">=</span><span class="nu0">2</span> <span class="kw1">then</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;dt<span class="sy1">:</span><span class="sy3">=</span>XS<span class="sy3">-</span>X<span class="sy1">;</span>dt<span class="sy1">:</span><span class="sy3">=</span>dt<span class="sy3">/</span><span class="nu0">5</span><span class="sy1">;</span>
&nbsp; &nbsp;fiz<span class="sy1">:</span><span class="sy3">=</span>dt<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="sy1">;</span>
&nbsp; &nbsp;x1<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">*</span><span class="kw3">cos</span><span class="br0">&#40;</span>fiz<span class="br0">&#41;</span><span class="sy3">-</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">*</span><span class="kw3">sin</span><span class="br0">&#40;</span>fiz<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;y1<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="br0">&#41;</span><span class="sy3">*</span><span class="kw3">sin</span><span class="br0">&#40;</span>fiz<span class="br0">&#41;</span><span class="sy3">+</span><span class="br0">&#40;</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy3">*</span><span class="kw3">cos</span><span class="br0">&#40;</span>fiz<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;xf<span class="sy1">:</span><span class="sy3">=</span>x1<span class="sy3">+</span>x0<span class="sy1">;</span>
&nbsp; &nbsp;yf<span class="sy1">:</span><span class="sy3">=</span>y1<span class="sy3">+</span>y0<span class="sy1">;</span>
&nbsp; &nbsp;Draw<span class="sy1">;</span>
&nbsp; &nbsp;XS<span class="sy1">:</span><span class="sy3">=</span>X<span class="sy1">;</span>
&nbsp; &nbsp;exit<span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
<span class="co1">//---Смещение</span>
<span class="kw1">if</span> down<span class="sy3">=</span><span class="nu0">3</span> <span class="kw1">then</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;dt<span class="sy1">:</span><span class="sy3">=</span>XS<span class="sy3">-</span>X<span class="sy1">;</span>dt<span class="sy1">:</span><span class="sy3">=</span>dt<span class="sy3">/</span><span class="nu0">5</span><span class="sy1">;</span>
&nbsp; &nbsp;fi<span class="sy1">:</span><span class="sy3">=</span>Angle<span class="br0">&#40;</span>xf<span class="sy3">-</span>x0<span class="sy1">,</span>yf<span class="sy3">-</span>y0<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;dtx<span class="sy1">:</span><span class="sy3">=-</span><span class="kw3">cos</span><span class="br0">&#40;</span><span class="br0">&#40;</span>fi<span class="sy3">-</span><span class="nu0">90</span><span class="br0">&#41;</span><span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy3">*</span>dt<span class="sy1">;</span>dty<span class="sy1">:</span><span class="sy3">=-</span><span class="kw3">sin</span><span class="br0">&#40;</span><span class="br0">&#40;</span>fi<span class="sy3">-</span><span class="nu0">90</span><span class="br0">&#41;</span><span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy3">*</span>dt<span class="sy1">;</span>
&nbsp; &nbsp;xf<span class="sy1">:</span><span class="sy3">=</span>xf<span class="sy3">+</span>dtx<span class="sy1">;</span>
&nbsp; &nbsp;yf<span class="sy1">:</span><span class="sy3">=</span>yf<span class="sy3">+</span>dty<span class="sy1">;</span>
&nbsp; &nbsp;x0<span class="sy1">:</span><span class="sy3">=</span>x0<span class="sy3">+</span>dtx<span class="sy1">;</span>
&nbsp; &nbsp;y0<span class="sy1">:</span><span class="sy3">=</span>y0<span class="sy3">+</span>dty<span class="sy1">;</span>
&nbsp; &nbsp;Draw<span class="sy1">;</span>
&nbsp; &nbsp;XS<span class="sy1">:</span><span class="sy3">=</span>X<span class="sy1">;</span>
&nbsp; &nbsp;exit<span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Отжатие мыши</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">GLBoxMouseUp</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="sy1">;</span> Button<span class="sy1">:</span> TMouseButton<span class="sy1">;</span> Shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span> X<span class="sy1">,</span> Y<span class="sy1">:</span> <span class="kw4">Integer</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
down<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Рисовать</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">GLBoxPaint</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
Draw<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Задать параметры рисования, нарисовать &quot;пол&quot;</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">CreateBase</span><span class="sy1">;</span>
<span class="kw1">begin</span>
glClearColor<span class="br0">&#40;</span><span class="nu0">0.8</span><span class="sy1">,</span><span class="nu0">0.9</span><span class="sy1">,</span><span class="nu0">1.0</span><span class="sy1">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp;
glCullFace<span class="br0">&#40;</span>GL_FRONT_AND_BACK<span class="br0">&#41;</span><span class="sy1">;</span>
glEnable<span class="br0">&#40;</span>GL_BLEND<span class="br0">&#41;</span><span class="sy1">;</span>
glBlendFunc<span class="br0">&#40;</span>GL_SRC_ALPHA<span class="sy1">,</span> GL_ONE_MINUS_SRC_ALPHA<span class="br0">&#41;</span><span class="sy1">;</span>
glShadeModel<span class="br0">&#40;</span>GL_SMOOTH<span class="br0">&#41;</span><span class="sy1">;</span>
glHint<span class="br0">&#40;</span>GL_POLYGON_SMOOTH_HINT<span class="sy1">,</span> GL_FASTEST<span class="br0">&#41;</span><span class="sy1">;</span>
glEnable<span class="br0">&#40;</span>GL_POLYGON_SMOOTH<span class="br0">&#41;</span><span class="sy1">;</span>
glHint<span class="br0">&#40;</span>GL_POINT_SMOOTH_HINT<span class="sy1">,</span> GL_FASTEST<span class="br0">&#41;</span><span class="sy1">;</span>
glEnable<span class="br0">&#40;</span>GL_POINT_SMOOTH<span class="br0">&#41;</span><span class="sy1">;</span>
glHint<span class="br0">&#40;</span>GL_LINE_SMOOTH_HINT<span class="sy1">,</span> GL_FASTEST<span class="br0">&#41;</span><span class="sy1">;</span>
glEnable<span class="br0">&#40;</span>GL_LINE_SMOOTH<span class="br0">&#41;</span><span class="sy1">;</span>
glDisable<span class="br0">&#40;</span> GL_DEPTH_TEST <span class="br0">&#41;</span><span class="sy1">;</span>
glEnable<span class="br0">&#40;</span> GL_ALPHA_TEST <span class="br0">&#41;</span><span class="sy1">;</span>
glClear<span class="br0">&#40;</span>GL_COLOR_BUFFER_BIT<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp;
glMatrixMode<span class="br0">&#40;</span>gl_Projection<span class="br0">&#41;</span><span class="sy1">;</span>
glLoadIdentity<span class="sy1">;</span>
&nbsp;
gluPerspective<span class="br0">&#40;</span><span class="nu0">45</span><span class="sy1">,</span>Width<span class="sy3">/</span>Height<span class="sy1">,</span> <span class="nu0">0.1</span><span class="sy1">,</span> <span class="nu0">1000</span><span class="br0">&#41;</span><span class="sy1">;</span>
glViewport<span class="br0">&#40;</span><span class="nu0">0</span><span class="sy1">,</span><span class="nu0">0</span><span class="sy1">,</span>Width<span class="sy1">,</span>Height<span class="br0">&#41;</span><span class="sy1">;</span>
gluLookAt<span class="br0">&#40;</span>xf<span class="sy1">,</span>yf<span class="sy1">,</span>zf<span class="sy1">,</span>x0<span class="sy1">,</span>y0<span class="sy1">,</span>z0<span class="sy1">,</span><span class="nu0">0</span><span class="sy1">,</span><span class="nu0">0</span><span class="sy1">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp;
glBegin<span class="br0">&#40;</span>gl_Quads<span class="br0">&#41;</span><span class="sy1">;</span>
glColor3f<span class="br0">&#40;</span><span class="nu0">0.3</span><span class="sy1">,</span><span class="nu0">0.5</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
glVertex3f<span class="br0">&#40;</span><span class="nu0">200</span><span class="sy1">,</span><span class="nu0">200</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
glVertex3f<span class="br0">&#40;</span><span class="nu0">200</span><span class="sy1">,</span><span class="sy3">-</span><span class="nu0">200</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
glVertex3f<span class="br0">&#40;</span><span class="sy3">-</span><span class="nu0">200</span><span class="sy1">,</span><span class="sy3">-</span><span class="nu0">200</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
glVertex3f<span class="br0">&#40;</span><span class="sy3">-</span><span class="nu0">200</span><span class="sy1">,</span><span class="nu0">200</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
glEnd<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Рисовать сетку</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">CreateNet</span><span class="sy1">;</span>
<span class="kw1">var</span> i<span class="sy1">,</span>j<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
glColor3f<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy1">,</span><span class="nu0">1</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
glLineWidth<span class="br0">&#40;</span><span class="nu0">1.0</span><span class="br0">&#41;</span><span class="sy1">;</span>
glBegin<span class="br0">&#40;</span>gl_Lines<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> <span class="nu0">10</span> <span class="kw1">do</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;glVertex3f<span class="br0">&#40;</span><span class="sy3">-</span><span class="nu0">50</span><span class="sy1">,</span>i<span class="sy3">*</span><span class="nu0">10</span><span class="sy3">-</span><span class="nu0">50</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>glVertex3f<span class="br0">&#40;</span><span class="nu0">50</span><span class="sy1">,</span>i<span class="sy3">*</span><span class="nu0">10</span><span class="sy3">-</span><span class="nu0">50</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;glVertex3f<span class="br0">&#40;</span>i<span class="sy3">*</span><span class="nu0">10</span><span class="sy3">-</span><span class="nu0">50</span><span class="sy1">,</span><span class="sy3">-</span><span class="nu0">50</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>glVertex3f<span class="br0">&#40;</span>i<span class="sy3">*</span><span class="nu0">10</span><span class="sy3">-</span><span class="nu0">50</span><span class="sy1">,</span><span class="nu0">50</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
glEnd<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//--Рисовать</span>
<span class="kw1">procedure</span> TOGLForm<span class="sy1">.</span><span class="me1">Draw</span><span class="sy1">;</span>
<span class="kw1">begin</span>
CreateBase<span class="sy1">;</span>
CreateNet<span class="sy1">;</span>
&nbsp;
GLBox<span class="sy1">.</span><span class="me1">SwapBuffers</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">end</span><span class="sy1">.</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=9140&amp;d=1735603511" target="attachment" rel="Lightbox" id="attachment9140"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=9140&amp;stc=1&amp;thumb=1&amp;d=1735603511" border="0" alt="Нажмите на изображение для увеличения
Название: 1108.gif
Просмотров: 314
Размер:	2.11 Мб
ID:	9140" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Massaraksh7</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1026121/8755.html</guid>
		</item>
		<item>
			<title>Интересная функция</title>
			<link>https://www.cyberforum.ru/blogs/1026121/8470.html</link>
			<pubDate>Tue, 19 Mar 2024 21:14:46 GMT</pubDate>
			<description>Нашёл забавную функцию, график которой при изменении параметра причудливо меняет форму, напоминая...</description>
			<content:encoded><![CDATA[<div>Нашёл забавную функцию, график которой при изменении параметра причудливо меняет форму, напоминая то ли сокращающееся сердце, то ли ещё что. Функция в декартовых координатах неявная, поэтому график строится через преобразование в полярные координаты, и решение кубического уравнения.<br />
(x<sup>2</sup>+y<sup>2</sup>)<sup>2</sup>-A*x*y<sup>2</sup>=850*y<br />
<div class="codeblock"><table class="pascal"><thead><tr><td colspan="2" id="913450184"  class="head">Pascal</td></tr></thead><tbody><tr class="li1"><td><div id="913450184" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
</pre></td><td class="de1"><pre class="de1"><span class="kw1">unit</span> Unit1<span class="sy1">;</span>
&nbsp;
<span class="co2">{$mode objfpc}{$H+}</span>
&nbsp;
<span class="kw1">interface</span>
&nbsp;
<span class="kw1">uses</span>
&nbsp; Classes<span class="sy1">,</span> SysUtils<span class="sy1">,</span> Forms<span class="sy1">,</span> Controls<span class="sy1">,</span> Graphics<span class="sy1">,</span> Dialogs<span class="sy1">,</span> StdCtrls<span class="sy1">,</span> ComCtrls<span class="sy1">,</span>
&nbsp; ExtCtrls<span class="sy1">,</span> TAGraph<span class="sy1">,</span> TASeries<span class="sy1">,</span> Math<span class="sy1">;</span>
&nbsp;
<span class="kw1">type</span>
&nbsp;
&nbsp; <span class="coMULTI">{ TForm1 }</span>
&nbsp;
&nbsp; TForm1 <span class="sy3">=</span> class<span class="br0">&#40;</span>TForm<span class="br0">&#41;</span>
&nbsp; &nbsp; Chart1<span class="sy1">:</span> TChart<span class="sy1">;</span>
&nbsp; &nbsp; Chart1LineSeries1<span class="sy1">:</span> TLineSeries<span class="sy1">;</span>
&nbsp; &nbsp; Image1<span class="sy1">:</span> TImage<span class="sy1">;</span>
&nbsp; &nbsp; Label1<span class="sy1">:</span> TLabel<span class="sy1">;</span>
&nbsp; &nbsp; TrackBar1<span class="sy1">:</span> TTrackBar<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> FormShow<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> TrackBar1Change<span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">private</span>
&nbsp; ak<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp; <span class="kw1">procedure</span> DoGraph<span class="sy1">;</span>
&nbsp; <span class="kw1">public</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">var</span>
&nbsp; Form1<span class="sy1">:</span> TForm1<span class="sy1">;</span>
&nbsp;
<span class="kw1">implementation</span>
&nbsp;
<span class="co2">{$R *.lfm}</span>
&nbsp;
<span class="coMULTI">{ TForm1 }</span>
&nbsp;
<span class="co1">//-------Решение куб. уравнения по формуле Кардано</span>
<span class="kw1">function</span> Kardano<span class="br0">&#40;</span>a<span class="sy1">,</span>b<span class="sy1">,</span>c<span class="sy1">,</span>d<span class="sy1">:</span>Extended<span class="br0">&#41;</span><span class="sy1">:</span>Extended<span class="sy1">;</span>
<span class="kw1">var</span> p<span class="sy1">,</span>q<span class="sy1">,</span>qq<span class="sy1">,</span>alfa<span class="sy1">,</span>beta<span class="sy1">:</span>Extended<span class="sy1">;</span>
<span class="kw1">begin</span>
p<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span><span class="nu0">3</span><span class="sy3">*</span>a<span class="sy3">*</span>c<span class="sy3">-</span>b<span class="sy3">*</span>b<span class="br0">&#41;</span><span class="sy3">/</span><span class="br0">&#40;</span><span class="nu0">3</span><span class="sy3">*</span>a<span class="sy3">*</span>a<span class="br0">&#41;</span><span class="sy1">;</span>
q<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="sy3">*</span>b<span class="sy3">*</span>b<span class="sy3">*</span>b<span class="sy3">-</span><span class="nu0">9</span><span class="sy3">*</span>a<span class="sy3">*</span>b<span class="sy3">*</span>c<span class="sy3">+</span><span class="nu0">27</span><span class="sy3">*</span>a<span class="sy3">*</span>a<span class="sy3">*</span>d<span class="br0">&#41;</span><span class="sy3">/</span><span class="br0">&#40;</span><span class="nu0">27</span><span class="sy3">*</span>a<span class="sy3">*</span>a<span class="sy3">*</span>a<span class="br0">&#41;</span><span class="sy1">;</span>
qq<span class="sy1">:</span><span class="sy3">=</span>p<span class="sy3">*</span>p<span class="sy3">*</span>p<span class="sy3">/</span><span class="nu0">27</span><span class="sy3">+</span>q<span class="sy3">*</span>q<span class="sy3">/</span><span class="nu0">4</span><span class="sy1">;</span>
<span class="kw1">if</span> qq&gt;<span class="nu0">0</span> <span class="kw1">then</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;alfa<span class="sy1">:</span><span class="sy3">=</span>power<span class="br0">&#40;</span><span class="sy3">-</span>q<span class="sy3">/</span><span class="nu0">2</span><span class="sy3">+</span><span class="kw3">Sqrt</span><span class="br0">&#40;</span>qq<span class="br0">&#41;</span><span class="sy1">,</span><span class="nu0">1</span><span class="sy3">/</span><span class="nu0">3</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;beta<span class="sy1">:</span><span class="sy3">=</span>power<span class="br0">&#40;</span><span class="sy3">-</span>q<span class="sy3">/</span><span class="nu0">2</span><span class="sy3">-</span><span class="kw3">Sqrt</span><span class="br0">&#40;</span>qq<span class="br0">&#41;</span><span class="sy1">,</span><span class="nu0">1</span><span class="sy3">/</span><span class="nu0">3</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;Result<span class="sy1">:</span><span class="sy3">=</span>alfa<span class="sy3">+</span>beta<span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">if</span> qq<span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">then</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
<span class="kw1">if</span> qq&lt;<span class="nu0">0</span> <span class="kw1">then</span> Result<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//------Функция в полярных коррдинатах сводится к решению куб. уравнения</span>
<span class="kw1">function</span> MyFunc<span class="br0">&#40;</span>ap<span class="sy1">,</span>fi<span class="sy1">:</span>Extended<span class="br0">&#41;</span><span class="sy1">:</span>Extended<span class="sy1">;</span>
<span class="kw1">var</span> cf<span class="sy1">,</span>sf<span class="sy1">,</span>x<span class="sy1">:</span>Extended<span class="sy1">;</span>
a<span class="sy1">,</span>b<span class="sy1">,</span>c<span class="sy1">,</span>d<span class="sy1">:</span>Extended<span class="sy1">;</span>
<span class="kw1">begin</span>
a<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span><span class="sy1">;</span>
cf<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">cos</span><span class="br0">&#40;</span>fi<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy1">;</span>sf<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">sin</span><span class="br0">&#40;</span>fi<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy1">;</span>
b<span class="sy1">:</span><span class="sy3">=</span>ap<span class="sy3">*</span>cf<span class="sy3">*</span>sf<span class="sy3">*</span>sf<span class="sy1">;</span>
c<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
d<span class="sy1">:</span><span class="sy3">=-</span><span class="nu0">850</span><span class="sy3">*</span>sf<span class="sy1">;</span>
Result<span class="sy1">:</span><span class="sy3">=</span>Kardano<span class="br0">&#40;</span>a<span class="sy1">,</span>b<span class="sy1">,</span>c<span class="sy1">,</span>d<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">//-----------График функции (x^2+y^2)^2+-a*x*y^2=850y &nbsp; &nbsp;-43&lt;=a&lt;=43</span>
<span class="co1">//-----------Полярн.коорд r^3+-a*cos(ф)*sin^2(ф)*r^2-850*sin(ф)=0; &nbsp; &nbsp; r=f(ф)</span>
<span class="kw1">procedure</span> TForm1<span class="sy1">.</span><span class="me1">DoGraph</span><span class="sy1">;</span>
<span class="kw1">var</span> i<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
r<span class="sy1">,</span>x<span class="sy1">,</span>y<span class="sy1">:</span>Extended<span class="sy1">;</span>
<span class="kw1">begin</span>
Chart1LineSeries1<span class="sy1">.</span><span class="me1">Clear</span><span class="sy1">;</span>
<span class="kw1">if</span> ak&lt;<span class="nu0">0</span> <span class="kw1">then</span> Chart1LineSeries1<span class="sy1">.</span><span class="me1">LinePen</span><span class="sy1">.</span><span class="me1">Color</span><span class="sy1">:</span><span class="sy3">=</span>clRed <span class="kw1">else</span> Chart1LineSeries1<span class="sy1">.</span><span class="me1">LinePen</span><span class="sy1">.</span><span class="me1">Color</span><span class="sy1">:</span><span class="sy3">=</span>clBlue<span class="sy1">;</span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> <span class="nu0">180</span> <span class="kw1">do</span>
&nbsp; &nbsp;<span class="kw1">begin</span>
&nbsp; &nbsp;r<span class="sy1">:</span><span class="sy3">=</span>MyFunc<span class="br0">&#40;</span>Form1<span class="sy1">.</span><span class="me1">ak</span><span class="sy1">,</span>i<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;x<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">*</span><span class="kw3">cos</span><span class="br0">&#40;</span>i<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;y<span class="sy1">:</span><span class="sy3">=</span>r<span class="sy3">*</span><span class="kw3">sin</span><span class="br0">&#40;</span>i<span class="sy3">*</span>PI<span class="sy3">/</span><span class="nu0">180</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">if</span> i<span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">then</span> <span class="kw1">begin</span> x<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>y<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>r<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span><span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp;Chart1LineSeries1<span class="sy1">.</span><span class="me1">AddXY</span><span class="br0">&#40;</span>x<span class="sy1">,</span>y<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp;<span class="kw1">end</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TForm1<span class="sy1">.</span><span class="me1">TrackBar1Change</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
ak<span class="sy1">:</span><span class="sy3">=</span>TrackBar1<span class="sy1">.</span><span class="me1">Position</span><span class="sy1">;</span>
Label1<span class="sy1">.</span><span class="me1">Caption</span><span class="sy1">:</span><span class="sy3">=</span><span class="st0">'a='</span><span class="sy3">+</span>IntToStr<span class="br0">&#40;</span>ak<span class="br0">&#41;</span><span class="sy1">;</span>
DoGraph<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TForm1<span class="sy1">.</span><span class="me1">FormShow</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> TObject<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
ak<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>DoGraph<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">end</span><span class="sy1">.</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8572&amp;d=1710882484" target="attachment" rel="Lightbox" id="attachment8572"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8572&amp;stc=1&amp;thumb=1&amp;d=1710882484" border="0" alt="Нажмите на изображение для увеличения
Название: Func.gif
Просмотров: 210
Размер:	1.50 Мб
ID:	8572" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>Massaraksh7</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1026121/8470.html</guid>
		</item>
	</channel>
</rss>
