Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 3
1

Найти точки пересечения нормали и кривой

23.08.2013, 16:02. Показов 3183. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Необходимо найти точки на "измеренном" сечении, соответствующие точкам на "номинальном" сечении.
Оба сечения заданы таблицами.
В данном случае под нахождением соответствия подразумевается то, что нужно построить нормали в точках "измеренного" сечения и найти точки пересечения этих нормалей с "номинальным" сечением.
Я построил сечения и нормали, но не могу применить функцию fzero, чтобы найти точки пересечения нормалей с кривой.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
%измеренное сечение
X=A(:,1:2);
p=polyfit(X(:,1),X(:,2),3);
for tt=1:length(X);
   yi=p(:,1)*X(tt)^3+p(:,2)*X(tt)^2+p(:,3)*X(tt)+p(:,4);
   x1(tt)=X(tt);
   y1(tt)=yi;
end
 
   plot(x1,y1,'-*');
   hold on;
   
%построение нормалей
for tt=1:length(X)
    Y=3*p(:,1)*X(tt)^2+2*p(:,2)*X(tt)+p(:,3);
    Y1(tt)=Y;
    Q=-Y1(tt);
    W=1;
    norm=sqrt(Q^2+W^2);
    Q=Q/norm;
    W=W/norm;
    Q^2+W^2;
    t=-2;
    Xt(tt)=x1(tt)+t*Q;
    Yt(tt)=y1(tt)+t*W;
    
    plot([x1(tt) Xt(tt)],[y1(tt) Yt(tt)],'-');
end
 
 
%номинальное сечение
B=Xn{1}{1};
X1=B(:,1:2);
p1=polyfit(X1(:,1),X1(:,2),3);
 
for ll=1:length(X1);
   yl=p1(:,1)*X1(ll)^3+p1(:,2)*X1(ll)^2+p1(:,3)*X1(ll)+p1(:,4);
   x2(ll)=X1(ll);
   y2(ll)=yl;
