I need a method to get the points of the circle, I have one that I found online but unfortunately I’d like to add a boolean filled to it:
public static Location[] getCylinderAt(Location loc, int r, int height) {
ArrayList<Location> list = new ArrayList<>();
int cx = loc.getBlockX();
int cy = loc.getBlockY();
int cz = loc.getBlockZ();
World w = loc.getWorld();
int rSquared = r * r;
for (int x = cx - r; x <= cx + r; x++) {
for (int y = cy - height; y <= cy + height; y++) {
for (int z = cz - r; z <= cz + r; z++) {
if ((cx - x) * (cx - x) + (cz - z) * (cz - z) <= rSquared) {
list.add(new Location(w, x, y, z));
}
}
}
}
return list.toArray(new Location[list.size()]);
}
I can’t really get my head around the maths involved in this and have been searching through non minecraft sources to create my own but to no avail.
Ideally I’d like to be able to change the method to this:
public static Location[] getCylinderAt(Location loc, boolean filled, int r, int height)
Thanks guys! If you like I can remove all of the minecraft references, but I didn’t think it’d be necessary as a Location is basically a Vector with a few added minecraft only variables!
Thanks for reading 🙂
Are you looking for a way to compute pixels on the rim of a circle, as opposed to those inside, for the case where
filledisfalse? If so, have a look at the midpoint circle algorithm. It describes how a circle can be drawn in a raster image.