Optimizing this script without using symbolic toolbox

조회 수: 16 (최근 30일)
Kasper
Kasper 2011년 4월 28일
Hi guys, this is the script which takes up all the time
function [t_sol,xi,yi] = solveIntersection(px,py,rx,ry,r)
syms t
x = px + t*rx;
y = py + t*ry;
c = x^2+y^2-r^2;
t_sol = max(double(solve(c)));
xi = double(subs(x,'t',t_sol));
yi = double(subs(y,'t',t_sol));
This script calculates the intersection of a circle and a given vektor. How do i calculate the intersection without using the symbolic toolbox? Or just how can I optimize this function?
The vector starts in (px,py) and has a direction (rx,ry). r is the radius of the circle.

채택된 답변

Andrew Newell
Andrew Newell 2011년 4월 28일
If you run this code
syms t px py rx ry r
x = px + t*rx;
y = py + t*ry;
c = expand(x^2+y^2-r^2);
c = collect(c,t)
solve(c,t)
you'll get explicit equations for the two solutions for t. These can be put in the function:
function [t,xi,yi] = solveIntersectionNum(px,py,rx,ry,r)
t = [-(px*rx + py*ry + (- px^2*ry^2 + 2*px*py*rx*ry - py^2*rx^2 + r^2*rx^2 + r^2*ry^2)^(1/2))/(rx^2 + ry^2)
-(px*rx + py*ry - (- px^2*ry^2 + 2*px*py*rx*ry - py^2*rx^2 + r^2*rx^2 + r^2*ry^2)^(1/2))/(rx^2 + ry^2)];
xi = px + t*rx;
yi = py + t*ry;
It's about 100 times faster.
  댓글 수: 5
Kasper
Kasper 2011년 4월 29일
Yes what if I want to analyze an ellipse instead. But I could make 2 different functions. One for ellipsis and one for circles.
Andrew Newell
Andrew Newell 2011년 4월 29일
A circle is a special case of an ellipse ...

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Conversion Between Symbolic and Numeric에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by