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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2013, 15:55   #1
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
Сообщение Delphi, Оптимизация раскроя листа произвольной формы на детали произвольного размера

Добрый день. Задача следующая: есть лист (размеры задаем), есть детали прямоугольной формы (размеры задаем), как их разместить на листе с учётом отступов между ними и от края наиболее оптимально?
__________
Пока что не знаю с чего начать вообще....прошу помочь ссылками, литературой или примерами подобных задач. В гугле смотрела...нашла вот это: http://matica.org.ua/issledovanie-op...malniy-raskroy
помогите пожалуйста понять формулы на реально вводимых данных....
______________
а вообще было бы шикарно пример хоть самого простенького исходника на эту тему....чтобы глянуть с чего вообще начинать....
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 29.09.2013, 16:34   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

В принципе, задача так и решается. Если Вам нужна программа, то вот она.
В бесплатном варианте, она решает уравнения с 15-ю ограничениями и переменными.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.09.2013, 18:13   #3
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

программа, но мне нужно ее написать самой...
Проблемы:
1) не совсем понятен процесс математических расчетов
2) вот получу я количество прямоугольников одного размера и другого, которые поместятся на лист, а как графически оформить?
т.е. должно быть что-то вроде "вводим размеры, нажимаем "рассчитать" и перед нами графическая область с чертежом этих деталий + последующий вывод ее например в ворд".....
как-то так...

Цитата:
Обозначения:
J —индекс материала, J = 1,..., П;
K —индекс вида заготовки, K = 1, ..., Q;
I — индекс способа раскроя единицы материала, I = 1,..., Р;
АIjk — количество (целое число) заготовок вида K, полученных при раскрое единицы J-го материала I-м способом;
Bk — число заготовок вида K В комплекте, поставляемом заказ*чику;
Dj — количество материала J-го вида;
Xji — количество единицу J-го материала, раскраиваемых по I-му способу (интенсивность использования способа раскроя);
Cji — величина отхода, полученного при раскрое единицы J-го материала по I-му способу;
У — число комплектов заготовок различного вида, поставля*емых заказчику.
J - если 1 лист, то =1
K - допустим детали 2-х видов, значит K1 и K2
I - ?
АIjk - как узнать то???
Bk - 2
Dj - 1
Xji - 1
Cji - ? (надо узнать)
У - ?
___________________
:conf used:
Есть задача - реши ее!

Последний раз редактировалось Stilet; 29.09.2013 в 19:51.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 27.10.2013, 16:48   #4
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Добрый день.
Имеется 2 DBGrida на форме, каждый из которых соединен со своим ZQuery.
В левом (первом) гриде данные о размерах листа и их количестве, в правом (втором) - данные о деталях.
По этим данным должен производиться чертеж раскроя листа материала....
По идеи вариант раскроя должен быть произведен именно оптимальны способом, но пока что он просто "рисует (чертит)" детали на листе...
Ниже приведен код...
Возможно ли его "усовершенствование" для приближения именно к оптимальному варианту раскроя??
Да и вообще какие у кого идеи и советы на эту тему?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
  cxStyles, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinBlueprint,
  dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide,
  dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy,
  dxSkinGlassOceans, dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian,
  dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins,
  dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green,
  dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black,
  dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinPumpkin, dxSkinSeven,
  dxSkinSevenClassic, dxSkinSharp, dxSkinSharpPlus, dxSkinSilver,
  dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008,
  dxSkinTheAsphaltWorld, dxSkinsDefaultPainters, dxSkinValentine,
  dxSkinVS2010, dxSkinWhiteprint, dxSkinXmas2008Blue, dxSkinscxPCPainter,
  cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData,
  cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxGrid, ExtCtrls, Menus, Grids,
  DBGrids, StdCtrls, ZAbstractRODataset, ZAbstractDataset, ZDataset,
  ZAbstractConnection, ZConnection, DBCtrls, cxContainer, cxImage, Buttons,
  PropFilerEh, PropStorageEh;

type
  TForm1 = class(TForm)
    mm1: TMainMenu;
    pnl1: TPanel;
    mniN1: TMenuItem;
    mniN2: TMenuItem;
    mniN3: TMenuItem;
    GroupBox1: TGroupBox;
    DBGrid1: TDBGrid;
    GroupBox2: TGroupBox;
    dbgrd1: TDBGrid;
    ZConnection1: TZConnection;
    ZQuery1: TZQuery;
    DataSource1: TDataSource;
    Image2: TImage;
    ZQuery2: TZQuery;
    DataSource2: TDataSource;
    BitBtn1: TBitBtn;

    procedure BitBtn1Click(Sender: TObject);
    procedure mniN3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  Form1: TForm1;
    L:Integer;
    H:Integer;
    Q:Integer;
    ld:Integer;
    hd:Integer;
    P:Integer;
    j:Integer;
    i:Integer;
    X,Y, X2, Y2:Integer;
    a: integer;

implementation

{$R *.dfm}




procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  while not ZQuery1.Eof do
  begin
   H := ZQuery1.FieldByName('x_list').Value;// ширина листа
   L := ZQuery1.FieldByName('y_list').Value;// длина листа

   Image2.Width:= H;  
   Image2.Height := L;  
   X:= 0;     //начальные координаты
   Y:= 0;
   i:= 0;      //количество деталей

   ZQuery2.First;
   while not ZQuery2.Eof do
    begin
     hd := ZQuery2.FieldByName('x_det').Value;   // ширина детали
     ld := ZQuery2.FieldByName('y_det').Value;   // длина детали
     P  := ZQuery2.FieldByName('k_det').Value;   // количество деталей
     X2 := 0;
     Y2 := 0;
     a := 5; // отступ от края листа и между деталями
       while (Y < L) and ((Y2+ld) < L) and not ZQuery2.Eof do
       begin
         while (X < H) and ((X2+hd) < H) and not ZQuery2.Eof do
         begin
          Image2.Canvas.Rectangle((X+a),(Y+a),(hd+X2),(ld+Y2));
           i:= i+1;  //количество деталей
           X := X+hd; //перемещаемся вправо
           X2 := X2+hd;
          if i = P then
          begin
           ZQuery2.Next;
           i := 0;
           hd := ZQuery2.FieldByName('x_det').Value;   
           ld := ZQuery2.FieldByName('y_det').Value;   
           P  := ZQuery2.FieldByName('k_det').Value;   
          end;

         end;
         Y := Y+ld; //переход на новый ряд
         X := 0;
         X2 := 0;
         Y2 := Y2+ld;
       end;
     ZQuery2.Next;
    end;
    ZQuery1.Next;
  end;

end;
procedure TForm1.mniN3Click(Sender: TObject);
begin
 Close;
end;

end.
Есть задача - реши ее!

Последний раз редактировалось ТипичныйСтудент; 27.10.2013 в 16:50.
ТипичныйСтудент вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы произвольного размера Dimaska Помощь студентам 0 31.03.2012 16:21
Организовать ввод 2-х вещественных матрицы произвольного размера(Delphi) aleks155 Фриланс 3 11.01.2012 23:07
Из Delphi в Word.Формирование произвольной формы документа Streetmagic Общие вопросы Delphi 1 14.04.2011 13:21
Оптимизация раскроя в Excel Анита Помощь студентам 1 04.05.2010 17:28
Печать произвольного размера HP6720 Помощь студентам 6 04.02.2009 18:38