简体   繁体   中英

Drawing line between intersection of two shapes

I am playing around with graphics, specifically the intersection and union of primitive shapes.

Given the following:

Elipse2D e1 = new Elipse2D.Double(120, 80, 80, 80);
Elipse2D e2 = new Elipse2D.Double(180, 80, 80, 80);

Area a1 = new Area(e1);
a1.add(new Area(e2));

gfx.draw(a1); // gfx is a Graphics2D object 

This gives a very nice shape that looks like a 1st-person eye-view from binoculars in some 90's action movie.

However, I was wondering if it was possible to draw a line between the two intersection points so that is looks almost like two cells busy dividing. After doing this with two circles, is this possible with multiple circles, perhaps?

I know this can be done by finding the intersection points between the two circles and drawing the lines manually, however, I do not want to reinvent the wheel.

Any suggestions?

Given the parameterization of these Ellipse2D , the equations can be written as:

x(r) = X + W (cos(r) + 1)/2
y(r) = Y + H (sin(r) + 1)/2

x(s) = X + W' (cos(s) + 1)/2
y(s) = Y + H  (sin(s) + 1)/2

The y equations allow to conclude that the angles r and s have the same sine and are supplementary (equal angles would not satisfy the x equations), so that cos(s)=-cos(r) .

After elimination, we have (W'+W) cos(r) = W'-W . In the given case, cos(r)=1/5 and r=78.463° .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM