Тема: курсор у колі
допоможіть розібратися з програмою. вона повинна адекватно показувати номер вершини. і якщо трикутик і трапеції правильно показують, то квадрат - не зовсім. потрібен свіжий погляд і свіжа думка. вже замаївся.
ось коди:
процедури
{=========================================================}
function NumPoint(n:integer;det:array of point;xcurf,ycurf:real):integer;
var Nmin,i:integer;
dmin,d:real;
begin
dmin:=1000;//sqrt(sqr(det[0].x-xcurf)+sqr(det[0].y-ycurf));
Nmin:=0;
for i:=0 to n-1 do begin
d:=sqrt(sqr(det[i].x-xcurf)+sqr(det[i].y-ycurf));
if d<dmin then begin
dmin:=d; Nmin:=i;
end;
end;
NumPoint:=nmin;
end;
{=========================================================}
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
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 (xcur<=det[i].x*mxy+xce+R*cos(phi)) and
(ycur<=-det[i].y*mxy+yce+R*sin(phi)) 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;
{=========================================================}
і виклику
procedure TfMain.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
edit1.Clear;
xcurf:=Xc[nd_n]+(x-xe)/mashim1;
ycurf:=Yc[nd_n]-(y-ye)/mashim1;
if button=mbleft then
nv:=NumPoint(kilkpointdet[nd_n],dets[nd_n],xcurf,ycurf);
if button=mbright then
nv:=NumPoint2(kilkpointdet[nd_n],dets[nd_n],mashim1,xe,ye,20,x,y);
fMain.Caption:=inttostr(nv);
//ChangePointPos(kilkpointdet[nd_n],dets[nd_n],nv,x,y);
//DelPoint(kilkpointdet[nd_n],dets[nd_n],nv);
//image1.Picture:=nil; //íà ÷èñòîìó ìàëþíêó çîáðàçèòè ëèøå íåðóõîìó äåòàëü
//graphim1(kilkpointdet[nd_n],dets[nd_n],mashim1,xe,ye,0,0,1,1);
end;