2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 
Сообщение15.01.2008, 02:28 
photon писал(а):
в SVG из ps можно в CorelDraw перегнать. Насчет остальных форматов я не знаю.

Sorry, а в чем проблема именно с этим тигером?

Спасибо, photon.
А тигр… ну, просто нравится он мне. Давным-давно мечтаю посмотреть на него в браузере. Говорю же, вопрос глупый :roll: .

 
 
 
 
Сообщение15.01.2008, 12:18 
luitzen писал(а):
Нет ли у вас на примете какого-нибудь «конвертера»...


Алексей К. писал(а):
Попробуйте ImageMagic, convert.exe


В соседней теме (DWG$\to$EPS) этот мой совет оказался не очень уместен, а для конвертации из PS в другие форматы вполне годится.

 
 
 
 
Сообщение15.01.2008, 14:26 
Спасибо, Алексей К.
К сожалению, в ближайшее время не будет возможности опробовать ни CorelDraw, ни ImageMagic В связи с последним хотел бы подчеркнуть, что от «браузерного» формата я тоже ожидаю «векторности»: Кривые Безье и всё такое. В растре как-то неинтересно…

 
 
 
 
Сообщение15.01.2008, 16:13 
Детали других форматов подзабыл, но ImageMagic показалась умной программой, и если выходной формат допускает векторность, то, полагаю, её разрушать не будут. Желающий постичь детали на ихнем форуме и в ФАКах найдёт нужную информацию.

Возвращаясь к конверторам, напомню (или, может, этого кто-то не знает?), что GSview itself может работать как конвертор.

Добавлено спустя 16 минут 5 секунд:

Алексей К. писал(а):
Желающий постичь детали на ихнем форуме и в ФАКах найдёт нужную информацию.

...Написал это, и вспомнил, как искал периодическое решение дифура, а мне говорили "полазь там-то, почитай то, сё, и это", а мне так хотелось, чтоб кто-то прочитавший и то и сё и это ткнул пальчиком конкретно. Не дождался, решил сам...
Может, Вы бы и дождались, и кто-то ткнул бы --- такой, мол конкренто такой конвертор, в такой формат. Только темку надо было бы сделать соответствующую, вероятнось бы увеличилась...

 
 
 
 
Сообщение17.01.2008, 01:39 
Доложу о результатах и обещаю больше не оффтопить.

