2016-12-07 1 views
-1

J'ai 2 équation, le premier est une ligne, le 2ème est un cercle et je voudrais tracer l'intersection.Deux intersection d'équation

y = tan (phi) * x (xv)^2 + y^2 = R^2

où 'phi' est l'angle [phi = linspace (pi/30, pi/3100) ] J'essaie ce code, mais après que je voudrais tracer je suis arrivé ce message « erreur en utilisant les données de terrain non-numérique est pas pris en charge « Line » »

clear all 
close all 
clc 
N=10; 
R=70; 
w=40; 
v=10; 
K=100*10^6; 
q=3/4; 



%Geometria szmítások 
phi=asin((R-w)/R); 
teta=acos((v/2)/R); 
Rx=(R+v)-(v*(phi/teta)); 

%Szögek felbontása x darabra 
f1=linspace(phi,teta,N); 
f2=linspace(phi,teta,N); 
%Külső ív felbontása 
sugar=linspace(Rx,R,N); 

%Belső ív közelítése 
x1=R*cos(f1); 
y1=R*sin(f1); 

syms valt 
egyenlet=(valt-v)^2+(valt*tan(asin((R-w)/R)))^2-R^2==0; 
S=solve(egyenlet,valt); 
k=max(S) 

%küls ív közelítése 
x2=k; 
y2=k*tan(phi); 

%%%%%Geometria kirajzolása 
plot(x1,y1) 
hold on 
plot(double(x2),double(y2)) 
hold on 
%axis([0,100,0,100]) 

for k=1:(N-1) 
    h(k)=sqrt(((((x2(k+1)+x2(k))/2)-((x1(k+1)+x1(k))/2))^2)+((((y2(k+1)+y2(k))/2)-((y1(k+1)+y1(k))/2))^2)); 
end 

%terület számítása 
for j=1:(N-1) 
    u=[x2(j);x2(j+1);x1(j+1);x1(j);x2(j)]; 
    uv=[y2(j);y2(j+1);y1(j+1);y1(j);y2(j)]; 
    A(j)=polyarea(u,uv); 
end 

%az elemi forgácsvastagság "fogásmélysége" 
whullam=A./h; 

%az elemi darabokhoz tartozó szögek 
for n=1:(N-1) 
    %xhosz(n)=((x2(n+1)+x2(n))/2)-((x1(n+1)+x1(n))/2); 
    %yhosz(n)=(((y2(n+1)+y2(n))/2)-((y1(n+1)+y1(n))/2)); 
beta(n)=atan((((y2(n+1)+y2(n))/2)-((y1(n+1)+y1(n))/2))/(((x2(n+1)+x2(n))/2)-((x1(n+1)+x1(n))/2))); 
end 

%erő meghatározása 

Fx=sum(K.*h.^q.*whullam.*cos(beta)); 
Fy=sum(K.*h.^q.*whullam.*sin(beta)); 
F=[Fx;Fy]; 

Merci pour l'aide!

+0

Vous avez probablement besoin de lancer '' x2' et y2' comme 'double' (ils sont symboliques) avant de tracer:' plot (double (x2), double (y2)) ' – Suever

+0

Je l'essaie et maintenant obtenir cette erreur Index dépasse les dimensions de la matrice. Erreur dans sym/sous-réf (ligne 805) R_tilde = builtin ('subsref', L_tilde, Idx); – knightom

+1

Quelle ligne est à l'origine du problème. Veuillez également mettre à jour votre code afin que nous puissions l'exécuter. Il vous manque de nombreuses déclarations de variables – Suever

Répondre

0

J'ai développé un code totalement différent du vôtre. Mais il effectue ce que j'ai compris de votre question. Vous avez un cercle et une ligne et vous voulez obtenir l'intersection entre les deux. J'ai fourni le code ci-dessous.

close all;clear;clc; 

theta = linspace(0, 2*pi, 360); 
m = 1; % Slope of the line. since tan(45) = 1 for y = x; 
b = 0; % Y-interception 

% To easiest way to plot a circle, you can plot a cosine vs sine 
gt1 = cos(theta); 
gt2 = sin(theta); 

figure(1) 
plot(gt1, gt2, 'r', 'linewidth', 1.5) 
axis('equal') 
grid minor 

figure(2) 
refline(m, b); % Defining a reference line 
hold on 
plot(gt1, gt2, 'r', 'linewidth', 1.5) 
hold off 
grid minor 
axis([0 1.1 0 1.1]) % To get the top right quarter of the circle 

Et le résultat sera:

result