end
plot(x2,y2,'-');
axis equal;
Миниатюры
Найти точки пересечения нормали и кривой  
Вложения
Тип файла: zip sechenia.zip (23.8 Кб, 8 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2013, 16:02
Ответы с готовыми решениями:

Найти точки пересечения кривой второго порядка с прямой
Помогите!!! Найти точки пересечения кривой второго порядка с прямой: Кривая : x2 - 2xy - 3y2...

Точки пересечения кривой и прямой, заданных уравнениями
Определить пересекаются ли кривая y=ax³+bx²+cx+d и прямая y=fx+g. При положительном ответе найти...

Найти уравнения касательной и нормали к данной кривой
Найти уравнение касательной и нормали к данной кривой, заданной параметрически x=t^2 , y= t^3 в...

Найти уравнение нормали к графику в точке; определить точку ее пересечения с плоскостью
Я не знаю где могу проверить своё решение, но, надеюсь, Вы можете что-то подсказать. Собсна, вот...

3
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
24.08.2013, 15:03 2
Как сопоставляетя массив X со значениями A и B в двух приклепленных файлах, где что??? И специально ли там используется вытянутый в вектор-столбец массив X в измерении сечения???
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 3
24.08.2013, 17:16 3
Цитата Сообщение от lomt Посмотреть сообщение
Как сопоставляетя массив X со значениями A и B в двух приклепленных файлах, где что??? И специально ли там используется вытянутый в вектор-столбец массив X в измерении сечения???
Прошу прощения, выдрал кусок кода из программы не подумав, под спойлером немного измененный код, который должен поставить все на свои места. Столбцы в представленных файлах имитируют координаты x и y ( первый и второй столбцы соответственно)
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
clc;
clear;
%Измеренное сечение
A=xlsread('izmeren.xlsx');
X=A(:,1:2);
p=polyfit(X(:,1),X(:,2),3);
for tt=1:length(X);
   yi=p(:,1)*X(tt)^3+p(:,2)*X(tt)^2+p(:,3)*X(tt)+p(:,4);
   x1(tt)=X(tt);
   y1(tt)=yi;
end
figure(2)
   plot(x1,y1,'-');
   
   hold on
   
%построение нормалей
for tt=1:length(X)
    Y=3*p(:,1)*X(tt)^2+2*p(:,2)*X(tt)+p(:,3);
    Y1(tt)=Y;
    Q=-Y1(tt);
    W=1;
    norm=sqrt(Q^2+W^2);
    Q=Q/norm;
    W=W/norm;
    Q^2+W^2;
    t=-2;
    Xt(tt)=x1(tt)+t*Q;
    Yt(tt)=y1(tt)+t*W;
    
    plot([x1(tt) Xt(tt)],[y1(tt) Yt(tt)],'-*');
end
 
 
%номинальное сечение
B=xlsread('nominal.xlsx');
X1=B(:,1:2);
p1=polyfit(X1(:,1),X1(:,2),3);
 
for ll=1:length(X1);
   yl=p1(:,1)*X1(ll)^3+p1(:,2)*X1(ll)^2+p1(:,3)*X1(ll)+p1(:,4);
   x2(ll)=X1(ll);
   y2(ll)=yl;
end
plot(x2,y2,'-')
axis equal;
0
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
26.08.2013, 14:01 4
В общем я немного видоизменил твой код, потому что в Матлабе есть встроенная функция для генерации полинома по известным коэффициентам polyval. Таким образом не надо использовать циклы.
Дальше для нахождения пересечения сечения с каждой нормалью в каждой итерации я строил прямую по двум точкам нормали и искал её пересечение с сечение, которое тоже задал как функцию от x. Пользовался я функцией solve. Далее просто выбиралось реальное значение, которое и соответствовало точки пересечения.
В комментариях показано, как строились прямая и полиномиальная кривая.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
clc;
clear;
%Измеренное сечение
A=xlsread('izmeren.xlsx');
X=A(:,1:2);
p=polyfit(X(:,1),X(:,2),3);
y1=polyval(p,X(:,1));
figure(2)
   plot(X(:,1),y1,'-');
   hold on
    
%номинальное сечение
B=xlsread('nominal.xlsx');
X1=B(:,1:2);
p1=polyfit(X1(:,1),X1(:,2),3);
y2=polyval(p1,X1(:,1)); 
plot(X1(:,1),y2,'-')
axis equal;
 
%построение нормалей
for tt=1:length(X)
    Y=3*p(:,1)*X(tt)^2+2*p(:,2)*X(tt)+p(:,3);
    Y1(tt)=Y;
    Q=-Y1(tt);
    W=1;
    norm=sqrt(Q^2+W^2);
    Q=Q/norm;
    W=W/norm;
    Q^2+W^2;
    t=-2;
    Xt(tt)=X(tt)+t*Q;
    Yt(tt)=y1(tt)+t*W;
    
    plot([X(tt) Xt(tt)],[y1(tt) Yt(tt)],'-*');
    
    syms x 
    Point{tt}=eval(solve('(x-X(tt))/(Xt(tt)-X(tt))*(Yt(tt)-y1(tt))+y1(tt)=p1(1)*x^3+p1(2)*x^2+p1(3)*x+p1(4)'));
    Peresechenie(tt)=real(Point{tt}(3));
end
 
%Line=@(x)(x-X(tt))/(Xt(tt)-X(tt))*(Yt(tt)-y1(tt))+y1(tt);
%plot(1:100,Line(1:100))
%Polym=@(x)p1(1).*x.^3+p1(2).*x.^2+p1(3).*x+p1(4);
%plot(1:100,Polym(1:100))
Найти точки пересечения нормали и кривой
1
26.08.2013, 14:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.08.2013, 14:01
Помогаю со студенческими работами здесь

Найти работу силы по перемещению точки вдоль участка кривой от точки до точки
Найти работу силы f(x,y)=(2xy-4y)i - (x^2 -y)j по перемещению точки вдоль участка кривой x=3y^2 от...

Найти координаты пересечения кривой и прямых
Не могу разобраться как найти координаты точек `a` и `b` (пересечение кривой с М1 и М2); и найти...

Найти точку пересечения прямой и кривой
y1 = Cos(x) + x ^ 2 y2 = -1.62*x+0.0951 надо написать процедуру Ну собственно говоря сдавать в...

Найти точки пересечения прямых проходящих через заданные точки
Всем привет! Прошу помощи в решении задачи: Дана система координат X:Y (по 25 точек в каждую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru