| 
| 
 | Вопрос # 6 453/ вопрос решён / | 
 |  Здравствуйте, уважаемые эксперты! 
 уже запарился искать ошибку. нужно свежее мнение. вот смотрите
 есть программа, которая должна показывать номера вершин и производить некоторые действия с ними.
 я застрял на номере. я хочу, чтоб если попали в кружок высветился номер а если ннет- первоначчальное название формы
 код и программа приллагается
 заранее благодарю за советы
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим function NumPoint2(n:integer;det:array of point;mxy,xce,yce,R,xcur,ycur:real):integer;var xq,yq,Nmin,i,ro:integer;    xr,yr,phi:real;beginfMain.Edit2.Text:=floattostr(det[0].x*mxy+xce+R*cos(phi))+'
'+floattostr(-det[0].y*mxy+yce+R*sin(phi))+' ';fMain.Edit2.Text:=fMain.Edit2.Text+floattostr(det[1].x*mxy+xce+R*cos(phi))+'
'+floattostr(-det[1].y*mxy+yce+R*sin(phi))+' ';if ((xcur>=det[i].x*mxy+xce-R) and (ycur>=-det[i].y*mxy+yce-R)) or   ((xcur<=det[i].x*mxy+xce+R) and (ycur<=-det[i].y*mxy+yce+R)) thenfor i:=0 to n-1 do begin for ro:=0 to 360 do begin  phi:=ro*pi/180;  xr:=(det[i].x*mxy+xce+R*cos(phi));  yr:=(-det[i].y*mxy+yce+R*sin(phi));  xq:=round(xr);  yq:=round(yr);  fmain.image1.canvas.Pixels[Xq,Yq]:=clgreen;  if ((phi<=90) or (phi>=270)) and ((phi<=180))then  if (xcur<=xr) and (ycur<=yr) then Nmin:=i;  if ((phi>90) or (phi<270)) and ((phi>180))then  if (xcur>=xr) and (ycur>=yr) then Nmin:=i;  if nmin>=n-1 then nmin:=nmin-(n-1);                           end;  fMain.Edit1.Text:=fMain.Edit1.Text+floattostr(det[i].x)+floattostr(det[i].y)+inttostr(i)+' ';//                       end;NumPoint2:=nmin;end;
|  |   Вопрос задал: toro1 (статус: Посетитель)Вопрос отправлен: 28 июня 2013, 18:03
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 1 июля 2013, 18:35; участников в обсуждении: 2. 
|   | Drinkenz (статус: 1-ый класс), 1 июля 2013, 13:24 [#1]:насчет стоки №19 вкурсе что phi у тебя в радианах? |  
|   | Drinkenz (статус: 1-ый класс), 1 июля 2013, 13:42 [#2]:Nmin в начале не инициализирована поэтому функция часто возвращает мусор i в начале не инициализирована, строка №7 лишена всякого смысла
 |  
|   | Drinkenz (статус: 1-ый класс), 1 июля 2013, 13:47 [#3]:13 строка. yr:=(-det[i].y*mxy+yce+R*sin(phi)); зачем здесь минус?
 21 строка. осталась для меня загадкой.
 оставшийся код можно значительно упростить
 например вместо
 
 if ((phi<=90) or (phi>=270)) and ((phi<=180))then
  if (xcur<=xr) and (ycur<=yr) then Nmin:=i;
  if ((phi>90) or (phi<270)) and ((phi>180))then
  if (xcur>=xr) and (ycur>=yr) then Nmin:=i;достаточно 
  case ro of
   0..90: if (xcur<=xr) and (ycur<=yr) then Nmin:=i;
   270..360: if (xcur>=xr) and (ycur>=yr) then Nmin:=i;
 end; |  
|   | toro1 (статус: Посетитель), 1 июля 2013, 18:35 [#4]:phi изменить на ro не заметил Nmin инициализировать
 i надо заменить на другую переменную
 очень дельный советы
 большое спасибо
 |  18 сентября 2013, 09:44: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |