Телескопы покупают здесь


A A A A Автор Тема: Линия "Терминатора"  (Прочитано 13950 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #120 : 24 Мар 2010 [00:49:50] »
Какая интересная конструкция.
Цитата
L:= i * 90 / Rf + 90{(Fz)} ;
Лишний цикл
Цитата
for ug:=0 to 360 do
И по-моему третий с конца end стоит не на своем месте. Наверное. Что-то дельфи страшно нечитабельный  :)
А что рисует-то в результате?
« Последнее редактирование: 24 Мар 2010 [01:31:22] от Tau »

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #121 : 24 Мар 2010 [07:18:51] »
L:= i * 90 / Rf + 90{(Fz)}  - это просто я переменную фазы временно закрыл, а постоянно 90 градусов поставил.
for ug:=0 to 360 do - здесь я сам сомневаюсь, наверное и без него обрабатываться приведение к 360 будет.
на счет end - нужно проверить.
Он (дельфи) то читабельный, это я танцор такой :P
Может я чего то не понял, но закрашивание пиксела с координатами X1, Y1 как происходит? У меня если рисовать круг, то красится тока белым, фаз что то нет. :-[ ну я думаю все же я танцор пока... :'(
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #122 : 24 Мар 2010 [08:17:57] »
procedure TForm_Terminator.Button3Click(Sender: TObject);
var
i,j,R,xm,ym,x1,y1,ug:integer;
Rf,L:Double;
Color:TColor;
 begin     // НАЧАЛО КОДА ПРОЦЕДУРЫ
  R:=70;
  xm:=40;
  ym:=40;
  for j:= -R to R do
   begin                                   //   ЦИКЛ ПО j ОТКРЫТ
     for i:= -R to R do
        begin                                  //  ЦИКЛ ПО i ОТКРЫТ
        if (i *i + j *j) < (R *R) then
          begin                            //   БЛОК УСЛОВИЯ ОТКРЫТ
            Rf:= Sqrt(R*R - j*j);                 
            L:= i * 90 / Rf + 90{(Fz)} ;
            if L>360 then  L:=L-360 ;
            if L<0 then   L:=L+360;
            if (L <= 90) or (L >= 270) then
               Color:= clBlack                             
            else
                Color:=clWhite;                             
             x1:= i + xm;                                   
             y1:= -j + ym;
             Form_Terminator.Image1.Canvas.Pixels[x1, y1]:=Color;
           end; // БЛОК УСЛОВИЯ ЗАКРЫТ
     end; // ЦИКЛ ПО i ЗАКРЫТ
  end; // ЦИКЛ ПО j ЗАКРЫТ
//  Тут вставить рисование окружности с черным контуром радиусом R с центром в точке (xm,ym)
end; // ОКОНЧАНИЕ КОДА ПРОЦЕДУРЫ

Дельфячьего компиллятора у меня нет, но логически должно быть как-то так.  ;D

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #123 : 24 Мар 2010 [17:07:23] »
 :) Все работает  :D У меня просто Faza на этапе расчета была в радианах.  :-[ А, я уж думал все кандушки :'(, по шагам, в расчете  определил  ...).
Спасибо всем, принцип понятен, теперь попробую сделать красиво. ;)
Celestron SkyMaster 15x70 Binoculars

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #124 : 24 Мар 2010 [17:36:24] »
Вам Tau с нас пиво пора требовать за науку. :)

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #125 : 24 Мар 2010 [20:29:44] »
kress, а вы солнечные часы победили, или забили на это дело?  ;)

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #126 : 24 Мар 2010 [22:35:08] »
 :) Ну kress на счет пива не уверен, а вот букетик хороших цветов , бочкообразную бутылочку шампани и 100% уважения неплохо бы было организовать!
Celestron SkyMaster 15x70 Binoculars

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #127 : 25 Мар 2010 [14:08:27] »
kress, а вы солнечные часы победили, или забили на это дело?  ;)

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

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #128 : 25 Мар 2010 [22:22:46] »
Уважаемая Tau, а как бы код мне подправить чтоб красилось только там, где  тень нужна?
А, то ненужный участок белым то тоже красится и соответственно ту картинку которую я вставил полностью закрывает. 
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #129 : 25 Мар 2010 [23:17:32] »
RN3QGA, рисуйте только те пикселы, цвет которых определился как черный.
Вместо
Цитата
Form_Terminator.Image1.Canvas.Pixels[x1, y1]:=Color;
вставить
Цитата
if Color= clBlack then  Form_Terminator.Image1.Canvas.Pixels[x1, y1]:=Color;

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #130 : 25 Мар 2010 [23:36:32] »
 :-[ Да я тоже так же думал и пробовал , но не работает корректно. Что то либо в условии не так, либо с графической частью нужно по другому, а то получается , что допустим растущая луна , полнолуние, а потом бах и все черным, или еще не дошло до полнолуния, а потом шарах следующая тень лезет, в общем надо разобраться. :-[
Celestron SkyMaster 15x70 Binoculars

Tau

  • Гость
Re: Линия "Терминатора"
« Ответ #131 : 27 Мар 2010 [03:37:22] »
искать ошибку методом исключения:
а) проверить фазу, правильно ли она вычисляется для разных дней
б) проверить рисование фазы, правильно ли рисуется черно-белая схема
в) если а и б правильно, то остается графика

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #132 : 28 Мар 2010 [12:32:01] »
 ^-^ Черно белый вариант у меня работает четко,   буду разбираться с графикой.
Celestron SkyMaster 15x70 Binoculars

Оффлайн kress

  • **
  • Сообщений: 57
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от kress
Re: Линия "Терминатора"
« Ответ #133 : 28 Мар 2010 [15:06:19] »
:-[ Да я тоже так же думал и пробовал , но не работает корректно. Что то либо в условии не так, либо с графической частью нужно по другому, а то получается , что допустим растущая луна , полнолуние, а потом бах и все черным, или еще не дошло до полнолуния, а потом шарах следующая тень лезет, в общем надо разобраться. :-[

Нет возможности попробовать алгоритм, но Вы попробуйте в дебагере посмотреть на значения переменных, их округление и т.п. возможно идет где-то неправильное округлении или рассчитываете в плавающей точке, а потом переводите в целое, а нужно округлять по "правильному"(т.е. если больше 0.5 ..ну понимаете) и т.п.    Удачи.

Оффлайн RN3QGAАвтор темы

  • **
  • Сообщений: 84
  • Благодарностей: 1
  • Не может быть так плохо, чтобы не было еще хуже !
    • Сообщения от RN3QGA
Re: Линия "Терминатора"
« Ответ #134 : 28 Мар 2010 [22:15:36] »
 :) Да,   Kress!  , все я прекрасно понимаю, дело в графике, но в черно белом в се работает как часы,  сейчас пытаюсь в Опенжл разобраться ????
« Последнее редактирование: 29 Мар 2010 [16:39:56] от RN3QGA »
Celestron SkyMaster 15x70 Binoculars