2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 
Сообщение15.01.2008, 02:28 
Заслуженный участник


18/03/07
1068
photon писал(а):
в SVG из ps можно в CorelDraw перегнать. Насчет остальных форматов я не знаю.

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

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

 Профиль  
                  
 
 
Сообщение15.01.2008, 12:18 


29/09/06
4552
luitzen писал(а):
Нет ли у вас на примете какого-нибудь «конвертера»...


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


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

 Профиль  
                  
 
 
Сообщение15.01.2008, 14:26 
Заслуженный участник


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

 Профиль  
                  
 
 
Сообщение15.01.2008, 16:13 


29/09/06
4552
Детали других форматов подзабыл, но ImageMagic показалась умной программой, и если выходной формат допускает векторность, то, полагаю, её разрушать не будут. Желающий постичь детали на ихнем форуме и в ФАКах найдёт нужную информацию.

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

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

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

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

 Профиль  
                  
 
 
Сообщение17.01.2008, 01:39 
Заслуженный участник


18/03/07
1068
Доложу о результатах и обещаю больше не оффтопить.

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 


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

Слышал, будто усложнять --- просто, а упрощать --- сложно. Поэтому предлагаю усложнить тот пример, который привёл ИСН, и рассмотреть фракталы, получаются в результате замены отрезка на ломаную. Можно задавать такой фрактал массивом промежуточных точек:
Код:
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 


29/09/06
4552
Ну, собственно, чо тут добавить? Пытаюсь вспомнить --- чо там Державин учудил, когда Пушкин ему на экзамене стихи свои прочитал? Расплакался и убежал из класса? :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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group