liczby losowe - proszę o wytłumaczenie 11 ostatnch linijek kodu

0

cześć.mam kod do programu który generuje n współrzędnych punktów losowych na płaszczyźnie w zadanym przedziale,oraz punkty znajdują się wewnątrz prostokątu i okręgu.problem polega na tym,że nie rozumiem części kodu,więc może ktoś mi wytłumaczył prostymi słowami częśćkodu od l=0 i do końca.(nie rozumiem właśnie czemu to ma być tak).dziękuję

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>


double los(double xmin,double xmax)
{double x;
int k;
k=rand();
x=xmin+(double) k*(xmax-xmin)/((double)RAND_MAX);
return x;
}

void main()
{
	double x[50],y[50],x1,x2,y1,y2,x0,y0,r,d,a,b;
	int i,n,l,wartosc;
	srand((unsigned)time(NULL));
	scanf("%d",&n);
	x1=2.;x2=4.;y1=3.;y2=8.;
	x0=(x1+x2)/2.;
	y0=(y1+y2)/2.;
	r=(x2-x1)/2.;
	if((y2-y1)/2<r) r=(y2-y1)/2.;
	l=0;
	for(i=0;i<n*10;i++)
	{
		a=los(x1,x2);
		b=los(y1,y2);
		d=sqrt((x0-a)*(x0-a)+(y0-b)*(y0-b));
		if(d<=r)
		{
			x[l]=a;
			y[l]=b;
			l=l+1;
		}
		if(l==n) break;
	}
		for(i=0;i<n;i++) printf("%lf	%lf\n",x[i],y[i]);
1

Tłumaczę, algorytm napisał ktoś o prawie zerowym ID więc nie ma sensu wnikać co nabazgrolił.

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
 
 
// double los(double xmin,double xmax) { return xmin+rand()*(xmax-xmin)/RAND_MAX; } // z tym że nie potrzebna
double min(double a,double b) { return a<b?a:b; }
 
int main()
  {
   double x[50],y[50],x1,x2,y1,y2,x0,y0,r,R,A;
   int i,n;
   srand(time(NULL));
   scanf("%d",&n);
   x1=2; x2=4; y1=3; y2=8;
   x0=(x1+x2)/2;
   y0=(y1+y2)/2;
   r=min(x2-x1,y2-y1)/2;
   for(i=0;i<n;++i)
     {
      R=r*rand()/RAND_MAX;
      A=2*M_PI*rand()/RAND_MAX;
      x[i]=x0+R*sin(A);
      y[i]=y0+R*cos(A);
     }
   for(i=0;i<n;++i) printf("%8.4lf%8.4lf\n",x[i],y[i]);
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1