2,218 views (last 30 days)

Show older comments

muhammad arfan
on 18 Jun 2019

dears!!!

i have asigned to write a matlab code for 8 point to fit it in ellipse by using least square method..

i am new in using matlab and try my best but my points are not fit on ellipse. i use annealing method so that i have satisfied my teacher by my work. please chk my work and help me.

thanks

arfan khan

clc;

clear all;

close all;

r1 = rand(1);

r2 = [1+rand(1)]; % r2>r1

x0 = 0;

y0 = 0;

N = 8;

n= 100;

x1 = 1;

x2 = 2;

y1 = 1;

y2 = 2;

for i = 1:n

x = x1 +(x2-x1).*rand(N,1);

y = y1 +(y2-y1).*rand(N,1);

f = ((((x./r1).^2) +(y./r2).^2)-1).^2;

[m,l] = min(f);

z =.001* exp(10*(1-i/n));

v = z/2;

% disp('v');

% disp(v)

x1 = x(l)*v;

x2 = x(l)*v;

% disp('x1')

% disp(x1)

% disp('x2')

% disp(x2)

% ay = v./y(l);

% by = v./y(l);

% disp(v);

%

% % hold on;

disp('f');

disp(f);

end

% plot(f,'or')

plot(x,y, '*b');

x=((x(i)-x0)*cos(z)) - ((y(i)-y0)*sin(z))

y=(x(i)-x0)*sin(z)-(y(i)-y0)*cos(z)

xa(i)=rand(1)

x(i)= a+(b-a)*rand(1);

y(i)= rand(1);

for

m(i) = ((((x).^2)/a^2) + (((y).^2)/b^2)-1).^2

end

hold on;

Roger Stafford
on 8 Sep 2013

Edited: Cris LaPierre
on 5 Apr 2019

Let (x1,y1) and (x2,y2) be the coordinates of the two vertices of the ellipse's major axis, and let e be its eccentricity.

a = 1/2*sqrt((x2-x1)^2+(y2-y1)^2);

b = a*sqrt(1-e^2);

t = linspace(0,2*pi);

X = a*cos(t);

Y = b*sin(t);

w = atan2(y2-y1,x2-x1);

x = (x1+x2)/2 + X*cos(w) - Y*sin(w);

y = (y1+y2)/2 + X*sin(w) + Y*cos(w);

plot(x,y,'y-')

axis equal

Image Analyst
on 7 Jul 2020

Here's a full demo:

% Define parameters.

fontSize = 15;

x1 = 1;

x2 = 20;

y1 = 2;

y2 = 8;

eccentricity = 0.85;

numPoints = 300; % Less for a coarser ellipse, more for a finer resolution.

% Make equations:

a = (1/2) * sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2);

b = a * sqrt(1-eccentricity^2);

t = linspace(0, 2 * pi, numPoints); % Absolute angle parameter

X = a * cos(t);

Y = b * sin(t);

% Compute angles relative to (x1, y1).

angles = atan2(y2 - y1, x2 - x1);

x = (x1 + x2) / 2 + X * cos(angles) - Y * sin(angles);

y = (y1 + y2) / 2 + X * sin(angles) + Y * cos(angles);

% Plot the ellipse as a blue curve.

subplot(2, 1, 1);

plot(x,y,'b-', 'LineWidth', 2); % Plot ellipse

grid on;

axis equal

% Plot the two vertices with a red spot:

hold on;

plot(x1, y1, 'r.', 'MarkerSize', 25);

plot(x2, y2, 'r.', 'MarkerSize', 25);

caption = sprintf('Ellipse with vertices at (%.1f, %.1f) and (%.1f, %.1f)', x1, y1, x2, y2);

title(caption, 'FontSize', fontSize);

xlabel('x', 'FontSize', fontSize);

ylabel('y', 'FontSize', fontSize);

% Plot the x and y. x in blue and y in red.

subplot(2, 1, 2);

plot(t, x, 'b-', 'LineWidth', 2);

grid on;

hold on;

plot(t, y, 'r-', 'LineWidth', 2);

legend('x', 'y', 'Location', 'north');

title('x and y vs. t', 'FontSize', fontSize);

xlabel('t', 'FontSize', fontSize);

ylabel('x or y', 'FontSize', fontSize);

% Set up figure

g = gcf;

g.WindowState = 'maximized';

g.NumberTitle = 'off';

g.Name = 'Ellipse Demo by Roger Stafford and Image Analyst'

Azzi Abdelmalek
on 8 Sep 2013

Edited: Azzi Abdelmalek
on 12 Jun 2015

a=5; % horizontal radius

b=10; % vertical radius

x0=0; % x0,y0 ellipse centre coordinates

y0=0;

t=-pi:0.01:pi;

x=x0+a*cos(t);

y=y0+b*sin(t);

plot(x,y)

Sandy M
on 27 Jul 2019

Hi, I do my ellipse graph

A=10;

B=7.5;

X=-10:.1:10;

Y=(7.5/10)*(1-x^2)^(1/2)

z=-(7.5/10)*(1-x^2)^(1/2)

Plot(x,y,x,z)

Its ok but i need it in cm units cause if i change properties of figure and paper to cm i get deference’s about 3 or 5 mm How can I justify the unit

Kate
on 24 Feb 2014

Sandy M
on 27 Jul 2019

hi why u product the nmber with 100?

and, if i want the graph with cm units, what i do? cause i change garaph and paper properties but i still defreces about 4 mm when i prented it

Omar Maaroof
on 13 May 2019

you can use

Ellipse2d

Walter Roberson
on 13 May 2019

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!