Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2014, 22:08   #1
Chester751
Пользователь
 
Регистрация: 08.05.2012
Сообщений: 27
По умолчанию Заполнение окружности окружностями меньшего радиуса

Ребят, помогите пожалуйста! Не знаю просто с чего начать) или у кого исходник есть похожий) суть задачи заключается в следующем: Заполнить окружность большего радиуса одинаковыми окружностями меньшего радиуса. причем надо заполнять рандомно. окружности не должны пересекаться, но прижиматься друг к другу поплотнее) или поясните как делать, а то я ваще не въезжаю как сделать такой генератор. нужно для курсовой...=(
Chester751 вне форума Ответить с цитированием
Старый 09.01.2014, 23:24   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

язык, среда разработки, на чём рисуете окружности, примерный эскиз, как Вы себе представляете "окружности должны прижиматься друг к другу поплотнее", в чём заключается "рандомность" внутренних окружностей - тогда будет повод для разговора...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.01.2014, 23:38   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Чет кажется, что на любом языке рандомность и прижиматься друг к другу поплотнее не совместимые понятия. Рандомно можно забить непересекающимися окружностями, насчет поплотнее - как получится. Заполнение закончится тогда, когда места не останется. И держать для этого двумерный массив координат, куда можно поместить центр следующей окружности. В котором и выбирать рандомно. Выбрав - исключать для следующего выбора эту точку и окружающие по радиусу точки. Примерно так. Лучше даже не массив, а список
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.01.2014 в 23:41.
Аватар вне форума Ответить с цитированием
Старый 09.01.2014, 23:47   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вот, одну положили. А вторую как можно?
Только в положение 1 или 2, или можно 3 ?
Изображения
Тип файла: jpg окр.jpg (6.2 Кб, 144 просмотров)
type_Oleg вне форума Ответить с цитированием
Старый 09.01.2014, 23:57   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот, вот!
А я думаю, что внутренние окружности дожны иметь разный (случайный) размер.
впрочем, хотелось бы услышать мнение автора топика...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.01.2014, 00:08   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Не! Серж у меня заразился в задании сказано, что маленькие окружности имеют одинаковый радиус. А вот его, наверное, и нужно рандомно генерировать..

Я бы выбирал рандомную точку на окружности и рисовал окружность.. Затем брал ще одну точку на окружности и сдвигал ее пока эти две окружности не будут соприкасаться.. Вот так мы заполним первый ряд. А дальше надо думать.

Последний раз редактировалось Poma][a; 10.01.2014 в 00:10.
Poma][a вне форума Ответить с цитированием
Старый 10.01.2014, 19:02   #7
Chester751
Пользователь
 
Регистрация: 08.05.2012
Сообщений: 27
По умолчанию

ну например как здесь : http://www2.stetson.edu/~efriedma/cirincir/

я даже не знаю...=(
хотя б как сделать генератор=(

среда программирования делфи... или паскаль (немножко ещё знаю си и ассемблер - но думаю что в них не разберусь)... мне главное научиться делать такое или что нить подобное=)

то есть вот в делфи я кинул на форму button, image, ну и естественно edit (куда писать радиус маленьких окружностей)

Затем програмный сам код и сразу первая сложность(в смысле не знаю как это реализовать):после рисования большой окружности рисуем 1-ую маленькую окружность, её координаты центра выбираются РАНДОМНО внутри области большой окружности - как это всё реализовать?

сложность номер 2:после того как рисуется 1-ая маленькая окружность, вторая рисуется рядом с ней, относительно её расположения(в противном случае цикл заканчивается) - как написать проверку на наложение двух окружностей?

То есть должно получиться такое: вводится радиус маленькой окружности, затем кнопка для рисования этого всего. Рисуется это всё в image.

Последний раз редактировалось Stilet; 10.01.2014 в 22:38.
Chester751 вне форума Ответить с цитированием
Старый 10.01.2014, 20:32   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от Chester751 Посмотреть сообщение
- как написать проверку на наложение двух окружностей? ...
Рисование двух окружностей.
Код:
 Image1.Canvas.Ellipse(x1,y1,x2,y2);
 Image1.Canvas.Ellipse(x3,y3,x4,y4);
При равных диаметрах всех маленьких окружностей:
x1-x2=x3-x4=y1-y2=y3-y4 = R
Вот и выводите отсюда условие для соприкосновения окружностей. Расстояние между центрами должно быть равно 2R (соприкасаются) или хотя бы не менее 2R
Изображения
Тип файла: jpg окру.jpg (8.2 Кб, 117 просмотров)

Последний раз редактировалось type_Oleg; 10.01.2014 в 20:37.
type_Oleg вне форума Ответить с цитированием
Старый 10.01.2014, 22:28   #9
Chester751
Пользователь
 
Регистрация: 08.05.2012
Сообщений: 27
Вопрос

пока сделал вот что

больше не знаю

P.S. там формула длинная с корнем - это типа проверка на то что не вылезал за пределы большой окружности

Последний раз редактировалось Chester751; 11.01.2014 в 21:36.
Chester751 вне форума Ответить с цитированием
Старый 20.02.2014, 20:27   #10
Chester751
Пользователь
 
Регистрация: 08.05.2012
Сообщений: 27
По умолчанию Массив

Ребят, помогите пожалуйста с массивом! или с кодом, как его улучшить!

Задание по курсовой! вообщем суть такая: набить маленькими шариками огромный шар чтоб шарики внутри не пересекались и не выходили за границу, но находились в нём плотненько - то есть чтобы не оставалось места где бы ещё можно было поместить шарик. короче нужно только найти координаты этих шаров! я попробовал так сделать, но массив нужно тут побольше (а комп с массивом больше 40000 не хочет работать). посоветуйте что сделать!

или же как код улучшить!

вот собственно код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  mas,mas1 : array[1..3,1..30000] of integer;
  j, m,b, d: Integer;
  x,y,k,r,z,kk,ii,i: Integer;
  a ,teta : Extended;
   fi ,dx: Real;
   ver: Boolean;
   im,predel: integer;

begin

  with StringGrid1 do
  for i:=FixedCols to ColCount-1 do
  for j:=FixedRows to RowCount-1 do
    Cells[i, j]:='';



  R1:=(TrackBar2.Position);
  R2:=(TrackBar3.Position);
begin
  nn:=1;
   Randomize;
  d:=1;
 // predel:= 18000;
  predel:= Round(Sqr(R1*R1)/Sqr(R2*R2));

  for im:=1 to predel do
  begin
    x:=Random(2*R1-R2)-R1;
    y:=Random(2*R1-R2)-R1;
    z:=Random(2*R1-R2)-R1;
        if (sqr(x)+sqr(y)+sqr(z))<=Sqr(R1-R2) then
    begin
      mas[1,d]:=x;
      mas[2,d]:=y;
      mas[3,d]:=z;
      d:=d+1;
    end;
 end;

    m:=0;

     for ii:=1 to d-1 do
  begin
    ver:=false;
    //Проверяем очередную окружность на непересечение с уже нарисованными
    for j:=1 to m do
    if sqr(mas1[1,j] - mas[1,ii])+sqr(mas1[2,j] - mas[2,ii])+sqr(mas1[3,j] - mas[3,ii])<=Sqr(2*R2) then
    begin
      ver:=True; //пересекается
      break;
    end;

    if Not ver then
    //если не пересекается ни с одной ранее нарисованной
    begin
      inc(m);
      mas1[1,m]:=mas[1,ii];
      mas1[2,m]:=mas[2,ii];
      mas1[3,m]:=mas[3,ii];
    
    

    stringgrid1.Cells[0,nn]:=IntToStr(nn);
    stringgrid1.Cells[1,nn]:=IntToStr(mas1[1,m]);
    stringgrid1.Cells[2,nn]:=IntToStr(mas1[2,m]);
    stringgrid1.Cells[3,nn]:=IntToStr(mas1[3,m]);

    nn:=nn+1;
    end;
  end;


    



        if (sqr(x)+sqr(y)+sqr(z))<=Sqr(R1-R2) then
    begin
    stringgrid1.Cells[0,nn]:=IntToStr(nn);
    stringgrid1.Cells[1,nn]:=IntToStr(x);
    stringgrid1.Cells[2,nn]:=IntToStr(y);
    stringgrid1.Cells[3,nn]:=IntToStr(z);
    nn:=nn+1;
    end;



end;
Chester751 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти взаимное расположение окружности радиуса R с центром в точке (x0, y0) и точки А с координатами (x1, y1). Dimazde Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2013 08:58
графическое прилодение с окружностями Deman1986 Win Api 8 14.04.2013 10:04
программа с окружностями денис133 Помощь студентам 1 03.07.2011 22:37
VBA. Excel. определить сколько треугольников лежит внутри окружности радиуса R с центром вначале координат. Dus master Помощь студентам 6 20.06.2011 01:48
Зарисовать весь экран окружностями. vereney Паскаль, Turbo Pascal, PascalABC.NET 13 10.04.2011 20:28