Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: ka3kap (09.11.2007 в 08:21) Прямую задаю в виде: y=kx+c; участок отображения - x1,x2,y1,y2. Отображаются только пиксели, имеющие точный аналог за прямой.
int l,h,x1,y1,x2,y2; float k,c; float k1, c1; l=Image->Width; h=Image->Height; if(K->Text=="K") K->Text=1; if(C->Text=="C") C->Text=0; if(X1->Text=="X1") X1->Text=50; if(Y1->Text=="Y1") Y1->Text=10; if(X2->Text=="X2") X2->Text=60; if(Y2->Text=="Y2") Y2->Text=20; int center_i=l/2; int center_j=h/2; k=StrToFloat(K->Text); c=StrToFloat(C->Text); x1=center_i+StrToInt(X1->Text); x2=center_i+1+StrToInt(X2->Text); y1=center_j-StrToInt(Y2->Text); y2=center_j+1-StrToInt(Y1->Text); Image->Canvas->Brush->Color=clWhite; Image->Canvas->Rectangle(0,0,l-1,h-1); Image->Canvas->Brush->Color=clGreen; Image->Canvas->MoveTo(0,h/2); Image->Canvas->LineTo(l-1,h/2); Image->Canvas->MoveTo(l/2,0); Image->Canvas->LineTo(l/2,h-1); Image->Canvas->Rectangle(x1,y1,x2,y2); c1=-(y1-center_j)+(x1-center_i)/k; c2=-(y2-center_j)+(x2-center_i)/k; c3=-(y1-center_j)+(x2-center_i)/k; c4=-(y2-center_j)+(x1-center_i)/k; k1=-(y1-center_j)-k*(x1-center_i); k2=-(y2-center_j)-k*(x2-center_i); k3=-(y1-center_j)-k*(x2-center_i); k4=-(y2-center_j)-k*(x1-center_i); for(int i=-l/2;i<l/2;i++) for(int j=-h/2;j<h/2;j++) { if(j==k*i+c) Image->Canvas->Pixels[i+center_i][center_j-j]=clBlue; } for(int q=x1;q<=x2;q++) for(int w=y1;w<=y2;w++) { c1=-(w-center_j)+(q-center_i)/k; k1=-(w-center_j)-k*(q-center_i); k1=k1-2*c; for(int i=-l/2;i<l/2;i++) for(int j=-h/2;j<h/2;j++) { if(-k1==j-k*i) if(j+i/k==c1) Image->Canvas->Pixels[i+center_i][center_j-j]=Image->Canvas->Pixels[q][w]; } }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: