Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 453

/ вопрос решён /

Здравствуйте, уважаемые эксперты!

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

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. function NumPoint2(n:integer;det:array of point;mxy,xce,yce,R,xcur,ycur:real):integer;
  2. var xq,yq,Nmin,i,ro:integer;
  3. xr,yr,phi:real;
  4. begin
  5. fMain.Edit2.Text:=floattostr(det[0].x*mxy+xce+R*cos(phi))+' '+floattostr(-det[0].y*mxy+yce+R*sin(phi))+' ';
  6. fMain.Edit2.Text:=fMain.Edit2.Text+floattostr(det[1].x*mxy+xce+R*cos(phi))+' '+floattostr(-det[1].y*mxy+yce+R*sin(phi))+' ';
  7. if ((xcur>=det[i].x*mxy+xce-R) and (ycur>=-det[i].y*mxy+yce-R)) or
  8. ((xcur<=det[i].x*mxy+xce+R) and (ycur<=-det[i].y*mxy+yce+R)) then
  9. for i:=0 to n-1 do begin
  10. for ro:=0 to 360 do begin
  11. phi:=ro*pi/180;
  12. xr:=(det[i].x*mxy+xce+R*cos(phi));
  13. yr:=(-det[i].y*mxy+yce+R*sin(phi));
  14. xq:=round(xr);
  15. yq:=round(yr);
  16. fmain.image1.canvas.Pixels[Xq,Yq]:=clgreen;
  17. if ((phi<=90) or (phi>=270)) and ((phi<=180))then
  18. if (xcur<=xr) and (ycur<=yr) then Nmin:=i;
  19. if ((phi>90) or (phi<270)) and ((phi>180))then
  20. if (xcur>=xr) and (ycur>=yr) then Nmin:=i;
  21. if nmin>=n-1 then nmin:=nmin-(n-1);
  22. end;
  23. fMain.Edit1.Text:=fMain.Edit1.Text+floattostr(det[i].x)+floattostr(det[i].y)+inttostr(i)+' ';//
  24.  
  25. end;
  26. NumPoint2:=nmin;
  27. end;


toro1 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: toro1 (статус: Посетитель)
Вопрос отправлен: 28 июня 2013, 18:03
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 1 июля 2013, 18:35; участников в обсуждении: 2.
Drinkenz

Drinkenz (статус: 1-ый класс), 1 июля 2013, 13:24 [#1]:

насчет стоки №19 вкурсе что phi у тебя в радианах?
Drinkenz

Drinkenz (статус: 1-ый класс), 1 июля 2013, 13:42 [#2]:

Nmin в начале не инициализирована поэтому функция часто возвращает мусор
i в начале не инициализирована, строка №7 лишена всякого смысла
Drinkenz

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

toro1 (статус: Посетитель), 1 июля 2013, 18:35 [#4]:

phi изменить на ro не заметил
Nmin инициализировать
i надо заменить на другую переменную
очень дельный советы
большое спасибо

18 сентября 2013, 09:44: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.02 сек.