![]() |
|
|
#1
|
|||
|
|||
![]() Необходимо нарисовать изолинии 4 зарядов расположенных на углах прямоугольника.
Посмотрел книжку:КОМПЬЮТЕРНЫЕ ТЕХНОЛОГИИ В ФИЗИКЕ 77 стр. И не могу разобраться. Сделал по примеру: Код:
function Poten(x,y:extended):integer; var q,r : extended; begin r:=sqrt(sqr(x-100)+sqr(y-100)); Result:=Round(q/r); end; procedure TForm1.Button1Click(Sender: TObject); var x,y,p:integer; begin x:=0; while x < 100 do begin y:=0; while y < 100 do begin p:=Poten(x,y); if p>0 then begin Image1.Canvas.Pixels[x,y]; y:=y+1; end; if p<=0 then begin Image1.Canvas.Pixels[x,y]; y:=100; end; end; x:=x+1; end; end; |
#2
|
||||
|
||||
![]() Код:
function Poten(x,y:extended):integer; var q,r : extended; begin r:=sqrt(sqr(x-100)+sqr(y-100)); Result:=Round(q/r); end; — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
![]() заряд=)
Ну да ладно. А остальное правильно? |
#4
|
||||
|
||||
![]() Насчет алгоритма не в курсе, а вот синтаксически верно. Но будет очень тормознуто, т.к. Image1.Canvas.Pixels[x,y] - ну очень небыстрая вещь.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() Более правильно как-то так
Код:
function Poten ( x,y:extended; // координаты пробной точки xq,yq:extended; // координаты заряда q:extended; // заряд ):extended; var r : extended; begin r:=sqrt(sqr(x-xq)+sqr(y-yq)); Result:=q/r; end; const // заменить на нужные значения зарядов Q1 = 1; Q2 = 1; Q3 = 1; Q4 = 1; procedure TForm1.Button1Click(Sender: TObject); var x,y:integer; p:extended; begin for x:=0 to 100 do begin for y:=0 to 100 do begin p:= Poten(x,y,100,100,Q1) + Poten(x,y,100, 0,Q2) + Poten(x,y, 0,100,Q3) + Poten(x,y, 0, 0,Q4) ; if p>0 then begin Image1.Canvas.Pixels[x,y] := clWhite; end else begin Image1.Canvas.Pixels[x,y] := clBlack; end; end; end; end; |
#6
|
|||
|
|||
![]() Деление на ноль выдает=(
|