generalize getOuterRadius() to set radius so tubes touch for number of tubes greater than 2 (ie whenever possible)

create getTubesTouching() method to determine whether tubes are touching (will also return true if they overlap)

fix several places where outerRadius was used instead of getOuterRadius()
This commit is contained in:
JoePfeiffer 2022-04-06 10:49:49 -06:00
parent 9f1346d44e
commit a25cb8355e

View File

@ -85,35 +85,37 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
*/
public double getOuterRadius() {
if (autoRadius) {
// Return auto radius from front or rear
double r = -1;
RocketComponent c = this.getParent();
if (c != null) {
if (c instanceof SymmetricComponent) {
r = ((SymmetricComponent) c).getAftRadius();
}
}
if (r < 0) {
r = DEFAULT_RADIUS;
if (fins < 3) {
return getBodyRadius();
} else {
// for 5,6, and 8 fins, adjust the diameter to provide touching fins.
switch (fins) {
case 5:
r *= 1.43; // sin(36) / (1- sin(36), 36 = 360/5/2
break;
case 7:
r *= 0.77; // sin(25.7) / (1- sin(25.7)
break;
case 8:
r *= 0.62; // sin(22.5) / (1- sin(22.5)
break;
return getTouchingRadius();
}
}
return r;
}
return outerRadius;
}
/**
* Return whether the tubes are touching
*
* @return true if touching, false if not
*/
public boolean getTubesTouching() {
return getOuterRadius() > getTouchingRadius() - MathUtil.EPSILON;
}
/**
* Return the required radius for the fins to be touching
*
* @return required radius
*/
private double getTouchingRadius() {
double r = getBodyRadius();
final double finSep = Math.PI / fins;
r *= Math.sin(finSep)/(1.0 - Math.sin(finSep));
return r;
}
/**
* Set the outer radius of the tube-fin. If the radius is less than the wall thickness,
* the wall thickness is decreased accordingly of the value of the radius.
@ -355,8 +357,8 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
List<Coordinate> bounds = new ArrayList<Coordinate>();
double r = getBodyRadius();
addBound(bounds, 0, 2 * (r + outerRadius));
addBound(bounds, length, 2 * (r + outerRadius));
addBound(bounds, 0, 2 * getBoundingRadius());
addBound(bounds, length, 2 * getBoundingRadius());
return bounds;
}
@ -364,8 +366,8 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
@Override
public BoundingBox getInstanceBoundingBox() {
BoundingBox box = new BoundingBox();
box.update(new Coordinate(0, -outerRadius, -outerRadius));
box.update(new Coordinate(length, outerRadius, outerRadius));
box.update(new Coordinate(0, -getOuterRadius(), -getOuterRadius()));
box.update(new Coordinate(length, getOuterRadius(), getOuterRadius()));
return box;
}
@ -413,8 +415,7 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
@Override
public double getBoundingRadius() {
// TODO Auto-generated method stub
return 0;
return getBodyRadius() + getOuterRadius();
}
@Override