Программа зависает по непонятным причинам
Функция:
void risuem(double x[50], double y[50], double R[50], int j)
{
while (j < 49)
{
double x1 = x[j];
double x2 = x[j+1];
double y1 = y[j];
double y2 = y[j+1];
double r1 = R[j];
double r2 = R[j+1];
double d = ( x1 - x2 ) * ( x1 - x2 ) + ( y1 - y2 ) * ( y1 - y2 );
if ( d <= ( r1 + r2 ) * ( r1 + r2 ) && d >= ( r1 > r2 ? r1 - r2 : r2 - r1 ))
{
Form1->Image1->Canvas->Pen->Color=clGreen;
Form1->Image1->Canvas->Brush->Color=clBlue;
Form1->Image1->Canvas->Pen->Width=4;
Form1->Image1->Canvas->Ellipse(x[j] - R[j], y[j] - R[j], x[j] + R[j], y[j] + R[j]);
}
else
{
Form1->Image1->Canvas->Pen->Color=clYellow;
Form1->Image1->Canvas->Brush->Color=clRed;
Form1->Image1->Canvas->Pen->Width=1;
Form1->Image1->Canvas->Ellipse(x[j] - R[j], y[j] - R[j], x[j] + R[j], y[j] + R[j]);
}
//Form1->Image1->Canvas->Ellipse(x - R, y - R,x + R,y + R);
// x1 y1 x2 y2
}
}
Используем:
double arrX[50];
double arrY[50];
double arrR[50];
int i = 0;
if (coutLines != 0)
{
while (i < coutLines)
{ // while (i < coutLines)
UnicodeString XX = file->Strings[i];
double posX = readCoord(XX, "x");
double posY = readCoord(XX, "y");
double posR = readCoord(XX, "R");
arrX[i] = posX;
arrY[i] = posY;
arrR[i] = posR;
risuem(arrX, arrY, arrR, i);
В функции risuem
проверяем - пересекаются ли окружности. При запуске программы - она просто виснет и её приходиться убивать, используя Диспетчер Задач. Вот значения, откуда берутся данные:
- x=0; y=0; R=50;
- x=0; y=60; R=50;
- x=0; y=120; R=50;
- x=0; y=190; R=50;
- x=60; y=0; R=50;
x=120; y=60; R=50;
x=190; y=120; R=50;
- x=250; y=190;R=50;
- x=2500; y=1900; R=50;
Источник: Stack Overflow на русском