Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2014, 21:05
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию Изолинии

Необходимо нарисовать изолинии 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  
Старый 22.05.2014, 21:44
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
function Poten(x,y:extended):integer;
 var
   q,r : extended;
 begin
   r:=sqrt(sqr(x-100)+sqr(y-100));
   Result:=Round(q/r);
 end;
Ну здесь переменная q не проинициализирована.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 22.05.2014, 21:54
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию

заряд=)
Ну да ладно. А остальное правильно?
Ответить с цитированием
  #4  
Старый 23.05.2014, 01:19
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Насчет алгоритма не в курсе, а вот синтаксически верно. Но будет очень тормознуто, т.к. Image1.Canvas.Pixels[x,y] - ну очень небыстрая вещь.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 23.05.2014, 10:45
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Более правильно как-то так

Код:
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  
Старый 23.05.2014, 11:18
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию

Деление на ноль выдает=(
Ответить с цитированием
  #7  
Старый 23.05.2014, 13:37
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Вы бы лучше в алгоритм вникли и тогда бы вы без труда избавились от ситуации с делением на нуль.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #8  
Старый 25.05.2014, 15:06
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию

да,да.
Я просто так написал. Сразу же подправил.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter