d2711
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору от такая задачка: найти(и вертуть ) точки пересечение 2х окружностей, если известны радиус и центры... помогите мне... не могу понять что это у меня за ошибка... может бока в формуле?.... плиз, хелп! #include<stdio.h> //ïîäêëþ÷åíèå áèáëèîòåê #include<conio.h> #include<iostream.h> #include<math.h> void tochkaV(double x1, double x2, double y1, double y2, double R1, double R2, double *px0,double *py0,double *px02, double *py02); //íà÷àëî ôóíêöèè void main() { double x1,x2,x0,x02,y1,y2,y0,y02,*px0,*px02,*py0,*py02, R1,R2; cout<<"Vvedite koordinaty pervogo centra"<<endl<<"x= "; cin>>x1; cout<<"y= "; cin>>y1; cout<<"Vvedite koordinaty vtorogo ventra"<<endl<<"x= "; //ââîä äàííûõ cin>>x2; cout<<"y= "; cin>>y2; cout<<"Vvedite pervyi radius "<<endl<<"R1= "; cin>>R1; cout<<"Vvedite pervyi radius "<<endl<<"R2= "; cin>>R2; px0=&x0; px02=&x02; py0=&y0; py02=&y02; tochkaV(x1,x2,y1,y2,R1, R2, px0,py0,px02,py02); //âûçîâ ôóíêöèè cout<<"Koordinaty obshej tochki V ("<<*px0<<';'<<*py0<<')'<<endl<<"Nu ili "<<'('<<*px02<<';'<<*py02<<')'<<endl; //âûâîä ðåçóäüòàò getch(); } void tochkaV(double x1, double x2, double y1, double y2, double R1, double R2, double *px0,double *py0,double px02, double *py02) //íà÷àëî ôóíêöèè { double a,b,c,d; a=4*pow((y1-y2),2)+4*pow((x1-x2),2); b=-8*y1*pow((x1-x2),2)+4*(y1-y2)*(2*x1*(x1-x2))+(pow(R1,2)-pow(R2,2)); c=4*pow(y1,2)*pow((x1-x2),2) +(2*x1*(x1-x2))+pow((pow(R1,2)-pow(R2,2)),2)-pow(R1,2); d=b*b-4*a*c; *py0=(-b*b-sqrt(d))/2*a; *py02=(-b*b+sqrt(d))/2*a; //ðàñ÷åò êîîðäèíàò *px0=((R2*R2-R1*R1-2*(*(py0))*(y1-y2)))/(2*(x1-x2)); *(px02)=(R2*R2-R1*R1-2*(*(py02))*(y1-y2))/2*(x1-x2); } Добавлено: вот еще раз переделал, формулу по другому решил, опять нормально не пашет, помогите!!! #include<stdio.h> //подключение библиотек #include<conio.h> #include<iostream.h> #include<math.h> double z_x(float x) { return (float)1/x; } void tochkaV(double x1, double x2, double y1, double y2, double R1, double R2, double *px0,double *py0,double *px02, double *py02); //начало функции //начало функции void main() { float x; double x1,x2,x0,x02,y1,y2,y0,y02,*px0,*px02,*py0,*py02, R1,R2; cout<< "vvedite zna4enie X"<<endl; cin>>x; cout<<z_x(x)<<endl; cout<<"Vvedite koordinaty pervogo centra"<<endl<<"x= "; cin>>x1; cout<<"y= "; cin>>y1; cout<<"Vvedite koordinaty vtorogo ventra"<<endl<<"x= "; //ввод данных cin>>x2; cout<<"y= "; cin>>y2; cout<<"Vvedite pervyi radius "<<endl<<"R1= "; cin>>R1; cout<<"Vvedite pervyi radius "<<endl<<"R2= "; cin>>R2; px0=&x0; px02=&x02; py0=&y0; py02=&y02; tochkaV(x1,x2,y1,y2,R1, R2, px0,py0,px02,py02); //вызов функции cout<<"Koordinaty obshej tochki V ("<<*px0<<';'<<*py0<<')'<<endl<<"Nu ili "<<'('<<*px02<<';'<<*py02<<')'<<endl; //вывод резудьтат getch(); } void tochkaV(double x1, double x2, double y1, double y2, double R1, double R2, double *px0,double *py0,double px02, double *py02) //начало функции { double t,k,m,p,d; t=pow((x2),2)-pow((x1),2)+pow((y2),2)-pow((y1),2)-pow((R2),2)+pow((R1),2); k=(t*t)/4*(x1-x2)+(x1*x1)+(y1*y1)-(R1*R1); m=(pow((y1-y2),2)+(x1-x2))/(x1-x2); p=((y1-y2)*t+2*y1*(x1-x2))/(x1-x2); //m*(y*y)-2*p*y+k=0 d=(p*p)-4*m*k; *py0=-p-(sqrt(p*p-4*m*k)); *py02=-p-(sqrt(p*p+4*m*k)); *px0=((-1*(*py0)*(y1-y2)-t/2)/(x1-x2)); *px02=((-1*(*py02)*(y1-y2)-t/2)/(x1-x2)); } |