![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
tig81 |
![]()
Сообщение
#21
|
Академик ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 15 617 Регистрация: 15.12.2007 Город: Украина, Запорожье Учебное заведение: ЗНУ Вы: преподаватель ![]() |
|
InFuz |
![]()
Сообщение
#22
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
евклидова норма это корень из суммы квадратов координат вектора.
я не совсем понял вот и спрашиваю. |
Vahappaday |
![]()
Сообщение
#23
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
e = (x2-x1)^2 + (y2-y1)^2 - это уже квадрат нормы
|
InFuz |
![]()
Сообщение
#24
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
1 вот так получилась
Цитата program vekt; uses crt; var x1,x2,y1,y2,xb,yb,sp:integer; en:real; BEGIN clrscr; write('x1= '); readln(x1); write('y1= '); readln(y1); write('x2= '); readln(x2); write('y2= '); readln(y2); xb:=x1+x2; yb:=y1+y2; writeln('A(x1,y1)+B(x2,y2)= (',xb,',',yb,')'); xb:=x1-x2; yb:=y1-y2; writeln('A(x1,y1)-B(x2,y2)= (',xb,',',yb,')'); sp:=x1*y1+x2*y2; writeln('A*B=',sp); en:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); writeln('Evk. norm.= ',en); readkey END. |
Vahappaday |
![]()
Сообщение
#25
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
То что я написал - это норма разности двух векторов.
Немножко перепутал норму и метрику. норма вычисляется относительного одного вектора Для первого: sqrt(x1^2+y1^2) Для второго: sqrt(x2^2+y2^2) По первой более нет замечаний. |
tig81 |
![]()
Сообщение
#26
|
Академик ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 15 617 Регистрация: 15.12.2007 Город: Украина, Запорожье Учебное заведение: ЗНУ Вы: преподаватель ![]() |
|
InFuz |
![]()
Сообщение
#27
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
ясно
|
InFuz |
![]()
Сообщение
#28
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
У меня сомнения, что вектора (1;2) и (2;5) коллинеарны. Вообще Вы используете целочисленное деление (т.е. дробные части откидываются). Используйте это равенство: x1*y2-x2*y1=0 Если равенство выполняется то вектора коллинеарны. а для n мерного пространства какая будет формула? |
Vahappaday |
![]()
Сообщение
#29
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
для n-мерного пространства будет n-1 формула
(x1)1*(x2)2 - (x1)2*(x2)1=0 (x2)1*(x3)2 - (x2)2*(x3)1=0 .... (x(n-1))1*(xn)2 - (x(n-1))2*(xn)1=0, где (xi)j - i-я координата j-го вектора |
InFuz |
![]()
Сообщение
#30
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
Vahappaday чот не въеду не как в то что вы написали.
вот у меня такая штука получилась, я создал массив kmas который хранит коэффициенты k для каждой пары x1,x2; y1,y2 и т.д. но все равно не фига не работает выдает что (1,2) кол-ен (2,5) Код //----------------------------------------------------------------- void main() { clrscr(); int i,sp1=1,sp2=1,n,f=0; cout<<"n="; cin>>n; int* vek1 = new int[n]; int* vek2 = new int[n]; double* kmas = new double[n]; //------------------------------------------------------------------ cout<<"zadaite 1 vektor"<<"\n"; for (i=0; i<n; i++) { cin>>vek1[i]; } cout<<"zadaite 2 vektor"<<"\n"; for (i=0; i<n; i++) { cin>>vek2[i]; } //------------------------------------------------------------------ for (i=0; i<n; i++) { sp1=sp1*vek1[i]; sp2=sp2*vek2[i]; if(vek2[i]!=0)kmas[i]=(double)vek1[i]/vek2[i]; } sp2=sp1+sp2; if(sp2==0) cout<<"vektora perp. \n"; else cout<<"vektora ne perp. \n"; for (i=0; i<n-1; i++) { if(kmas[i]==kmas[i+1]) f=1; else {f=0; break;} } if(f=1) cout<<"vektora kol."; else cout<<"vektora ne kol."; for (i=0; i<n; i++) { cout<<"\n kmas["<<i<<"]="<<kmas[i]; } delete []vek1; delete []vek2; delete []kmas; getch(); } |
Vahappaday |
![]()
Сообщение
#31
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
if(f==1) cout<<"vektora kol.";
Косячить будет ещё и в случае, когда один из векторов имеет нулевую координату. Так что рекомендую всё же обратиться к тем формулам, что я написал. Да и проверка на перпендикулярность не корректна: например, на вектора (2; 2), (1; -1) ваша программа говорит, что они не перпендикулярны, хотя они как раз таковыми являются. Перемножать надо не все координаты одного вектора между собой. Надо сделать сумму произведений соответствующих координат векторов. |
InFuz |
![]()
Сообщение
#32
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
Да и проверка на перпендикулярность не корректна: например, на вектора (2; 2), (1; -1) ваша программа говорит, что они не перпендикулярны, хотя они как раз таковыми являются. Перемножать надо не все координаты одного вектора между собой. Надо сделать сумму произведений соответствующих координат векторов. как же 2,2 и 1,-1 преп. если 2*2 не равно 1*(-1)? если скалярное произведение = 0, то вектора перпендикулярны. помогите формулы внедрить а то чот я в них ни как не разбирусь например (xi)j - i-я координата j-го вектора у нас только 2 вектора нам не нужно j. |
Vahappaday |
![]()
Сообщение
#33
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
Насчёт (2;2) и (1; -1) - нарисуйте на бумажке, будет сразу видно, что они перпендикулярны.
И скалярное произведение у них будет такое: 2*1 + 2*(-1) = 2-2=0 Насчёт коллинеарности, я бы проверял так: f=1; for (i=0; i<n-1; i++) { if(vek1[i]*vek2[i+1] - vek1[i+1]*vek2[i]) { f=0; break; } } А дальше уж Ваша проверка. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 19:29 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru