Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 6

Некоторые окружности выходят за границы окна

18.05.2016, 21:40. Показов 1481. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
PROGRAM kalejdaskop;
USES
  graphABC;
TYPE
  kale = record
  x,
  y,
  xx,
  r:integer;
end;
CONST
  kol=20;
  xs=640;
  ys=480;
  rad=30;
VAR 
  var_kale: array [1..kol] of kale;
  i: integer;
BEGIN
  setwindowsize(xs,ys);
  centerwindow;
  for i:=1 to kol do
  BEGIN
    var_kale[i].x:=random(windowwidth-rad)+windowwidth div 2 + rad;
    var_kale[i].y:=random(windowheight-rad)+rad;
    var_kale[i].r:=random(rad)+4;
    var_kale[i].xx:=windowwidth div 2 - (var_kale[i].x - windowwidth div 2);
  end;
  for i:=1 to kol do
  BEGIN
    setbrushcolor(rgb(random(256),random(256),random(256)));
    setpencolor(rgb(random(256),random(256),random(256)));
    circle(var_kale[i].x,var_kale[i].y,var_kale[i].r);
    circle(var_kale[i].xx,var_kale[i].y,var_kale[i].r);
  end;
end.
Вопрос:

Почему при запуске программы некоторые окружности могут выйти за пределы окна? У меня уже дико бомбит, помогите, пожалуйста!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2016, 21:40
Ответы с готовыми решениями:

Приложение, отображающее движение окружности вдоль границы окна
приложение, отображающее движение окружности вдоль границы окна. Учтите возможность изменения размеров окна. помогите пожалуйста

Создайте приложение, отображающее движение окружности вдоль границы окна
Помогите пожалуйста. Создайте приложение, отображающее движение окружности вдоль границы окна. Учтите возможность изменения размеров...

CSS: списки выходят за границы текста
Добрый вечер. Столкнулась с тем, что на компьютере списки отображаются нормально, на мобильных - уезжают за границы. Подскажите, что...

10
 Аватар для Cyber_Monster_
148 / 129 / 155
Регистрация: 22.03.2016
Сообщений: 502
18.05.2016, 23:49
Сложно у тебя как-то...

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
uses ABCObjects, GraphABC;
const
  rmn = 5;  //Минимальный радиус окружности
  rmx = 40;  //Максимальный радиус окружности
type
  circles = class
    public x: integer;
    public y: integer;
    public r: integer;
    public c_obj_: ABCObjects.CircleABC;
    public procedure Print_(cl: integer);
      begin
        self.c_obj_:= ABCObjects.CircleABC.Create(x,y,r,System.Drawing.Color.FromArgb(cl));
      end;
    constructor create(x,y,r,cl: integer);
      begin
        self.x:= x;
        self.y:= y;
        self.r:= r;
        Print_(cl);
      end;
    public procedure erase_();
      begin
        self.c_obj_.Destroy;
        ABCObjects.RedrawObjects
      end;
  end;
var
  obj_: array of circles:= new circles[0];
procedure main();
  begin
    var o:= ABCObjects.TextABC.Create(1,1,12,'Введите количество окружностей');
    for var i:= 0 to ReadInteger() do
      begin
        SetLength(obj_,obj_.Length+1);
        obj_[i]:= circles.create(Random(graphABC.Window.Width-rmx*2+1)+rmx,Random(graphABC.Window.Height-rmx*2+1)+rmx,Random(rmx-rmn*2+1)+rmn,Random(integer.MaxValue));
      end;
    //Этот блок можно опустить
    o.Destroy;
    ABCObjects.RedrawObjects;
    var i: integer:= 0;
    While true do
      begin
        if i >= obj_.Length
          then
            i:= 0;
        obj_[i].erase_;
        obj_[i]:= circles.create(Random(graphABC.Window.Width-rmx*2+1)+rmx,Random(graphABC.Window.Height-rmx*2+1)+rmx,Random(rmx-rmn*2+1)+rmn,Random(integer.MaxValue));
        i += 1;
      end;
    //Этот блок можно опустить
  end;
begin
  Randomize;
  main;
end.
Цитата Сообщение от Дядя Вася Посмотреть сообщение
Почему при запуске программы некоторые окружности могут выйти за пределы окна? У меня уже дико бомбит, помогите, пожалуйста!
Радиус - полудиаметр, скорее всего ты не умножил его на 2 в проверке(генерации).
0
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 6
19.05.2016, 17:16  [ТС]
Я же попросил просто помочь сделать так, чтобы окружности не пересекались и не выходили за рамки.
Зачем мне это?! Совершенно не то, что я просил!
0
 Аватар для Cyber_Monster_
148 / 129 / 155
Регистрация: 22.03.2016
Сообщений: 502
19.05.2016, 17:29
Дядя Вася,
Цитата Сообщение от Cyber_Monster_ Посмотреть сообщение
Радиус - полудиаметр, скорее всего ты не умножил его на 2 в проверке(генерации).
0
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 6
19.05.2016, 17:34  [ТС]
Я тебя удивлю, но я ничего не пропускал.
Посмотри, какие у меня чудеса: он генерирует их вообще где-то далеко.
Миниатюры
Некоторые окружности выходят за границы окна   Некоторые окружности выходят за границы окна  
0
 Аватар для Cyber_Monster_