ImageMagick в ответ на convert tiger.eps tiger.svg говорит convert: no image vector graphics `tiger.svg'.
В ответ же на convert tiger.eps tiger.svg он создает растровый ps-файл.

Но вот pstoedit вполне справляется с конвертацией PS в SVG. Правда, цвета перевирает. Тем не менее, разве этот * тигр не прекрасен?

* Нужно открыть файл index.html при помощи Mozilla Firefox или Opera.

 
 
 
 фракталы (замена отрезка на ломаную)
Сообщение19.01.2008, 00:39 
С комплексными числами понятно. Конечно, умножение нужно было склеить в одну функцию.
Алексей К. писал(а):
Каку-нибудь более интересную задачку, которая появится у Вас, обсудить будет интереснее. Могут появиться решения/конструкции, которые "обычному прграммисту" в голову не прийдут.

Слышал, будто усложнять --- просто, а упрощать --- сложно. Поэтому предлагаю усложнить тот пример, который привёл ИСН, и рассмотреть фракталы, получаются в результате замены отрезка на ломаную. Можно задавать такой фрактал массивом промежуточных точек:
Код:
mpoints = [xm1, ym1, ..., xmk, ymk] // для краткости, [m1, ..., mk]

На каждом шаге рекурсии отрезок [beg, end] заменяется на отрезки
Код:
TS(beg, end, 0, m1), TS(beg, end, m1, m2), ..., TS(beg, end, mk, 1),
где функция TS (TransformSegment) действует по правилу
TS(beg, end, m1, m2) --> beg+m1*(end-beg), beg+m2*(end-beg)

Привожу свой набросок программы. Усложнял в несколько этапов. В окончательной версии насекомые ускользали от глаз больше часа. Пришлось сжульничать: pstack stop. :)
Код:
%!PS-Adobe-2.0
/XYadd { % x1 y1 x2 y2 --> x1+x2 y1+y2
  3 -1 roll add 3 1 roll add exch } bind def
/XYsub { % x1 y1 x2 y2 --> x1-x2 y1-y2
  3 -1 roll sub neg 3 1 roll sub exch } bind def
/XYmul {% x1 y1 x2 y2  --> (x1+I*y1)*(x2+I*y2)
   4 copy   3 -1 roll mul neg 3 1 roll mul add
   5 1 roll 4 -1 roll mul     3 1 roll mul add
} bind def

/IsBigSegment { % x1 y1 x2 y2 --> (x2-x1)^2+(y1-y2)^2 >= 2
  XYsub dup mul exch dup mul add 2 ge
} bind def

/TransformPoint { % beg end m --> beg+(end-beg)*m
  4 2 roll 5 index 5 index XYsub XYmul XYadd
} bind def

/TransformSegment { % beg end m1 m2 --> p1 p2,
                    % where p1=beg+(end-beg)*m1, p2=beg+(end-beg)*m2
  8 4 roll 4 copy % m1 m2 beg end beg end
  12 -2 roll      % m2 beg end beg end m1
  TransformPoint  % m2 beg end p1
  8 2 roll        % p1 m2 beg end
  6 -2 roll       % p1 beg end m2
  TransformPoint  % p1 p2
} bind def

/GetXY { % ar i --> ar[i] ar[i+1]
  2 copy get 3 1 roll 1 add get
} bind def

/DrawSegment { % beg end -> (draw segment)
  moveto lineto stroke } bind def

/SubstAndCall { % mpoints beg end --> (subst and call DrawFractal)
  0 0 % mpoints beg end mstart
  0  2  8 index length 2 sub { % mpoints beg end mprev curindex
    7 index exch GetXY % mpoints beg end mprev mcur
    9 4 roll           % mprev mcur mpoints beg end
    7 copy             % mprev mcur mpoints beg end mcur mpoints beg end
    16 -4 roll         % mpoints beg end mcur  mpoints beg end mprev mcur
    TransformSegment   % mpoints beg end mcur  mpoints newbeg newend
    DrawFractal        % mpoints beg end mcur
  } for
  1 0 % mpoints beg end mlast mfinish
  TransformSegment     % mpoints newbeg newend
  DrawFractal
} bind def

/DrawFractal { % mpoints beg end --> (draw fractal)
  4 copy IsBigSegment { SubstAndCall } { DrawSegment pop } ifelse
} bind def

% Koch:
[0.333333 0   0.5 0.288675   0.666667 0] 100 650 500 650 DrawFractal
% Simple example:
[.4 .2   .6 -.2] 100 500 500 500 DrawFractal
% Levi:
[.5 .5] 200 150 400 150 DrawFractal
showpage

 
 
 
 
Сообщение20.01.2008, 18:32 
Ну, собственно, чо тут добавить? Пытаюсь вспомнить --- чо там Державин учудил, когда Пушкин ему на экзамене стихи свои прочитал? Расплакался и убежал из класса? :wink:

Моя попытка раскрасить картинку красивого эффекта не дала.
Но трюк этот с циклической заменой цвета стоит взять на заметку.
Код:
/DrawSegment { % beg end -> (draw segment)
  moveto lineto stroke currentrgbcolor 3 1 roll setrgbcolor  % NEW
} bind def

1 0 0 setrgbcolor .7 setlinewidth                            % NEW
% Koch:
[0.333333 0   0.5 0.288675   0.666667 0] 100 650 500 650 DrawFractal
...............................................


Ну, ошибку всего одну увидел --- /IsBigSegment. Правильно, по-моему, /IsSegmentLong. :P

Предложу несколько отладочных трюков.
Читать сообщение об ошибке из GSView/Message_Window бывает утомительно, хочется прграммку-"студию", с отладчиком, трассировкой, и проч прибамбасами. Такие есть, мне для какой-то шабашки заказчик как-то покупал за довольно много фунтов стерлингов. Давно не интересовался этим вопросом, сегодняшняя ситуация мне неизвестна.

Если у Вас установлен только GSView, попробуйте установить также полноценный GhostScript. Там 2 программки gswin32.exe и gswin32c.exe . Они дают некий консоль, в котором можно прямо набивать PS-код, и в другом окошке смотреть имаж.
В gswin32c.exe (c = console) консоль удобнее, позволяет стрелочками доставть предыдущие команды итд... Удобно, ежели, напимер, забыли параметры команды, пробовать всякие варианты с консоля.
Запустить с консоля некий готовый файл можно постсрипт-командой run:
(string_with_your_file_name.eps) run
(C:/qqq/test.ps) run


Вот процедурка /Pstack, более удобная чем системный pstack:

Код:
/Pstack {%
  count [exch dup (items on stack:) 3 -1 roll % S0 S1 ... S_n-1 [N (txt) N
      dup 3 add exch                          % S0 S1 ... S_n-1 [ i=n+3 n
      {dup index dup [ eq {pop (mark)} if exch} repeat % replace -mark- by string "mark"
      pop] == flush
} bind def


Вот процедурка, печатающая N последних элементов стека с комментарем. Типа
(XYZ:) 3 Args
выдаёт
[(XYZ:) 4.12334 9999 -1.0000]

Код:
/Args {%  Title N
       %  "Title" is either /Name or (String)
    [ 3 1 roll        % a1 ... aN [ /T N
      dup 2 add exch  % a1 ... aN [ /T N+2 N
      {dup index exch} repeat pop
    ] == flush
} bind def


Успехов.

Добавлено спустя 14 минут 14 секунд:

Делать stop, чтобы увидеть содержимое Message window, не обязательно.
Наставьте, где надо, этих отладочных печатей, вызовите Message window кнопкой М.
Простейшая отладочная печать ---
(Some text 1) ==
(можно добавить flush) типа "это место прошли не сломавшись".

Добавлено спустя 30 минут 3 секунды:

Структура моих eps файлов примерно такова:

Код:
%!PS-Adobe-2.0
%%BoundingBox: 0 0 560 168

(MyLibrary.ps)  runlibfile              %  <--- собственно, это показываю

BeginFig  (процедурка избиблиотеки)
[-2.3 -1.9 2.3 2.3] 100 PicBegin
/TI 12 PicFont
.6 PicLW
(x) (y) PicAxes

TractrixDict begin
0 1000 0.7 DrawTractrix
end
EndFig


В Латехе этот пролог (библиотека) задаётся вначала командой \special...
а команда runlibfile в этом же прологе переопределяется в пустышку (runlibfile=pop).
Таким образом, когда я смотрю картинку в GSView, runlibfile работает как надо, а при интерпретации внутри латеха (100 таких картинок) уже не мешает.

 
 
 [ Сообщений: 22 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group