Matematiksel İspatlar - 2
Üçgen içerisinde alınan hangi nokta bizlere köşelere olan uzaklıkların toplamının minimum olmasını sağlar ?
Yukarıdaki matematiksel ifade, minimum uzaklığı bize vermektedir.
Bu ispat Kağan Kapıcıoğlu tarafından yapılmıştır. Darüşşafaka Matematik Proje Yarışmasında 3.lük ile ödüllendirilmiştir.
Yukarıdaki matematiksel ifade, minimum uzaklığı bize vermektedir.
Bu ispat Kağan Kapıcıoğlu tarafından yapılmıştır. Darüşşafaka Matematik Proje Yarışmasında 3.lük ile ödüllendirilmiştir.
Kaynak Kodu :
//C++
Programming Language
// zafercavdar
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <cmath>
FILE *outputf = fopen ("output.txt","w");
int p[3][2];
int npoint[2];
double min_distance = 999999999999;
int tpoint[2];
int range;
double L[3];
double area;
double equation_min;
void choosePoints()
{
srand(time(0));
for (int a = 0 ; a < 3 ; a++)
for (int b = 0 ; b < 2 ; b++)
{
p[a][b] = rand()%range;
}
if ((p[0][0] == p[1][0] == p[2][0]) || (p[0][1] == p[1][1] == p[2][1]) )
choosePoints();
}
void findData()
{
int a = (p[0][0] - p[1][0]) * (p[0][0] - p[1][0] );
int b = (p[0][1] - p[1][1]) * (p[0][1] - p[1][1] );
L[0] = sqrt (double (a+b));
a = (p[0][0] - p[2][0]) * (p[0][0] - p[2][0] );
b = (p[0][1] - p[2][1]) * (p[0][1] - p[2][1] );
L[1] = sqrt (double (a+b));
a = (p[2][0] - p[1][0]) * (p[2][0] - p[1][0] );
b = (p[2][1] - p[1][1]) * (p[2][1] - p[1][1] );
L[2] = sqrt (double (a+b));
double u = (L[0] + L[1] + L[2]) / 2;
double temp = u * (u- L[0]) * (u - L[1]) * (u - L[2]);
area = sqrt (temp);
}
void FindSmall(double d, int x , int y)
{
if (d < min_distance)
{
min_distance = d;
tpoint[0] = x;
tpoint[1] = y;
}
}
bool pointCheck(int a , int b)
{
int check = 1;
for (int z = 0 ; z < 3 ; z++ )
if (a == p[z][0] && b== p[z][1])
{
check = 0;
break;
}
if (check == 1)
return true;
else
return false;
}
void calcDistance()
{
double dis[3];
double totdis = 0;
for (int i = 0 ; i < range ; i++)
for (int j= 0 ; j < range ; j++)
{
if (pointCheck(i,j) == true)
{
npoint[0] = i;
npoint[1] = j;
totdis = 0;
for (int k = 0 ; k < 3 ; k++)
{
double temp = ((npoint[0] - p[k][0] ) * (npoint[0] - p[k][0] )) + ((npoint[1] - p[k][1] ) * (npoint[1] - p[k][1] )) ;
dis[k] = sqrt (temp);
totdis += dis[k];
}
FindSmall(totdis,i,j);
}
}
}
void printOutput()
{
for (int k = 0 ; k < 3 ; k++)
{
fprintf(outputf,"%d. Kose : (%d,%d)\n",k+1,p[k][0],p[k][1]);
printf("%d. Kose : (%d,%d)\n",k+1,p[k][0],p[k][1]);
}
fprintf(outputf,"En yakin Nokta Koordinatlari : (%d,%d)\n",tpoint[0],tpoint[1]);
fprintf(outputf,"Min Nokta Uzakligi : %lf\n",min_distance);
printf("En yakin Nokta Koordinatlari : (%d,%d)\n\n\n",tpoint[0],tpoint[1]);
printf("Min Nokta Uzakligi : %lf\n\n\n",min_distance);
for (int m = 0 ; m < 3 ; m++)
{
fprintf(outputf,"Ucgen Kenar %d Uzunlugu : %lf\n",m+1,L[m]);
printf("Ucgen Kenar %d Uzunlugu : %lf\n",m+1,L[m]);
}
fprintf(outputf,"Ucgen Alani : %lf\n\n",area);
printf("Ucgen Alani : %lf\n\n",area);
}
void Equation_Kagan()
{
double temp_total = 0;
for (int c = 0 ; c < 3 ; c++)
temp_total += L[c]* L[c];
double s = 2 * area * sqrt(3.0);
double h = (temp_total / 2) + s;
equation_min = sqrt (h);
printf("Denklem Minimum Uzaklik : %lf\n",equation_min);
fprintf(outputf,"Denklem Minimum Uzaklik : %lf\n",equation_min);
}
void Deviation()
{
double dev = ((equation_min - min_distance) *100 ) / equation_min;
if (dev < 0)
dev *= -1;
printf("\nSapma (Yuzde) : %lf\n\n",dev);
fprintf(outputf,"\nSapma (Yuzde) : %lf\n\n",dev);
}
int main()
{
printf("Koordinat Sistemi Siniri (a,a) : ");
scanf("%d",&range);
printf("Lutfen bekleyiniz ");
for (int m = 0 ; m < 3 ; m++)
{
for (int z = 0 ; z < 1000000000/4 ; z++);
printf(".");
}
printf("\n\n\n");
choosePoints();
findData();
calcDistance();
printOutput();
Equation_Kagan();
Deviation();
getchar();
fclose(outputf);
return 0;
}
// zafercavdar
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <cmath>
FILE *outputf = fopen ("output.txt","w");
int p[3][2];
int npoint[2];
double min_distance = 999999999999;
int tpoint[2];
int range;
double L[3];
double area;
double equation_min;
void choosePoints()
{
srand(time(0));
for (int a = 0 ; a < 3 ; a++)
for (int b = 0 ; b < 2 ; b++)
{
p[a][b] = rand()%range;
}
if ((p[0][0] == p[1][0] == p[2][0]) || (p[0][1] == p[1][1] == p[2][1]) )
choosePoints();
}
void findData()
{
int a = (p[0][0] - p[1][0]) * (p[0][0] - p[1][0] );
int b = (p[0][1] - p[1][1]) * (p[0][1] - p[1][1] );
L[0] = sqrt (double (a+b));
a = (p[0][0] - p[2][0]) * (p[0][0] - p[2][0] );
b = (p[0][1] - p[2][1]) * (p[0][1] - p[2][1] );
L[1] = sqrt (double (a+b));
a = (p[2][0] - p[1][0]) * (p[2][0] - p[1][0] );
b = (p[2][1] - p[1][1]) * (p[2][1] - p[1][1] );
L[2] = sqrt (double (a+b));
double u = (L[0] + L[1] + L[2]) / 2;
double temp = u * (u- L[0]) * (u - L[1]) * (u - L[2]);
area = sqrt (temp);
}
void FindSmall(double d, int x , int y)
{
if (d < min_distance)
{
min_distance = d;
tpoint[0] = x;
tpoint[1] = y;
}
}
bool pointCheck(int a , int b)
{
int check = 1;
for (int z = 0 ; z < 3 ; z++ )
if (a == p[z][0] && b== p[z][1])
{
check = 0;
break;
}
if (check == 1)
return true;
else
return false;
}
void calcDistance()
{
double dis[3];
double totdis = 0;
for (int i = 0 ; i < range ; i++)
for (int j= 0 ; j < range ; j++)
{
if (pointCheck(i,j) == true)
{
npoint[0] = i;
npoint[1] = j;
totdis = 0;
for (int k = 0 ; k < 3 ; k++)
{
double temp = ((npoint[0] - p[k][0] ) * (npoint[0] - p[k][0] )) + ((npoint[1] - p[k][1] ) * (npoint[1] - p[k][1] )) ;
dis[k] = sqrt (temp);
totdis += dis[k];
}
FindSmall(totdis,i,j);
}
}
}
void printOutput()
{
for (int k = 0 ; k < 3 ; k++)
{
fprintf(outputf,"%d. Kose : (%d,%d)\n",k+1,p[k][0],p[k][1]);
printf("%d. Kose : (%d,%d)\n",k+1,p[k][0],p[k][1]);
}
fprintf(outputf,"En yakin Nokta Koordinatlari : (%d,%d)\n",tpoint[0],tpoint[1]);
fprintf(outputf,"Min Nokta Uzakligi : %lf\n",min_distance);
printf("En yakin Nokta Koordinatlari : (%d,%d)\n\n\n",tpoint[0],tpoint[1]);
printf("Min Nokta Uzakligi : %lf\n\n\n",min_distance);
for (int m = 0 ; m < 3 ; m++)
{
fprintf(outputf,"Ucgen Kenar %d Uzunlugu : %lf\n",m+1,L[m]);
printf("Ucgen Kenar %d Uzunlugu : %lf\n",m+1,L[m]);
}
fprintf(outputf,"Ucgen Alani : %lf\n\n",area);
printf("Ucgen Alani : %lf\n\n",area);
}
void Equation_Kagan()
{
double temp_total = 0;
for (int c = 0 ; c < 3 ; c++)
temp_total += L[c]* L[c];
double s = 2 * area * sqrt(3.0);
double h = (temp_total / 2) + s;
equation_min = sqrt (h);
printf("Denklem Minimum Uzaklik : %lf\n",equation_min);
fprintf(outputf,"Denklem Minimum Uzaklik : %lf\n",equation_min);
}
void Deviation()
{
double dev = ((equation_min - min_distance) *100 ) / equation_min;
if (dev < 0)
dev *= -1;
printf("\nSapma (Yuzde) : %lf\n\n",dev);
fprintf(outputf,"\nSapma (Yuzde) : %lf\n\n",dev);
}
int main()
{
printf("Koordinat Sistemi Siniri (a,a) : ");
scanf("%d",&range);
printf("Lutfen bekleyiniz ");
for (int m = 0 ; m < 3 ; m++)
{
for (int z = 0 ; z < 1000000000/4 ; z++);
printf(".");
}
printf("\n\n\n");
choosePoints();
findData();
calcDistance();
printOutput();
Equation_Kagan();
Deviation();
getchar();
fclose(outputf);
return 0;
}