Specify Bounds Vpasolve Two Unknowns

조회 수: 2 (최근 30일)
John
John 2021년 9월 17일
댓글: William Rose 2021년 9월 24일
y2 = 18.3956
z2 = 11.0572
y3 = 13.3972
z3 = 20.8909
I wish to find the coordinates of the centre of the circle passing through (y2,z2) and (y3,z3).
Coordinates of the centre of the circle (y,z) should be within the bounds 12.5 and 17.5.
There is an infinity of centre coordinates within the bounds that fullfills the bounds criterion. All the centres lay on the same line.
I have data points that should all lay outside of the circle. I will then exclude all circles that have points in it and extract the circle with the largest radius.
Ideally, I'll get a discrete list of possible centers sampled from vpasolve. From this list I can extract the largest circle of interest that lay inside my data points.
My attempt:
syms y z
Solved=vpasolve((y2-y)^2+(z2-z)^2==(y3-y)^2+(z3-z)^2,[y z],[12.5, 17.5:12.5, 17.5])
However, this gives me no solution within the bounds.
Any help is appreciated!

채택된 답변

William Rose
William Rose 2021년 9월 17일
@John, I would use simple geometry.
You say "Coordinates of the centre of the circle (y,z) should be within the bounds 12.5 and 17.5." I assume that you mean
12.5<=x<=17.5, 12.5<=y<=17.5.
Problem:
Given points P2=(y2,z2) and P3=(x3,z3). Find the largest circle passing through P2 and P3, whose center is in the rectangle with corners P0=(y0,z0) and P1=(y1,z1), where y0<y1 and z0<z1.
Answer:
The set of circle centers lie on the perpendicular bisector of P2,P3. The biggest circle will be where the perpendicular bisector intersects one of the edges of the bounded region. The perpendicular bisector will intersect the edges of the bounded region at 0, 1, or 2 points. Identify the intersection points, if any. The intersection point that is farthest from the midpoint of P2,P3 is the center of the circle with the largest radius.
Perpendicular bisector: y-ymid=m(z-zmid), where ymid=(y2+y3)/3, zmid=(z2+z3)/2, m=(z2-z3)/(y3-y2).
Edges of the bounded region:
Edge 1: y=y0, z0<=z<=z1.
Edge 2: y=y1, z0<=z<=z1
Edge 3: y0<=y<=y1,z=z0
Edge 4: y0<=y<=y1,z=z1
Check the edges:
Edge 1: y0-ymid=m(zc1-zmid) => zc1=(y0-ymid)/m+zmid. If z0<=zc1<=z1, then C1=(y0,zc1) is a viable answer, so save it.
Edge 2: y1-ymid=m(zc2-zmid) => zc2=(y1-ymid)/m+zmid. If z0<=zc2<=z1, then C2=(y0,zc2) is a viable answer, so save it.
Edge 3: yc3-ymid=m(z0-zmid) => yc3=m(z0-zmid)+ymid. If y0<=yc3<=y1, then C3=(yc3,z0) is a viable answer, so save it.
Edge 4: yc4-ymid=m(z1-zmid) => yc4=m(z1-zmid)+ymid. If y0<=yc4<=y1, then C4=(yc4,z1) is a viable answer, so save it.
If there was 1 viable answer, it is the answer.
If there were 2 viable answers, the answer is the one that is farther from Pmid=(ymid,zmid).
  댓글 수: 2
John
John 2021년 9월 23일
편집: John 2021년 9월 23일
Thank you for your answer!
I solved it with a different approach, if I know two points on the circle, I can calculate the equation of the line where the circle centre lay on. I then built a for-loop that tried values for the centre x-location that fulfill my criterion about the bounded region. It worked!
William Rose
William Rose 2021년 9월 24일
@John, well done!

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Assumptions에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by