<?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=433590&amp;view=findpost&amp;p=3888947</guid>
        <pubDate>Fri, 31 Mar 2023 17:22:18 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888947</link>
        <description><![CDATA[RusSun: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TPointFlt = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;X, Y: Double;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; TPointAim = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Pressed: Boolean;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Speed: TPointFlt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Accelerarion: TPointFlt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Cycle: Boolean;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;balance: TPointLink = (Position: (X: 25; Y: 10); Speed: (X: 0; Y: 0); Accelerarion: (X: 0; Y: 98000); Link: -1; Rope: 0; Cycle: False);</div><div class="code_line">&nbsp;&nbsp;points: array [0 .. 3] of TPoint = ((x:80; y:100), (x:150; y:120), (x:200; y:80), (x:250; y:110));</div><div class="code_line">&nbsp;&nbsp;curpos: TPointAim = (Position: (X: 0; Y: 0); Pressed: False);</div><div class="code_line">&nbsp;&nbsp;latest: TDateTime;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: LongInt): Double; overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: Double): Double; overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; i: LongInt;</div><div class="code_line">&nbsp;&nbsp; t: TDateTime;</div><div class="code_line">&nbsp;&nbsp; c: Double;</div><div class="code_line">&nbsp;&nbsp; u: TPointFlt;</div><div class="code_line">&nbsp;&nbsp; z, v, w: TPoint;</div><div class="code_line">&nbsp;&nbsp; s: TColor;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; t := latest;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">&nbsp;&nbsp; t := (latest - t) * 86400;</div><div class="code_line">&nbsp;&nbsp; for i := Low(points) to High(points) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Canvas.Arc(points[i].x - 10, points[i].y - 10, points[i].x + 10, points[i].y + 10, points[i].x, points[i].y - 10, points[i].x, points[i].y - 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with balance, curpos.Position do if (curpos.Pressed) and (dst(X - points[i].x, Y - points[i].y) &#60; sqrt(800)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Arc(points[i].x - 7, points[i].y - 7, points[i].x + 7, points[i].y + 7, points[i].x, points[i].y - 7, points[i].x, points[i].y - 7);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (Link = -1) or (Link &#60;&#62; i) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Link := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Rope := Round(dst(Position.X - points[i].x, Position.Y - points[i].y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else if not curpos.Pressed then balance.Link := -1;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; u.X := Position.X + t * (Speed.X + t * Accelerarion.X / 2000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; u.Y := Position.Y + t * (Speed.Y + t * Accelerarion.Y / 2000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; c := dst(points[Link].x - u.X, points[Link].y - u.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (not Cycle) and (c &#60; Rope) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Position.X := Round(u.X);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Position.Y := Round(u.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.X := Speed.X + t * Accelerarion.X / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.Y := Speed.Y + t * Accelerarion.Y / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Cycle := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if c &#62; Rope then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Position.X := Round(u.X + (c - Rope) * (points[Link].x - Position.X) / Rope);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Position.Y := Round(u.Y + (c - Rope) * (points[Link].y - Position.Y) / Rope);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c := dst(Accelerarion.X / 1000, Accelerarion.Y / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;u.X := (c / Rope) * (points[Link].x - Position.X) + Accelerarion.X / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;u.Y := (c / Rope) * (points[Link].y - Position.Y) + Accelerarion.Y / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.X, Round(t * (Speed.X + t * u.X / 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.Y, Round(t * (Speed.Y + t * u.Y / 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.X := Speed.X + t * u.X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.Y := Speed.Y + t * u.Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;z := Point(Round(Position.X + u.X - Accelerarion.X / 1000), Round(Position.Y + u.Y - Accelerarion.Y / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v := Point(Round(Position.X + Accelerarion.X / 1000), Round(Position.Y + Accelerarion.Y / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;w := Point(Round(Position.X + u.X), Round(Position.Y + u.Y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; inc(Position.X, Round(t * (Speed.X + t * Accelerarion.X / 2000)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; inc(Position.Y, Round(t * (Speed.Y + t * Accelerarion.Y / 2000)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := Speed.X + t * Accelerarion.X / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := Speed.Y + t * Accelerarion.Y / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Cycle := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := 40000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y + 100000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y - 100000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := 98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X + 25000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X - 25000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#62; ClientWidth - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := ClientWidth - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := -43000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y + 100000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y - 100000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#62; ClientHeight - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := ClientHeight - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := -98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X + 25000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X - 25000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance, balance.Position, Canvas, Canvas.Pen do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if balance.Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(points[balance.Link].x, points[balance.Link].y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Arc(X - 5, Y - 5, X + 5, Y + 5, X, Y - 5, X, Y - 5);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Cycle then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; s := Color;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Style := psDashDotDot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clGreen;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(z.x, z.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clBlue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(v.x, v.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Style := psSolid;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clPurple;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(w.x, w.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := s;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; curpos.Pressed := True;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Randomize;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; _X,</div><div class="code_line">&nbsp;&nbsp;_Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if curpos.Pressed then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; curpos.Pressed := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888940</guid>
        <pubDate>Fri, 31 Mar 2023 14:55:36 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888940</link>
        <description><![CDATA[macomics: Я вам об этом и говорю, зачем вы вместо объявленной у меня структуры TPointFlt<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; TPointFlt = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;X, Y: Double;</div><div class="code_line">&nbsp;&nbsp; end;</div></ol></div></div></div></div>изменили её на TPoint. Т.е. изначально это были вещественные значения, а стали целые и вы получили эту самую E2010 Incompatible types: &#39;Integer&#39; and &#39;Extended&#39;]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888937</guid>
        <pubDate>Fri, 31 Mar 2023 14:40:39 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888937</link>
        <description><![CDATA[RusSun: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Speed: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Accelerarion: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Cycle: Boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">type</div></ol></div></div></div></div><br>
А Accelerarion: <strong class='tag-b'>TPoint</strong>; Это<br>
<a class='tag-url' href='http://www.delphibasics.ru/TPoint.php' target='_blank'>А Tpoint в свою очередь -&gt;  Описание</a><br>
Кому лень<br>
|||||||||||||||||<br>
VVVVVVVVVVVVVVVVVV<br>
Там по ссылке это описание<br>
|||||||||||||||||<br>
VVVVVVVVVVVVVVVVVV<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">TPoint</div><div class="code_line">ТипСодержит целочисленные значения X и YTypes unit</div><div class="code_line">&nbsp;&nbsp;type TPoint = packed record</div><div class="code_line">&nbsp;&nbsp; X: Longint;</div><div class="code_line">&nbsp;&nbsp; Y: Longint;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
Поэтому Incompatible types: &#39;Integer&#39; and &#39;Extended&#39; тогда вопрос как изменить -&gt; &quot;TPointLink = packed record&quot; чтобы  &quot;TPoint;&quot; был -&gt; &quot;Acceleration как раз вещественного типа (Double) должно быть&quot; ? :oops:]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888866</guid>
        <pubDate>Thu, 30 Mar 2023 13:01:02 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888866</link>
        <description><![CDATA[macomics: Так Acceleration как раз вещественного типа (Double) должно быть, а не Integer<br>Я же не написал inc(Acceleration.X, 10000 * Random);]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888865</guid>
        <pubDate>Thu, 30 Mar 2023 12:57:41 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888865</link>
        <description><![CDATA[RusSun: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=433590&view=findpost&p=3888847'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2023-03-30T09:16:36+00:00">30.03.23, 09:16</time></span><div class='quote '>Только зачем скорость и ускорение сделали целочисленными? Так они будут работать не плавно.</div></div><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X - 25000 * Random;</div><div class="code_line">...</div></ol></div></div></div></div><br>
[Pascal Error] Unit1.pas(183): E2010 Incompatible types: &#39;Integer&#39; and &#39;Extended&#39;<br>
[Pascal Fatal Error] Project1.dpr(5): F2063 Could not compile used unit &#39;Unit1.pas&#39;]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888847</guid>
        <pubDate>Thu, 30 Mar 2023 09:16:36 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888847</link>
        <description><![CDATA[macomics: Только зачем скорость и ускорение сделали целочисленными? Так они будут работать не плавно. Хотя у ускорения и сохраняется 3 десятичных разрядов в дробной части (у Acceleration везде стоит деление на 1000), но у скорости этого нету.<br><br>Изначально у меня эти параметры тоже были целыми, но я изменил их на вещественные. Так стало работать более плавно.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888837</guid>
        <pubDate>Thu, 30 Mar 2023 01:37:27 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888837</link>
        <description><![CDATA[RusSun: В Delphi<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TPointFlt = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;X, Y: Double;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPointAim = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pressed: Boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Speed: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Accelerarion: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Cycle: Boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;balance: TPointLink = (Position: (X: 25; Y: 10); Speed: (X: 0; Y: 0); Accelerarion: (X: 0; Y: 98000); Link: -1; Rope: 0);</div><div class="code_line">&nbsp;&nbsp;points: array [0 .. 3] of TPoint = ((x:80; y:100), (x:150; y:120), (x:200; y:80), (x:250; y:110));</div><div class="code_line">&nbsp;&nbsp;latest: TDateTime;</div><div class="code_line">&nbsp;&nbsp;curpos: TPointAim = (Position: (X: 0; Y: 0); Pressed: False);</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">function dst(X, Y: LongInt): Double;overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">function dst(X, Y: Double): Double; overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Randomize;</div><div class="code_line">latest := Now;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with curpos.Position do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; curpos.Pressed := True;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; _X,</div><div class="code_line">&nbsp;&nbsp;_Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with curpos.Position do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if curpos.Pressed then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;curpos.Pressed := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; i: LongInt;</div><div class="code_line">&nbsp;&nbsp; t: TDateTime;</div><div class="code_line">&nbsp;&nbsp; c: Double;</div><div class="code_line">&nbsp;&nbsp; u: TPointFlt;</div><div class="code_line">&nbsp;&nbsp; z, v, w: TPoint;</div><div class="code_line">&nbsp;&nbsp; s: TColor;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; t := latest;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">&nbsp;&nbsp; t := (latest - t) * 86400;</div><div class="code_line">&nbsp;&nbsp; for i := Low(points) to High(points) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Canvas.Arc(points[i].x - 10, points[i].y - 10, points[i].x + 10, points[i].y + 10, points[i].x, points[i].y - 10, points[i].x, points[i].y - 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with balance, curpos.Position do if (curpos.Pressed) and (dst(X - points[i].x, Y - points[i].y) &#60; sqrt(800)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Arc(points[i].x - 7, points[i].y - 7, points[i].x + 7, points[i].y + 7, points[i].x, points[i].y - 7, points[i].x, points[i].y - 7);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (Link = -1) or (Link &#60;&#62; i) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Link := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Rope := Round(dst(Position.X - points[i].x, Position.Y - points[i].y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else if not curpos.Pressed then balance.Link := -1;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; u.X := Position.X + t * (Speed.X + t * Accelerarion.X / 2000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; u.Y := Position.Y + t * (Speed.Y + t * Accelerarion.Y / 2000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; c := dst(points[Link].x - u.X, points[Link].y - u.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (not Cycle) and (c &#60; Rope) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Position.X := Round(u.X);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Position.Y := Round(u.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.X := Round(Speed.X + t * Accelerarion.X / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.Y := Round(Speed.Y + t * Accelerarion.Y / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Cycle := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if c &#62; Rope then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Position.X := Round(u.X + (c - Rope) * (points[Link].x - Position.X) / Rope);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Position.Y := Round(u.Y + (c - Rope) * (points[Link].y - Position.Y) / Rope);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c := dst(Accelerarion.X / 1000, Accelerarion.Y / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;u.X := (c / Rope) * (points[Link].x - Position.X) + Accelerarion.X / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;u.Y := (c / Rope) * (points[Link].y - Position.Y) + Accelerarion.Y / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.X, Round(t * (Speed.X + t * u.X / 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.Y, Round(t * (Speed.Y + t * u.Y / 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.X := Round(Speed.X + t * u.X);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.Y := Round(Speed.Y + t * u.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;z := Point(Round(Position.X + u.X - Accelerarion.X / 1000), Round(Position.Y + u.Y - Accelerarion.Y / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v := Point(Round(Position.X + Accelerarion.X / 1000), Round(Position.Y + Accelerarion.Y / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;w := Point(Round(Position.X + u.X), Round(Position.Y + u.Y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; inc(Position.X, Round(t * (Speed.X + t * Accelerarion.X / 2000)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; inc(Position.Y, Round(t * (Speed.Y + t * Accelerarion.Y / 2000)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := Round(Speed.X + t * Accelerarion.X / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := Round(Speed.Y + t * Accelerarion.Y / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Cycle := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := 40000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y + 100000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y - 100000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := 98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X + 25000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X - 25000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#62; ClientWidth - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := ClientWidth - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := -43000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y + 100000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y - 100000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#62; ClientHeight - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := ClientHeight - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := -98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X + 25000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X - 25000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance, balance.Position, Canvas, Canvas.Pen do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if balance.Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(points[balance.Link].x, points[balance.Link].y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Arc(X - 5, Y - 5, X + 5, Y + 5, X, Y - 5, X, Y - 5);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Cycle then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; s := Color;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Style := psDashDotDot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clGreen;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(z.x, z.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clBlue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(v.x, v.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Style := psSolid;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clPurple;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(w.x, w.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := s;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888651</guid>
        <pubDate>Mon, 27 Mar 2023 12:06:06 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888651</link>
        <description><![CDATA[macomics: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TPointFlt = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;X, Y: Double;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; TPointAim = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Pressed: Boolean;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Speed: TPointFlt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Accelerarion: TPointFlt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Cycle: Boolean;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;balance: TPointLink = (Position: (X: 25; Y: 10); Speed: (X: 0; Y: 0); Accelerarion: (X: 0; Y: 98000); Link: -1; Rope: 0; Cycle: False);</div><div class="code_line">&nbsp;&nbsp;points: array [0 .. 3] of TPoint = ((x:80; y:100), (x:150; y:120), (x:200; y:80), (x:250; y:110));</div><div class="code_line">&nbsp;&nbsp;curpos: TPointAim = (Position: (X: 0; Y: 0); Pressed: False);</div><div class="code_line">&nbsp;&nbsp;latest: TDateTime;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.lfm}</div><div class="code_line">&nbsp;</div><div class="code_line">{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: LongInt): Double; overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: Double): Double; overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; i: LongInt;</div><div class="code_line">&nbsp;&nbsp; t: TDateTime;</div><div class="code_line">&nbsp;&nbsp; c: Double;</div><div class="code_line">&nbsp;&nbsp; u: TPointFlt;</div><div class="code_line">&nbsp;&nbsp; z, v, w: TPoint;</div><div class="code_line">&nbsp;&nbsp; s: TColor;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; t := latest;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">&nbsp;&nbsp; t := (latest - t) * 86400;</div><div class="code_line">&nbsp;&nbsp; for i := Low(points) to High(points) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Canvas.Arc(points[i].x - 10, points[i].y - 10, points[i].x + 10, points[i].y + 10, points[i].x, points[i].y - 10, points[i].x, points[i].y - 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with balance, curpos.Position do if (curpos.Pressed) and (dst(X - points[i].x, Y - points[i].y) &#60; sqrt(800)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Arc(points[i].x - 7, points[i].y - 7, points[i].x + 7, points[i].y + 7, points[i].x, points[i].y - 7, points[i].x, points[i].y - 7);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (Link = -1) or (Link &#60;&#62; i) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Link := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Rope := Round(dst(Position.X - points[i].x, Position.Y - points[i].y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else if not curpos.Pressed then balance.Link := -1;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; u.X := Position.X + t * (Speed.X + t * Accelerarion.X / 2000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; u.Y := Position.Y + t * (Speed.Y + t * Accelerarion.Y / 2000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; c := dst(points[Link].x - u.X, points[Link].y - u.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (not Cycle) and (c &#60; Rope) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Position.X := Round(u.X);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Position.Y := Round(u.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.X := Speed.X + t * Accelerarion.X / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.Y := Speed.Y + t * Accelerarion.Y / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Cycle := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if c &#62; Rope then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Position.X := Round(u.X + (c - Rope) * (points[Link].x - Position.X) / Rope);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Position.Y := Round(u.Y + (c - Rope) * (points[Link].y - Position.Y) / Rope);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c := dst(Accelerarion.X / 1000, Accelerarion.Y / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;u.X := (c / Rope) * (points[Link].x - Position.X) + Accelerarion.X / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;u.Y := (c / Rope) * (points[Link].y - Position.Y) + Accelerarion.Y / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.X, Round(t * (Speed.X + t * u.X / 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.Y, Round(t * (Speed.Y + t * u.Y / 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.X := Speed.X + t * u.X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Speed.Y := Speed.Y + t * u.Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;z := Point(Round(Position.X + u.X - Accelerarion.X / 1000), Round(Position.Y + u.Y - Accelerarion.Y / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v := Point(Round(Position.X + Accelerarion.X / 1000), Round(Position.Y + Accelerarion.Y / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;w := Point(Round(Position.X + u.X), Round(Position.Y + u.Y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; inc(Position.X, Round(t * (Speed.X + t * Accelerarion.X / 2000)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; inc(Position.Y, Round(t * (Speed.Y + t * Accelerarion.Y / 2000)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := Speed.X + t * Accelerarion.X / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := Speed.Y + t * Accelerarion.Y / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Cycle := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := 40000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y + 100000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y - 100000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := 98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X + 25000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X - 25000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#62; ClientWidth - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := ClientWidth - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := -43000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y + 100000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y - 100000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#62; ClientHeight - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := ClientHeight - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := -98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X + 25000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X - 25000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance, balance.Position, Canvas, Canvas.Pen do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if balance.Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(points[balance.Link].x, points[balance.Link].y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Arc(X - 5, Y - 5, X + 5, Y + 5, X, Y - 5, X, Y - 5);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Cycle then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; s := Color;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Style := psDashDotDot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clGreen;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(z.x, z.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clBlue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(v.x, v.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Style := psSolid;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := clPurple;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; MoveTo(w.x, w.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; LineTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Width := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Color := s;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; curpos.Pressed := True;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Randomize;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; _X,</div><div class="code_line">&nbsp;&nbsp;_Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if curpos.Pressed then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; curpos.Pressed := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>Как то так будет с угловой скоростью. Но чтобы было поавно стоит определить еще и параметры массы.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888048</guid>
        <pubDate>Thu, 16 Mar 2023 22:44:36 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888048</link>
        <description><![CDATA[macomics: Чтобы функции работали вместе в Delphi 7 надо добавить слово <strong class='tag-b'>overload</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function dst(X, Y: LongInt): Double; overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: Double): Double; overload;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=433590&view=findpost&p=3888047'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Katerina1993 &#064; <time class="tag-quote__quoted-time" datetime="2023-03-16T21:54:23+00:00">16.03.23, 21:54</time></span><div class='quote '>Линия рисуется как-то странно</div></div><br>
Потому что не правильно указали координаты<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; with balance.Position, Canvas do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if balance.Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.MoveTo(X, Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.LineTo(points[balance.Link].x, points[balance.Link].y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Arc(X - 5, Y - 5, X + 5, Y + 5, X, Y - 5, X, Y - 5);</div><div class="code_line">&nbsp;&nbsp; end;</div></ol></div></div></div></div><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=433590&view=findpost&p=3888047'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Katerina1993 &#064; <time class="tag-quote__quoted-time" datetime="2023-03-16T21:54:23+00:00">16.03.23, 21:54</time></span><div class='quote '>Многие выражения пришлось окружить Round иначе выдает ошибку что требуется целочисленные, а то при расчетах выходят цифры с плавающей точкой.</div></div><br>
А это у вас из-за того, что отказались от второй функции. У меня действительно скорости и ускорения вычисляются в вещественной форме т.к. время тоже требует вычислений с плавающей точкой (так плавность движения больше).<br>
<br>
Шарик пока только зависает на верёвке. Я пока не хочу вспоминать физику с геометрией и вычислять моментальную скорость для получения эффекта маятника. Как будет свободное время, тогда добавлю и эти вычисления к проекту.<br>
<br>
Замечу вот что. Сейчас шарик, когда повис на верёвке, все равно продолжает набирать скорость. Вот это надо будет перевести в моментальное ускорение и он будет болтаться на верёвке изображая маятник (с вектором покоя совпадающим с вектором ускорения).]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888047</guid>
        <pubDate>Thu, 16 Mar 2023 21:54:23 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3888047</link>
        <description><![CDATA[Katerina1993: <strong class='tag-b'>macomics</strong>, что то нето, я подправила код потому, что не работает, может быть это в более высокой версии работает, но у меня Delphi7. Тут в коде две функции<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function dst(X, Y: LongInt): Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div></ol></div></div></div></div><br>
они конфликтуют.<br>
Я не знаю что за процедура <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Canvas.Line(balance.Position, points[balance.Link]);</div></ol></div></div></div></div><br>
Но у меня её нет.<br>
Поэтому вот так.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;with balance.Position, Canvas do</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Canvas.MoveTo(X, Y); </div><div class="code_line">&nbsp;&nbsp; &nbsp; if balance.Link &#60;&#62; -1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.LineTo(balance.Position.X, points[balance.Link].Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; Arc(X - 5, Y - 5, X + 5, Y + 5, 0, 5760,0,5760)</div><div class="code_line">&nbsp;&nbsp; end;</div></ol></div></div></div></div><br>
Линия рисуется как-то странно, вниз. Шарик падает с зависанием. Вот пример кода:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPointAim = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pressed: Boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Speed: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Accelerarion: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;balance: TPointLink = (Position: (X: 25; Y: 10); Speed: (X: 0; Y: 0); Accelerarion: (X: 0; Y: 98000); Link: -1; Rope: 0);</div><div class="code_line">&nbsp;&nbsp;points: array [0 .. 3] of TPoint = ((x:80; y:100), (x:150; y:120), (x:200; y:80), (x:250; y:110));</div><div class="code_line">&nbsp;&nbsp;curpos: TPointAim = (Position: (X: 0; Y: 0); Pressed: False);</div><div class="code_line">&nbsp;&nbsp;latest: TDateTime;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">function dst(X, Y: LongInt): Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Randomize;</div><div class="code_line">latest := Now;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; curpos.Pressed := True;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; _X,</div><div class="code_line">&nbsp;&nbsp;_Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with curpos.Position do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if curpos.Pressed then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;curpos.Pressed := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; i, d: LongInt;</div><div class="code_line">&nbsp;&nbsp; t: TDateTime;</div><div class="code_line">&nbsp;&nbsp; c: Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; t := latest;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">&nbsp;&nbsp; t := (latest - t) * 86400;</div><div class="code_line">&nbsp;&nbsp; for i := Low(points) to High(points) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Canvas.Arc(points[i].x - 10, points[i].y - 10, points[i].x + 10, points[i].y + 10, points[i].x, points[i].y - 10, points[i].x, points[i].y - 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with curpos.Position do if (curpos.Pressed) and (dst(X - points[i].x, Y - points[i].y) &#60; sqrt(800)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Arc(points[i].x - 7, points[i].y - 7, points[i].x + 7, points[i].y + 7, points[i].x, points[i].y - 7, points[i].x, points[i].y - 7);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (balance.Link = -1) or (balance.Link &#60;&#62; i) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Link := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Rope := Round(dst(balance.Position.X - points[i].x, balance.Position.Y - points[i].y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else if not curpos.Pressed then balance.Link := -1;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.X, Round(Speed.X * t + Accelerarion.X * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.Y, Round(Speed.Y * t + Accelerarion.Y * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Speed.X := Speed.X + Round(Accelerarion.X * t / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Speed.Y := Speed.Y + Round(Accelerarion.Y * t / 1000);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//inc(Speed.X, Round(Accelerarion.X * t / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//inc(Speed.Y, Round(Accelerarion.Y * t / 1000));</div><div class="code_line">// Вот тут я ограничиваю движения объекта границами окна</div><div class="code_line">//-------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; d := Round(dst(points[Link].x - Position.X, points[Link].y - Position.Y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if d &#62; Rope then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.X, Round((d - Rope) * (points[Link].x - Position.X) / Rope));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.Y, Round((d - Rope) * (points[Link].y - Position.Y) / Rope));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c := dst(balance.Speed.x, balance.Speed.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Speed.X := 1000 * Round(balance.Speed.X / c);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Speed.Y := 1000 * Round(balance.Speed.Y / c);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := 40000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y + 100000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y - 100000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := 98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X + 25000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X - 25000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if Position.X &#62; ClientWidth - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := ClientWidth - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := -43000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y + 100000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Round(Accelerarion.Y - 100000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if Position.Y &#62; ClientHeight - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := ClientHeight - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := -98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X + 25000 * Random)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Round(Accelerarion.X - 25000 * Random);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">//-------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; //with balance.Position, Canvas do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; // if balance.Link &#60;&#62; -1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// &nbsp; Canvas.Line(balance.Position, points[balance.Link]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//Arc(X - 5, Y - 5, X + 5, Y + 5, X, Y - 5, X, Y - 5);</div><div class="code_line">&nbsp;&nbsp; //end;</div><div class="code_line">&nbsp;&nbsp; with balance.Position, Canvas do</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Canvas.MoveTo(X, Y); </div><div class="code_line">&nbsp;&nbsp; &nbsp; if balance.Link &#60;&#62; -1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.LineTo(balance.Position.X, points[balance.Link].Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; Arc(X - 5, Y - 5, X + 5, Y + 5, 0, 5760,0,5760)</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><br>
<br>
Многие выражения пришлось окружить Round иначе выдает ошибку что требуется целочисленные, а то при расчетах выходят цифры с плавающей точкой.]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887934</guid>
        <pubDate>Thu, 16 Mar 2023 00:27:08 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887934</link>
        <description><![CDATA[Feldsher: ТС должен признаться уже, после такой помощи  :D  :D  :D]]></description>
        <author>Feldsher</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887869</guid>
        <pubDate>Wed, 15 Mar 2023 11:15:01 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887869</link>
        <description><![CDATA[macomics: Вот, если поможет<br>
<br>
<span class="b-attach" data-size="134043" data-hits="80" data-attach-id="64806" data-attach-post-id="3887869">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3887869&amp;attach_id=64806' title='Скачать файл' target='_blank'>Project1.zip</a> (, : 80)
		</span>]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887865</guid>
        <pubDate>Wed, 15 Mar 2023 10:56:21 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887865</link>
        <description><![CDATA[RusSun: :popcorn:<br>
<span class="b-attach" data-size="17110" data-hits="82" data-attach-id="64804" data-attach-post-id="3887865">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3887865&amp;attach_id=64804' title='Скачать файл' target='_blank'>2.zip</a> (, : 82)
		</span>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887862</guid>
        <pubDate>Wed, 15 Mar 2023 10:36:18 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887862</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=433590&view=findpost&p=3887839'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RusSun &#064; <time class="tag-quote__quoted-time" datetime="2023-03-15T04:42:00+00:00">15.03.23, 04:42</time></span><div class='quote '>Там arc немного отличается поэтому добавил два параметра в delphi 8мь параметров в Lasar&#39;e arc c 6тью параметрами.</div></div><br>
У меня есть arc с 8-ю параметрами. Считать лень было. Использовал вариант с 6-ю параметрами. Странно, что на Delphi её нету.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPointAim = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pressed: Boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Speed: packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;X, Y: Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Accelerarion: packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;X, Y: Double;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;balance: TPointLink = (Position: (X: 25; Y: 10); Speed: (X: 0; Y: 0); Accelerarion: (X: 0; Y: 98000); Link: -1; Rope: 0);</div><div class="code_line">&nbsp;&nbsp;points: array [0 .. 3] of TPoint = ((x:80; y:100), (x:150; y:120), (x:200; y:80), (x:250; y:110));</div><div class="code_line">&nbsp;&nbsp;curpos: TPointAim = (Position: (X: 0; Y: 0); Pressed: False);</div><div class="code_line">&nbsp;&nbsp;latest: TDateTime;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.lfm}</div><div class="code_line">&nbsp;</div><div class="code_line">{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: LongInt): Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: Double): Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; i, d: LongInt;</div><div class="code_line">&nbsp;&nbsp; t: TDateTime;</div><div class="code_line">&nbsp;&nbsp; c: Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; t := latest;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">&nbsp;&nbsp; t := (latest - t) * 86400;</div><div class="code_line">&nbsp;&nbsp; for i := Low(points) to High(points) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Canvas.Arc(points[i].x - 10, points[i].y - 10, points[i].x + 10, points[i].y + 10, points[i].x, points[i].y - 10, points[i].x, points[i].y - 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with curpos.Position do if (curpos.Pressed) and (dst(X - points[i].x, Y - points[i].y) &#60; sqrt(800)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Arc(points[i].x - 7, points[i].y - 7, points[i].x + 7, points[i].y + 7, points[i].x, points[i].y - 7, points[i].x, points[i].y - 7);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (balance.Link = -1) or (balance.Link &#60;&#62; i) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Link := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Rope := Round(dst(balance.Position.X - points[i].x, balance.Position.Y - points[i].y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else if not curpos.Pressed then balance.Link := -1;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.X, Round(Speed.X * t + Accelerarion.X * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.Y, Round(Speed.Y * t + Accelerarion.Y * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Speed.X := Speed.X + Accelerarion.X * t / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Speed.Y := Speed.Y + Accelerarion.Y * t / 1000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Link &#60;&#62; -1 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; d := Round(dst(points[Link].x - Position.X, points[Link].y - Position.Y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if d &#62; Rope then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.X, Round((d - Rope) * (points[Link].x - Position.X) / Rope));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Position.Y, Round((d - Rope) * (points[Link].y - Position.Y) / Rope));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c := dst(balance.Speed.x, balance.Speed.Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Speed.X := 1000 * balance.Speed.X / c;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Speed.Y := 1000 * balance.Speed.Y / c;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := 40000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y + 100000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y - 100000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := 98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X + 25000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X - 25000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#62; ClientWidth - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := ClientWidth - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := -43000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y + 100000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.Y := Accelerarion.Y - 100000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#62; ClientHeight - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := ClientHeight - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := -98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X + 25000 * Random</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Accelerarion.X := Accelerarion.X - 25000 * Random;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance.Position, Canvas do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if balance.Link &#60;&#62; -1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Line(balance.Position, points[balance.Link]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Arc(X - 5, Y - 5, X + 5, Y + 5, X, Y - 5, X, Y - 5);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; curpos.Pressed := True;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Randomize;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; _X,</div><div class="code_line">&nbsp;&nbsp;_Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if curpos.Pressed then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; curpos.Pressed := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>Но я не делал еще расчет угловых скоростей <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2023-03-15T10:41:57+00:00">15.03.23, 10:41</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=433590&view=findpost&p=3887853'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>^D^ima &#064; <time class="tag-quote__quoted-time" datetime="2023-03-15T08:24:16+00:00">15.03.23, 08:24</time></span><div class='quote '>Прикрепите пожалуйста файл проекта целиком, :thanks:</div></div><br>
Какой файл проекта. Весь проект из одного модуля.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">program project1;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;{$IFDEF UNIX}{$IFDEF UseCThreads}</div><div class="code_line">&nbsp;&nbsp;cthreads,</div><div class="code_line">&nbsp;&nbsp;{$ENDIF}{$ENDIF}</div><div class="code_line">&nbsp;&nbsp;Interfaces, // this includes the LCL widgetset</div><div class="code_line">&nbsp;&nbsp;Forms, Unit1</div><div class="code_line">&nbsp;&nbsp;{ you can add units after this };</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.res}</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;RequireDerivedFormResource:=True;</div><div class="code_line">&nbsp;&nbsp;Application.Scaled:=True;</div><div class="code_line">&nbsp;&nbsp;Application.Initialize;</div><div class="code_line">&nbsp;&nbsp;Application.CreateForm(TForm1, Form1);</div><div class="code_line">&nbsp;&nbsp;Application.Run;</div><div class="code_line">end.</div></ol></div></div></div></div>Не думаю, что Project1.lpr вам чем-то поможет.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887853</guid>
        <pubDate>Wed, 15 Mar 2023 08:24:16 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887853</link>
        <description><![CDATA[^D^ima: Прикрепите пожалуйста файл проекта целиком,  :thanks:]]></description>
        <author>^D^ima</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887839</guid>
        <pubDate>Wed, 15 Mar 2023 04:42:00 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887839</link>
        <description><![CDATA[RusSun: to macomics Вот на Delphi твой код с Lasar&#39;я, но мне кажется, что оно также забавно работает.<br>
То есть без картинки как у тебя это работает в Lasar&#39;e - не понятно)) Без намёка. Просто как есть.<br>
Там <strong class='tag-b'>arc</strong> немного отличается поэтому добавил два параметра в delphi 8мь параметров  в Lasar&#39;e <strong class='tag-b'>arc</strong> c 6тью параметрами.<br>
Без притензии.  :thanks: <br>
 <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPointAim = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pressed: Boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Speed: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Accelerarion: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;balance: TPointLink = (Position: (X: 25; Y: 10); Speed: (X: 0; Y: 0); Accelerarion: (X: 0; Y: 98000); Link: -1; Rope: 0);</div><div class="code_line">&nbsp;&nbsp;points: array [0 .. 3] of TPoint = ((x:80; y:100), (x:150; y:120), (x:200; y:80), (x:250; y:110));</div><div class="code_line">&nbsp;&nbsp;latest: TDateTime;</div><div class="code_line">&nbsp;&nbsp;curpos: TPointAim = (Position: (X: 0; Y: 0); Pressed: False);</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">function dst(X, Y: LongInt): Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Randomize;</div><div class="code_line">latest := Now;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with curpos.Position do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; curpos.Pressed := True;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; _X,</div><div class="code_line">&nbsp;&nbsp;_Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with curpos.Position do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if curpos.Pressed then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;curpos.Pressed := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; i: LongInt;</div><div class="code_line">&nbsp;&nbsp; t: TDateTime;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; t := latest;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">&nbsp;&nbsp; t := (latest - t) * 86400;</div><div class="code_line">&nbsp;&nbsp; for i := Low(points) to High(points) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Canvas.Arc(points[i].x - 10, points[i].y - 10, points[i].x + 10, points[i].y + 10, 0, 5760,0,5760);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with curpos.Position do if (curpos.Pressed) and (dst(X - points[i].x, Y - points[i].y) &#60; sqrt(800)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Arc(points[i].x - 7, points[i].y - 7, points[i].x + 7, points[i].y + 7, 0, 5760,0,5760);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (balance.Link = -1) or (balance.Link &#60;&#62; i) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Link := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Rope := Round(dst(X - points[i].x, Y - points[i].y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.X, Round(Speed.X * t + Accelerarion.X * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.Y, Round(Speed.Y * t + Accelerarion.Y * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Speed.X, Round(Accelerarion.X * t / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Speed.Y, Round(Accelerarion.Y * t / 1000));</div><div class="code_line">// Вот тут я ограничиваю движения объекта границами окна</div><div class="code_line">//-------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := 40000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.Y, Round(100000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.Y, Round(100000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := 98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.X, Round(25000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.X, Round(25000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#62; ClientWidth - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := ClientWidth - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := -43000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.Y, Round(100000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.Y, Round(100000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#62; ClientHeight - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := ClientHeight - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := -98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.X, Round(25000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.X, Round(25000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">//-------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance.Position, Canvas do Arc(X - 5, Y - 5, X + 5, Y + 5, 0, 5760,0,5760)</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887826</guid>
        <pubDate>Tue, 14 Mar 2023 15:41:12 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887826</link>
        <description><![CDATA[macomics: Для начала надо поработать над анимацией. У вас должен быть таймер, который управляет перерисовкой. Но этот таймер нужен лишь для того, чтобы принудительно перерисовывать окно и генерировать кадры анимации. А вот расчёт кадра анимации лучше всего делать относительно реального времени. Так анимация не будет зависеть от частоты кадров и будет наиболее адекватно отображаться во времени.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPointAim = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pressed: Boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TPointLink = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Speed: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Accelerarion: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Link: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Rope: LongInt;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;balance: TPointLink = (Position: (X: 25; Y: 10); Speed: (X: 0; Y: 0); Accelerarion: (X: 0; Y: 98000); Link: -1; Rope: 0);</div><div class="code_line">&nbsp;&nbsp;points: array [0 .. 3] of TPoint = ((x:80; y:100), (x:150; y:120), (x:200; y:80), (x:250; y:110));</div><div class="code_line">&nbsp;&nbsp;curpos: TPointAim = (Position: (X: 0; Y: 0); Pressed: False);</div><div class="code_line">&nbsp;&nbsp;latest: TDateTime;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.lfm}</div><div class="code_line">&nbsp;</div><div class="code_line">{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function dst(X, Y: LongInt): Double;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; dst := sqrt(X * X + Y * Y);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; i: LongInt;</div><div class="code_line">&nbsp;&nbsp; t: TDateTime;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; t := latest;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">&nbsp;&nbsp; t := (latest - t) * 86400;</div><div class="code_line">&nbsp;&nbsp; for i := Low(points) to High(points) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Canvas.Arc(points[i].x - 10, points[i].y - 10, points[i].x + 10, points[i].y + 10, 0, 5760);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with curpos.Position do if (curpos.Pressed) and (dst(X - points[i].x, Y - points[i].y) &#60; sqrt(800)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Canvas.Arc(points[i].x - 7, points[i].y - 7, points[i].x + 7, points[i].y + 7, 0, 5760);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (balance.Link = -1) or (balance.Link &#60;&#62; i) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Link := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;balance.Rope := Round(dst(X - points[i].x, Y - points[i].y));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.X, Round(Speed.X * t + Accelerarion.X * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Position.Y, Round(Speed.Y * t + Accelerarion.Y * t * t / 2000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Speed.X, Round(Accelerarion.X * t / 1000));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(Speed.Y, Round(Accelerarion.Y * t / 1000));</div><div class="code_line">// Вот тут я ограничиваю движения объекта границами окна</div><div class="code_line">//-------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := 40000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.Y, Round(100000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.Y, Round(100000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#60; 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := 98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.X, Round(25000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.X, Round(25000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.X &#62; ClientWidth - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.X := ClientWidth - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.X := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.X := -43000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.X &#60; ClientWidth div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.Y, Round(100000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.Y, Round(100000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Position.Y &#62; ClientHeight - 6 then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Position.Y := ClientHeight - 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Speed.Y := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Accelerarion.Y := -98000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Position.Y &#60; ClientHeight div 2 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(Accelerarion.X, Round(25000 * Random))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(Accelerarion.X, Round(25000 * Random));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">//-------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; with balance.Position, Canvas do Arc(X - 5, Y - 5, X + 5, Y + 5, 0, 5760);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; curpos.Pressed := True;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Randomize;</div><div class="code_line">&nbsp;&nbsp; latest := Now;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; _X,</div><div class="code_line">&nbsp;&nbsp;_Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; with curpos.Position do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if curpos.Pressed then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; X := _X;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Y := _Y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; _X, _Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; curpos.Pressed := False;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>Напечатал эту программу и завис наблюдая за объектом. Анимация опасная штука. Чуть позже, как будет время, добавлю зацепку к объектам и эффект маятника при раскачивании на верёвке.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887810</guid>
        <pubDate>Tue, 14 Mar 2023 13:23:07 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887810</link>
        <description><![CDATA[Katerina1993: Попыталась сделать. При нажатии кнопки быстро подымается к точке и если отпустить то быстро падает иногда выстреливает куда-то в бок. Пример в анимации.<br>
<img class='tag-img' src='https://i.ibb.co/JtkHW2J/Ex1.gif' alt='user posted image'><br>
Если объект находится слишком низко, то при нажатии кнопки он подымается как на пружине резко вверх пример во второй анимации.<br>
<img class='tag-img' src='https://i.ibb.co/QKxb2Fw/Ex2.gif' alt='user posted image'><br>
<br>
Как сделать плавное подъем и чтобы в случае отпускание он оставался на том же месте, при этом учитывая колебания раскачивания?<br>
<br>
Код я перенесла в Timer, и добавила Repaint, как мне рекомендовали.  <br>
<br>
Еще поменяла Arc на Ellipse, так как Arc почему-то не перекрашивается в нужный цвет.<br>
<br>
Код полностью:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls, StdCtrls, Unit2,Math;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;TPlayer = class</div><div class="code_line">&nbsp;private</div><div class="code_line">&nbsp;&nbsp;x0,y0,radius,QA,wA,AA,zA,FB,LB,GB,T,FC,oB,yB,vB,HB,k,LC,P,S:Integer;</div><div class="code_line">&nbsp;&nbsp;visible:Boolean;</div><div class="code_line">&nbsp;&nbsp;color:TColor;</div><div class="code_line">&nbsp;public</div><div class="code_line">&nbsp;&nbsp;constructor Create(_x,_y,_r,_QA,_wA,_AA,_zA,_FB,_LB,_GB,_T,_FC,_oB,_yB,_vB,_HB,_k,_LC,_P,_S:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">&nbsp;&nbsp;procedure Draw(Cs:TCanvas);</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;TDot = class</div><div class="code_line">&nbsp;private</div><div class="code_line">&nbsp;&nbsp;x0,y0,radius,k,p:Integer;</div><div class="code_line">&nbsp;&nbsp;visible:Boolean;</div><div class="code_line">&nbsp;&nbsp;color:TColor;</div><div class="code_line">&nbsp;public</div><div class="code_line">&nbsp;&nbsp;constructor Create(_x,_y,_r,_k,_p:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">&nbsp;&nbsp;procedure Draw(Cs:TCanvas);</div><div class="code_line">end;</div><div class="code_line">&nbsp;procedure a(mousex,mousey:Integer);</div><div class="code_line">&nbsp;function DC(HC, p:Integer):Integer;</div><div class="code_line">&nbsp;procedure GA();</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;Player: TPlayer;</div><div class="code_line">&nbsp;&nbsp;dt: Array[0..3] Of TDot;</div><div class="code_line">&nbsp;&nbsp;dt1:TDot;</div><div class="code_line">&nbsp;&nbsp;dt2:TDot;</div><div class="code_line">&nbsp;&nbsp;dt3:TDot;</div><div class="code_line">&nbsp;&nbsp;dt4:TDot;</div><div class="code_line">&nbsp;&nbsp;xmov:Integer = 0;</div><div class="code_line">&nbsp;&nbsp;ymov:Integer = 0;</div><div class="code_line">&nbsp;&nbsp;mousedownevt:Boolean;</div><div class="code_line">&nbsp;&nbsp;mouseupevt:Boolean;</div><div class="code_line">&nbsp;&nbsp;upb:Boolean;</div><div class="code_line">&nbsp;&nbsp;d:Integer=1;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TDot.Create(_x,_y,_r,_k,_p:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;x0:=_x;</div><div class="code_line">&nbsp;&nbsp;y0:=_y;</div><div class="code_line">&nbsp;&nbsp;radius:=_r;</div><div class="code_line">&nbsp;&nbsp;color:=_color;</div><div class="code_line">&nbsp;&nbsp;k:=_k;</div><div class="code_line">&nbsp;&nbsp;p:=_p;</div><div class="code_line">&nbsp;&nbsp;visible:=_visible;</div><div class="code_line">end;</div><div class="code_line">procedure TDot.Draw(Cs: TCanvas);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Form2.Memo1.Lines.Add(IntToStr(radius));</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Ellipse(x0,y0,x0+radius*2,y0+radius*2);</div><div class="code_line">&nbsp;&nbsp;//Cs.Arc(x0,y0,x0+radius*2,y0+radius*2,radius,radius,radius,radius);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TPlayer.Create(_x,_y,_r,_QA,_wA,_AA,_zA,_FB,_LB,_GB,_T,_FC,_oB,_yB,_vB,_HB,_k,_LC,_P,_S:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x;</div><div class="code_line">&nbsp;&nbsp;y0 := _y;</div><div class="code_line">&nbsp;&nbsp;color:=_color;</div><div class="code_line">&nbsp;&nbsp;radius := _r;</div><div class="code_line">&nbsp;&nbsp;QA:=_QA;</div><div class="code_line">&nbsp;&nbsp;wA:=_wA;</div><div class="code_line">&nbsp;&nbsp;AA:=_AA;</div><div class="code_line">&nbsp;&nbsp;zA:=_zA;</div><div class="code_line">&nbsp;&nbsp;FB:=_FB;</div><div class="code_line">&nbsp;&nbsp;LB:=_LB;</div><div class="code_line">&nbsp;&nbsp;GB := _GB;</div><div class="code_line">&nbsp;&nbsp;T := _T;</div><div class="code_line">&nbsp;&nbsp;FC := _FC;</div><div class="code_line">&nbsp;&nbsp;oB := _oB;</div><div class="code_line">&nbsp;&nbsp;yB := _yB;</div><div class="code_line">&nbsp;&nbsp;zA := _zA;</div><div class="code_line">&nbsp;&nbsp;FB := _FB;</div><div class="code_line">&nbsp;&nbsp;vB := _vB;</div><div class="code_line">&nbsp;&nbsp;HB := _HB;</div><div class="code_line">&nbsp;&nbsp;k := _k;</div><div class="code_line">&nbsp;&nbsp;LC := _LC;</div><div class="code_line">&nbsp;&nbsp;P := _P;</div><div class="code_line">&nbsp;&nbsp;S := _S;</div><div class="code_line">&nbsp;&nbsp;visible:=_visible;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TPlayer.Draw(Cs: TCanvas);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Ellipse(x0,y0,x0+radius*2,y0+radius*2);</div><div class="code_line">&nbsp;//Cs.Arc(x0,y0,x0+radius*2,y0+radius*2,radius,radius,radius,radius);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Repaint;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure GA();</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Player.QA := -1;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure a(mousex,mousey:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Player.QA := DC(mousex,mousey);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; if Player.QA &#60;&#62; -1 then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Player.T := Round(Sqrt(Math.Power(Player.FC - dt[Player.QA].x0, 2) +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Math.Power(Player.GB - dt[Player.QA].y0, 2)));</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">function DC(HC, p:Integer):Integer;</div><div class="code_line">var t1,t2,i:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;t1 := 1000000000;</div><div class="code_line">&nbsp;t2 := 0;</div><div class="code_line">&nbsp;for i:=0 to High(dt) do</div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Math.Power(HC - dt[i].x0,2) +</div><div class="code_line">&nbsp;&nbsp; &nbsp;Math.Power(p - dt[i].y0,2) &#60; t1 &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;t2 := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;t1 := Round(Power(HC - dt[i].x0, 2) + Power(p - dt[i].y0, 2));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if 1000000000 = t1 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;result:=-1;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;result:=t2;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormShow(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;//250 div 10</div><div class="code_line">Player:=TPlayer.Create(100,100,14,-1,0,0,50,10,0,</div><div class="code_line">0,0,0,0,0,15,0,250 div 10,0,1,1,clRed,True);</div><div class="code_line">&nbsp;</div><div class="code_line">dt[0]:=TDot.Create(75,75,8,25,0,clGreen,True);</div><div class="code_line">dt[1]:=TDot.Create(150,100,8,25,1,clGreen,True);</div><div class="code_line">dt[2]:=TDot.Create(300,125,8,25,1,clGreen,True);</div><div class="code_line">dt[3]:=TDot.Create(400,125,8,25,1,clGreen,True);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">Timer1.Enabled:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">mousedownevt:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">begin</div><div class="code_line">//ShowMessage(&#39;UP&#39;);</div><div class="code_line">mouseupevt := True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">if Key = vk_UP then</div><div class="code_line">&nbsp;upb:=false;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">if Key = vk_UP then</div><div class="code_line">&nbsp;upb:=true;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var pt:TPoint;</div><div class="code_line">a1:Integer;</div><div class="code_line">a2,m:Integer;</div><div class="code_line">mousex,mousey:Integer;</div><div class="code_line">a3:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;d:=1;</div><div class="code_line">if upb then</div><div class="code_line">&nbsp;&nbsp;d:=d*-1;</div><div class="code_line">&nbsp;</div><div class="code_line">Label1.Caption:=IntToStr(d);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">pt:=Form1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">//pt := Mouse.CursorPos;</div><div class="code_line">Form1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">Form1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">xmov := xmov+5;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">dt[0].Draw(Form1.Canvas);</div><div class="code_line">dt[1].Draw(Form1.Canvas);</div><div class="code_line">dt[2].Draw(Form1.Canvas);</div><div class="code_line">dt[3].Draw(Form1.Canvas);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">mousex := pt.X;</div><div class="code_line">mousey := pt.Y;</div><div class="code_line">&nbsp;</div><div class="code_line">if mousex &#60; 0 then</div><div class="code_line">&nbsp;&nbsp;mousex := 0;</div><div class="code_line">if mousey &#60; 0 then</div><div class="code_line">&nbsp;&nbsp;mousey := 0;</div><div class="code_line">&nbsp;</div><div class="code_line">Form1.Caption:=&#39;X= &#39;+IntToStr(mousex)+&#39; Y= &#39;+IntToStr(mousey);</div><div class="code_line">&nbsp;</div><div class="code_line">if mousedownevt = True then</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">a(mousex, mousey);</div><div class="code_line">Player.LB:=Player.QA;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">if (mouseupevt=True) and (Player.LB = Player.QA) or</div><div class="code_line">(Player.QA &#60;&#62; -1) and (dt[Player.QA].visible=false) then</div><div class="code_line">begin</div><div class="code_line">&nbsp;GA();</div><div class="code_line">&nbsp;Player.LB := Player.QA;</div><div class="code_line">end;</div><div class="code_line">&nbsp;mousedownevt := false;</div><div class="code_line">&nbsp;mouseupevt := false;</div><div class="code_line">&nbsp;Player.AA:=Player.AA+1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;if Player.AA &#62;= 30 div 10 then</div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Player.AA := Player.AA - 30 div 10;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Player.wA:=Player.wA+1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (Player.wA &#62;= 3) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.wA := 3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((2 = Player.wA) and (-1 = Player.QA)) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a(Player.zA, Player.FB);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.oB := Player.FC;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.yB := Player.GB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.HB := Player.LC;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.P := Player.P + Player.vB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.FC := Player.FC + Player.k;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.GB := Player.GB + Player.P;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.LC := Player.LC + Player.S;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if Player.QA &#60;&#62; -1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a1 := Round(dt[Player.QA].x0 + dt[Player.QA].k / 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a2 := Round(dt[Player.QA].y0 + dt[Player.QA].P / 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;m := Round(Sqrt(Power(Player.FC - a1*d, 2) + Power(Player.GB - a2*d, 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Player.FC := Round((Player.FC - a1) * Player.T div m + a1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Player.GB := Round((Player.GB - a2) * Player.T div m + a2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Player.LC := Round(ArcSin((Player.GB - a2) div Player.T)* 180 / Pi - 90);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Player.FC &#60; a1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.LC := Player.LC * -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Player.LC - Player.HB &#62; 180 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.HB := Player.HB + 360;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Player.HB - Player.LC &#62; 180 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.HB := Player.HB - 360;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.k := Player.FC - Player.oB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.P := Player.GB - Player.yB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.S := Player.LC - Player.HB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;end;</div><div class="code_line">// a3 := 30;</div><div class="code_line">&nbsp;Form2.Label1.Caption :=FloatToStr(Player.FC * Player.AA / 30);</div><div class="code_line">&nbsp;Player.x0 := Round(Player.FC * Player.AA / 30 * 10 + Player.oB * (1 - Player.AA / 30 * 10));</div><div class="code_line">&nbsp;Player.y0 := Round(Player.GB * Player.AA / 30 * 10 + Player.yB * (1 - Player.AA / 30 * 10));</div><div class="code_line">&nbsp;Player.Draw(Form1.Canvas);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;if Player.QA &#60;&#62; -1 then</div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Form1.Canvas.MoveTo(Round(Player.x0+Player.radius),Round(Player.y0+Player.radius/2));</div><div class="code_line">&nbsp;&nbsp; &nbsp;Form1.Canvas.LineTo(Round(dt[Player.QA].x0+dt[Player.QA].radius),Round(dt[Player.QA].y0+dt[Player.QA].radius));</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Form1.DoubleBuffered:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887595</guid>
        <pubDate>Sat, 11 Mar 2023 16:41:25 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887595</link>
        <description><![CDATA[macomics: А точно таймер не работает?<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TBall }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TBall = class</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;x0,y0,radius,SpeedX,SpeedY:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;color:TColor;</div><div class="code_line">&nbsp;&nbsp; public</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;constructor Create(_x,_y,_r,_speedx,_speedy:Integer;_color:TColor);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;procedure Draw(Cs:TCanvas);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Image1: TImage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Image1Paint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp; leftb,rightb,downb,upb : Boolean;</div><div class="code_line">&nbsp;&nbsp; ball:TBall;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.lfm}</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TBall.Create(_x,_y,_r,_speedx,_speedy:Integer;_color:TColor);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; inherited Create;</div><div class="code_line">&nbsp;&nbsp; x0:=_x;</div><div class="code_line">&nbsp;&nbsp; y0:=_y;</div><div class="code_line">&nbsp;&nbsp; radius:=_r;</div><div class="code_line">&nbsp;&nbsp; SpeedX:=_speedx;</div><div class="code_line">&nbsp;&nbsp; SpeedY:=_speedy;</div><div class="code_line">&nbsp;&nbsp; color:=_color;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TBall.Draw(Cs: TCanvas);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Form1.Image1.Canvas.Brush.Color := color;</div><div class="code_line">&nbsp;&nbsp; Form1.Image1.Canvas.Pen.Color := clBlack;</div><div class="code_line">&nbsp;&nbsp; Form1.Image1.Canvas.Ellipse(x0,y0,x0+radius,y0+radius);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; status: String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; status := FormatDateTime(&#39;YYYY-MM-DD hh:mm:ss&#39;, Now);</div><div class="code_line">&nbsp;&nbsp; Repaint;</div><div class="code_line">&nbsp;&nbsp; ball.x0 := ball.x0 + 5;</div><div class="code_line">&nbsp;&nbsp; if upb then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Label1.Caption:=&#39;True&#39; + status</div><div class="code_line">&nbsp;&nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Label1.Caption:=&#39;False &#39; + status;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Form1.DoubleBuffered := True;</div><div class="code_line">&nbsp;&nbsp; ball := TBall.Create(140,140,50,0,0,clRed);</div><div class="code_line">&nbsp;&nbsp; // Timer1.Enabled:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState</div><div class="code_line">&nbsp;&nbsp;);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; case key of</div><div class="code_line">&nbsp;&nbsp; VK_RIGHT: rightb := true;</div><div class="code_line">&nbsp;&nbsp; VK_LEFT: leftb := true;</div><div class="code_line">&nbsp;&nbsp; VK_UP: upb := true;</div><div class="code_line">&nbsp;&nbsp; VK_DOWN: downb := true;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; case Key of</div><div class="code_line">&nbsp;&nbsp; VK_RIGHT: rightb := false;</div><div class="code_line">&nbsp;&nbsp; VK_LEFT: leftb := false;</div><div class="code_line">&nbsp;&nbsp; VK_UP: upb := false;</div><div class="code_line">&nbsp;&nbsp; VK_DOWN: downb := false;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Image1Paint(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Image1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp; Image1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; ball.Draw(Image1.Canvas);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>У меня вот часики тикают.<br>
<br>
Скорее всего фокус ввода от формы съела кнопка и не проходят нажатия на клавиши.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887589</guid>
        <pubDate>Sat, 11 Mar 2023 13:00:21 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887589</link>
        <description><![CDATA[Katerina1993: <strong class='tag-b'>macomics</strong>, не знаю в чем дело? Пыталась воспользоваться вашим советом, но когда я переношу прорисовку в onPaint, таймер перестает работать. Код другого примера.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, ExtCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Image1: TImage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TBall = class</div><div class="code_line">&nbsp;&nbsp;x0,y0,radius,SpeedX,SpeedY:Integer;</div><div class="code_line">&nbsp;&nbsp;color:TColor;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; constructor Create(_x,_y,_r,_speedx,_speedy:Integer;_color:TColor);</div><div class="code_line">&nbsp;&nbsp; procedure Draw(Cs:TCanvas);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;leftb,rightb,downb,upb : Boolean;</div><div class="code_line">&nbsp;&nbsp;ball:TBall;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;&nbsp;constructor TBall.Create(_x,_y,_r,_speedx,_speedy:Integer;_color:TColor);</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp; &nbsp;x0:=_x;</div><div class="code_line">&nbsp;&nbsp; &nbsp;y0:=_y;</div><div class="code_line">&nbsp;&nbsp; &nbsp;radius:=_r;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SpeedX:=_speedx;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SpeedY:=_speedy;</div><div class="code_line">&nbsp;&nbsp; &nbsp;color:=_color;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;procedure TBall.Draw(Cs: TCanvas);</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; Form1.Image1.Canvas.Brush.Color := color;</div><div class="code_line">&nbsp;&nbsp; Form1.Image1.Canvas.Pen.Color := clBlack;</div><div class="code_line">&nbsp;&nbsp; Form1.Image1.Canvas.Ellipse(x0,y0,x0+radius,y0+radius);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;Label1.Caption:=&#39;False&#39;;</div><div class="code_line">// Form1.Image1.Repaint;</div><div class="code_line">// Repaint;</div><div class="code_line">&nbsp;ball.x0 := ball.x0 + 5;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;if upb then</div><div class="code_line">&nbsp;&nbsp;Label1.Caption:=&#39;True&#39;</div><div class="code_line">&nbsp;else</div><div class="code_line">&nbsp;&nbsp;Label1.Caption:=&#39;False&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormShow(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">//Form1.DoubleBuffered := True;</div><div class="code_line">ball := TBall.Create(140,140,50,0,0,clRed);</div><div class="code_line">Timer1.Enabled:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">case key of vk_RIGHT: rightb := true;</div><div class="code_line">vk_LEFT: leftb := true;</div><div class="code_line">vk_UP: upb := true;</div><div class="code_line">vk_DOWN: downb := true;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">case Key of</div><div class="code_line">vk_RIGHT: rightb := false;</div><div class="code_line">vk_LEFT: leftb := false;</div><div class="code_line">vk_UP: upb := false;</div><div class="code_line">vk_DOWN: downb := false;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;Image1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;Image1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">&nbsp;ball.Draw(Image1.Canvas);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887577</guid>
        <pubDate>Sat, 11 Mar 2023 08:57:29 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887577</link>
        <description><![CDATA[macomics: Мигает оно потому что вы опять всю перерисовку делаете в процедуре таймера.<br>
<br>
Включите Form1.DoubleBuffer := True; при создании окна и переместите код из TForm1.Timer1Timer в TForm1.FormPaint<br>
А в TForm1.Timer1Timer надо просто перерисовывать окно (Repaint)/<br>
<br>
Для того, чтобы шарик поднимался вверх просто уменьшайте длину верёвки. Сейчас она удлиняется за счёт разницы в расстоянии до точек зацепки<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">a1 := Round(dt[Player.QA].x0 + dt[Player.QA].k / 10);</div><div class="code_line">a2 := Round(dt[Player.QA].y0 + dt[Player.QA].P / 10);</div><div class="code_line">m := Round(Sqrt(Power(Player.FC - a1, 2) +</div><div class="code_line">Power(Player.GB - a2, 2)));</div></ol></div></div></div></div>Вот вычисляется расстояние от точки игрока до точки зацепки. Уменьшите значение m и он будет подниматься по верёвке.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887574</guid>
        <pubDate>Sat, 11 Mar 2023 05:32:00 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887574</link>
        <description><![CDATA[Feldsher: Шарик ведь уже качается? Делаете кнопку верх - длину веревки в минус]]></description>
        <author>Feldsher</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887567</guid>
        <pubDate>Fri, 10 Mar 2023 22:30:51 +0000</pubDate>
        <title>Как сделать подъем круга по линии учитывая движение самого круга в пространстве?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433590&amp;view=findpost&amp;p=3887567</link>
        <description><![CDATA[Katerina1993: Здравствуйте сделала такую вещь, что при клике по холсту высчитывается координаты ближайшей точки и круг цепляется веревкой за точки расположенные на холсте, разумеется при соединении точки с кругом сам круг начинает двигаться, держась за веревку. Другими словами круг начинает раскачиваться на веревке словно на паутине (Например Человек Паук 2002 года, там была сцена где Питер Паркер сделал первый полет на паутине врезавшись в рекламный щит). На всякий случай прикладываю гифку.<br>
(Немножко мигает).<br>
<img class='tag-img' src='https://i.ibb.co/Cw613Ct/2.gif' alt='user posted image'><br>
Мне нужно чтобы при нажатии кнопки на клавиатуре вверх(up) объект подымался по веревки при этом сохраняя силу движения (раскачивания) на веревки.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">mousedownevt:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">mouseupevt := True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">…</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var pt:TPoint;</div><div class="code_line">a1:Integer;</div><div class="code_line">a2,m:Integer;</div><div class="code_line">&nbsp;</div><div class="code_line">var mousex,mousey:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">if upb then</div><div class="code_line">&nbsp;&nbsp;Form1.Caption:=&#39;True&#39;</div><div class="code_line">else</div><div class="code_line">&nbsp;&nbsp;Form1.Caption:=&#39;False&#39;;</div></ol></div></div></div></div><br>
Код полностью.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls, StdCtrls, Unit2,Math;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;TPlayer = class</div><div class="code_line">&nbsp;private</div><div class="code_line">&nbsp;&nbsp;x0,y0,radius,QA,wA,AA,zA,FB,LB,GB,T,FC,oB,yB,vB,HB,k,LC,P,S:Integer;</div><div class="code_line">&nbsp;&nbsp;visible:Boolean;</div><div class="code_line">&nbsp;&nbsp;color:TColor;</div><div class="code_line">&nbsp;public</div><div class="code_line">&nbsp;&nbsp;constructor Create(_x,_y,_r,_QA,_wA,_AA,_zA,_FB,_LB,_GB,_T,_FC,_oB,_yB,_vB,_HB,_k,_LC,_P,_S:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">&nbsp;&nbsp;procedure Draw(Cs:TCanvas);</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;TDot = class</div><div class="code_line">&nbsp;private</div><div class="code_line">&nbsp;&nbsp;x0,y0,radius,k,p:Integer;</div><div class="code_line">&nbsp;&nbsp;visible:Boolean;</div><div class="code_line">&nbsp;&nbsp;color:TColor;</div><div class="code_line">&nbsp;public</div><div class="code_line">&nbsp;&nbsp;constructor Create(_x,_y,_r,_k,_p:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">&nbsp;&nbsp;procedure Draw(Cs:TCanvas);</div><div class="code_line">end;</div><div class="code_line">&nbsp;procedure a(mousex,mousey:Integer);</div><div class="code_line">&nbsp;function DC(HC, p:Integer):Integer;</div><div class="code_line">&nbsp;procedure GA();</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;Player: TPlayer;</div><div class="code_line">&nbsp;&nbsp;dt: Array[0..3] Of TDot;</div><div class="code_line">&nbsp;&nbsp;dt1:TDot;</div><div class="code_line">&nbsp;&nbsp;dt2:TDot;</div><div class="code_line">&nbsp;&nbsp;dt3:TDot;</div><div class="code_line">&nbsp;&nbsp;dt4:TDot;</div><div class="code_line">&nbsp;&nbsp;xmov:Integer = 0;</div><div class="code_line">&nbsp;&nbsp;ymov:Integer = 0;</div><div class="code_line">&nbsp;&nbsp;mousedownevt:Boolean;</div><div class="code_line">&nbsp;&nbsp;mouseupevt:Boolean;</div><div class="code_line">&nbsp;&nbsp;upb:Boolean;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TDot.Create(_x,_y,_r,_k,_p:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;x0:=_x;</div><div class="code_line">&nbsp;&nbsp;y0:=_y;</div><div class="code_line">&nbsp;&nbsp;radius:=_r;</div><div class="code_line">&nbsp;&nbsp;color:=_color;</div><div class="code_line">&nbsp;&nbsp;k:=_k;</div><div class="code_line">&nbsp;&nbsp;p:=_p;</div><div class="code_line">&nbsp;&nbsp;visible:=_visible;</div><div class="code_line">end;</div><div class="code_line">procedure TDot.Draw(Cs: TCanvas);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Form2.Memo1.Lines.Add(IntToStr(radius));</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Cs.Arc(x0,y0,x0+radius*2,y0+radius*2,radius,radius,radius,radius);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TPlayer.Create(_x,_y,_r,_QA,_wA,_AA,_zA,_FB,_LB,_GB,_T,_FC,_oB,_yB,_vB,_HB,_k,_LC,_P,_S:Integer;_color:TColor;_visible:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x;</div><div class="code_line">&nbsp;&nbsp;y0 := _y;</div><div class="code_line">&nbsp;&nbsp;color:=_color;</div><div class="code_line">&nbsp;&nbsp;radius := _r;</div><div class="code_line">&nbsp;&nbsp;QA:=_QA;</div><div class="code_line">&nbsp;&nbsp;wA:=_wA;</div><div class="code_line">&nbsp;&nbsp;AA:=_AA;</div><div class="code_line">&nbsp;&nbsp;zA:=_zA;</div><div class="code_line">&nbsp;&nbsp;FB:=_FB;</div><div class="code_line">&nbsp;&nbsp;LB:=_LB;</div><div class="code_line">&nbsp;&nbsp;GB := _GB;</div><div class="code_line">&nbsp;&nbsp;T := _T;</div><div class="code_line">&nbsp;&nbsp;FC := _FC;</div><div class="code_line">&nbsp;&nbsp;oB := _oB;</div><div class="code_line">&nbsp;&nbsp;yB := _yB;</div><div class="code_line">&nbsp;&nbsp;zA := _zA;</div><div class="code_line">&nbsp;&nbsp;FB := _FB;</div><div class="code_line">&nbsp;&nbsp;vB := _vB;</div><div class="code_line">&nbsp;&nbsp;HB := _HB;</div><div class="code_line">&nbsp;&nbsp;k := _k;</div><div class="code_line">&nbsp;&nbsp;LC := _LC;</div><div class="code_line">&nbsp;&nbsp;P := _P;</div><div class="code_line">&nbsp;&nbsp;S := _S;</div><div class="code_line">&nbsp;&nbsp;visible:=_visible;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TPlayer.Draw(Cs: TCanvas);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//x0 := ;</div><div class="code_line">&nbsp;// y0 := y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Arc(x0,y0,x0+radius*2,y0+radius*2,radius,radius,radius,radius);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var pt:TPoint;</div><div class="code_line">a1:Integer;</div><div class="code_line">a2,m:Integer;</div><div class="code_line">&nbsp;</div><div class="code_line">var mousex,mousey:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">if upb then</div><div class="code_line">&nbsp;&nbsp;Form1.Caption:=&#39;True&#39;</div><div class="code_line">else</div><div class="code_line">&nbsp;&nbsp;Form1.Caption:=&#39;False&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">pt:=Form1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">//pt := Mouse.CursorPos;</div><div class="code_line">Form1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">Form1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">xmov := xmov+5;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">dt[0].Draw(Form1.Canvas);</div><div class="code_line">dt[1].Draw(Form1.Canvas);</div><div class="code_line">dt[2].Draw(Form1.Canvas);</div><div class="code_line">dt[3].Draw(Form1.Canvas);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">mousex := pt.X;</div><div class="code_line">mousey := pt.Y;</div><div class="code_line">&nbsp;</div><div class="code_line">if mousex &#60; 0 then</div><div class="code_line">&nbsp;&nbsp;mousex := 0;</div><div class="code_line">if mousey &#60; 0 then</div><div class="code_line">&nbsp;&nbsp;mousey := 0;</div><div class="code_line">&nbsp;</div><div class="code_line">Form1.Caption:=&#39;X= &#39;+IntToStr(mousex)+&#39; Y= &#39;+IntToStr(mousey);</div><div class="code_line">&nbsp;</div><div class="code_line">if mousedownevt = True then</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">a(mousex, mousey);</div><div class="code_line">Player.LB:=Player.QA;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">if (mouseupevt=True) and (Player.LB = Player.QA) or</div><div class="code_line">(Player.QA &#60;&#62; -1) and (dt[Player.QA].visible=false) then</div><div class="code_line">begin</div><div class="code_line">&nbsp;GA(); </div><div class="code_line">&nbsp;Player.LB := Player.QA;</div><div class="code_line">end;</div><div class="code_line">&nbsp;mousedownevt := false;</div><div class="code_line">&nbsp;mouseupevt := false;</div><div class="code_line">&nbsp;Player.AA:=Player.AA+1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;if Player.AA &#62;= 30 div 10 then</div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Player.AA := Player.AA - 30 div 10;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Player.wA:=Player.wA+1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (Player.wA &#62;= 3) then </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.wA := 3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((2 = Player.wA) and (-1 = Player.QA)) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a(Player.zA, Player.FB);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.oB := Player.FC;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.yB := Player.GB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.HB := Player.LC;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.P := Player.P + Player.vB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.FC := Player.FC + Player.k;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.GB := Player.GB + Player.P;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Player.LC := Player.LC + Player.S;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if Player.QA &#60;&#62; -1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a1 := Round(dt[Player.QA].x0 + dt[Player.QA].k / 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a2 := Round(dt[Player.QA].y0 + dt[Player.QA].P / 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;m := Round(Sqrt(Power(Player.FC - a1, 2) +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Power(Player.GB - a2, 2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Player.FC := Round((Player.FC - a1) * Player.T div m + a1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Player.GB := Round((Player.GB - a2) * Player.T div m + a2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Player.LC := Round(ArcSin((Player.GB - a2) div Player.T)* 180 / Pi - 90);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Player.FC &#60; a1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.LC := Player.LC * -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Player.LC - Player.HB &#62; 180 then </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.HB := Player.HB + 360;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Player.HB - Player.LC &#62; 180 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.HB := Player.HB - 360;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.k := Player.FC - Player.oB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.P := Player.GB - Player.yB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player.S := Player.LC - Player.HB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;Form2.Label1.Caption :=FloatToStr(Player.FC * Player.AA / 30);</div><div class="code_line">&nbsp;Player.x0 := Round(Player.FC * Player.AA / 30 * 10 + Player.oB * (1 - Player.AA / 30 * 10));</div><div class="code_line">&nbsp;Player.y0 := Round(Player.GB * Player.AA / 30 * 10 + Player.yB * (1 - Player.AA / 30 * 10));</div><div class="code_line">&nbsp;Player.Draw(Form1.Canvas);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;if Player.QA &#60;&#62; -1 then </div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;Form1.Canvas.MoveTo(Round(Player.x0+Player.radius),Round(Player.y0+Player.radius/2));</div><div class="code_line">&nbsp;&nbsp; &nbsp;Form1.Canvas.LineTo(Round(dt[Player.QA].x0+dt[Player.QA].radius),Round(dt[Player.QA].y0+dt[Player.QA].radius));</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure GA();</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Player.QA := -1;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure a(mousex,mousey:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Player.QA := DC(mousex,mousey);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; if Player.QA &#60;&#62; -1 then </div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Player.T := Round(Sqrt(Math.Power(Player.FC - dt[Player.QA].x0, 2) +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Math.Power(Player.GB - dt[Player.QA].y0, 2)));</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">function DC(HC, p:Integer):Integer;</div><div class="code_line">var t1,t2,i:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;t1 := 1000000000;</div><div class="code_line">&nbsp;t2 := 0;</div><div class="code_line">&nbsp;for i:=0 to High(dt) do</div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Math.Power(HC - dt[i].x0,2) +</div><div class="code_line">&nbsp;&nbsp; &nbsp;Math.Power(p - dt[i].y0,2) &#60; t1 &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;t2 := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;t1 := Round(Power(HC - dt[i].x0, 2) + Power(p - dt[i].y0, 2));</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if 1000000000 = t1 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;result:=-1;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;result:=t2;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormShow(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">Player:=TPlayer.Create(100,100,14,-1,0,0,50,10,0,</div><div class="code_line">0,0,0,0,0,15,0,250 div 10,0,1,1,clRed,True);</div><div class="code_line">&nbsp;</div><div class="code_line">dt[0]:=TDot.Create(75,75,8,25,0,clRed,True);</div><div class="code_line">dt[1]:=TDot.Create(150,100,8,25,1,clRed,True);</div><div class="code_line">dt[2]:=TDot.Create(300,125,8,25,1,clRed,True);</div><div class="code_line">dt[3]:=TDot.Create(400,125,8,25,1,clRed,True);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">Timer1.Enabled:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">mousedownevt:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">begin</div><div class="code_line">//ShowMessage(&#39;UP&#39;);</div><div class="code_line">mouseupevt := True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">if Key = vk_UP then</div><div class="code_line">&nbsp;upb:=false;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">if Key = vk_UP then</div><div class="code_line">&nbsp;upb:=true;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	