|
Вопрос # 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;
- begin
- fMain.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)) then
- for 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: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|