148 / 129 / 155
Регистрация: 22.03.2016
Сообщений: 502
19.05.2016, 17:50
Замени 24, 25 и 26 на:
Pascal
1
2
3
    var_kale[i].x:=Random(graphABC.Window.Width-rad+1)+rad;
    var_kale[i].y:=Random(graphABC.Window.Height-rad*2+1)+rad;
    var_kale[i].r:=random(rad)+1
0
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 6
19.05.2016, 18:06  [ТС]
Ты думаешь, что я не понял о чём ты писал раньше?
Это просто не-ра-бо-та-ет!
0
 Аватар для Cyber_Monster_
148 / 129 / 155
Регистрация: 22.03.2016
Сообщений: 502
19.05.2016, 18:18
Не поделил размер экрана на 2.
Pascal
1
2
3
var_kale[i].x:=Random(trunc(graphABC.Window.Width/2)-rad*2+1)+rad;
    var_kale[i].y:=Random(graphABC.Window.Height-rad*2+1)+rad;
    var_kale[i].r:=random(rad-7)+7; //7 - минимальный радиус, rad - максимальный радиус
Так вроде все ок
0
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 6
19.05.2016, 22:31  [ТС]
Не работает. Забей, чувак. Пусть кто-нибудь другой ответит...
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
20.05.2016, 10:20
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
program kalejdaskop;
 
USES
  graphABC;
type
  kale = record
    x,
    y,
    xx,
    r: integer;
  end;
 
const
  kol = 20;
  xs = 640;
  ys = 480;
  rad = 30;
 
var
  var_kale: array [1..kol] of kale;
  i: integer;
 
begin
  randomize;
  setwindowsize(xs, ys);
  centerwindow;
  for i := 1 to kol do
  begin
    var_kale[i].x := random(windowwidth div 2, windowwidth - rad);
    var_kale[i].y := random(rad, windowheight - rad);
    var_kale[i].r := random(rad) + 4;
    var_kale[i].xx := windowwidth div 2 - (var_kale[i].x - windowwidth div 2);
  end;
  for i := 1 to kol do
  begin
    setbrushcolor(rgb(random(256), random(256), random(256)));
    setpencolor(rgb(random(256), random(256), random(256)));
    circle(var_kale[i].x, var_kale[i].y, var_kale[i].r);
    circle(var_kale[i].xx, var_kale[i].y, var_kale[i].r);
  end;
end.
Добавлено через 2 минуты
Это я не смотрел.
Цитата Сообщение от Дядя Вася Посмотреть сообщение
окружности не пересекались
Только
Цитата Сообщение от Дядя Вася Посмотреть сообщение
не выходили за рамки
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
21.05.2016, 12:40
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
Это я не смотрел.
Я посмотрел. Как-то вот так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
program kalejdaskop;
 
USES
  graphABC;
type
  kale = record
    x,
    y,
    xx,
    r: integer;
  end;
 
const
  kol = 20;
  xs = 640;
  ys = 480;
  rad = 30;
 
var
  var_kale: array [1..kol] of kale;
  i, j: integer;
  good : boolean;
 
begin
  randomize;
  setwindowsize(xs, ys);
  centerwindow;
  for i := 1 to kol do
  begin
    repeat
    var_kale[i].x := random(windowwidth div 2, windowwidth - rad);
    var_kale[i].y := random(rad, windowheight - rad);
    var_kale[i].r := random(rad) + 4;
    good := true;
    for j := 1 to i - 1 do
      good := good and 
        (sqrt(sqr(var_kale[i].x - var_kale[j].x) + sqr(var_kale[i].y - var_kale[j].y)) > var_kale[i].r + var_kale[j].r);
    until good;
    var_kale[i].xx := windowwidth div 2 - (var_kale[i].x - windowwidth div 2);
  end;
  for i := 1 to kol do
  begin
    setbrushcolor(rgb(random(256), random(256), random(256)));
    setpencolor(rgb(random(256), random(256), random(256)));
    circle(var_kale[i].x, var_kale[i].y, var_kale[i].r);
    circle(var_kale[i].xx, var_kale[i].y, var_kale[i].r);
  end;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2016, 12:40
Помогаю со студенческими работами здесь

Поля раздела выходят за границы области печати, продолжить?
здравствуйте в коде Application.PrintOut fileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentContent, Copies:=1,...

У меня поля див и эты строки выходят за границы дива
У меня поля див и эты строки выходят за границы дива. Если текст с пробелами то все нормално. Но допустим...

Высота от верхней границы элемента до верхней границы видимого клиентского окна
Здравствуйте, такой вопрос, как высчитать количество пикселей допустим от верхней границы элемента до начала окна браузера, например при...

Как отсечь линии, которые выходят за границу окна?
Как отсечь линии, которые выходят за границу окна? Например, есть фигура, но некоторые ее части выходят за экран, как их обрезать. Уже есть...

При печати пропадают некоторые символы, границы таблиц, страницы целиком. ProXpress M3820D
Проблема появилась после переустановки Windows XP на Windows 7 (но это не точно). Принтер подключен к компу№1(WinXP) по USB (3 метра...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru