Sé que hay una forma bastante sencilla de comprobar si un punto 2D está dentro de un círculo, quería saber cómo hacer lo mismo pero en la 3ª dimensión. Las variables son las X, Y, Z del punto y el radio de la esfera en 3D.
Digamos que sabemos que X e Y están dentro del círculo, ¿podemos girarlo 90 grados y fingir que la Z es la X o la Y de nuevo y utilizar el mismo algoritmo?
Comprobaré en 2 bucles for para X e Y si cada punto está dentro del círculo, utilizaré el X y el Y para trazar el píxel y el Z para determinar el color.
EDITAR:
Gracias por la respuesta, no me había dado cuenta de que podía incluir la Z en el algoritmo del que hablaba. Por si te interesa aquí está el código, ¡funciona de maravilla! Está en F#.
open System.IO
open System.Drawing
type Vector = { X: int; Y: int; Z: int }
type Sphere = { Center: Vector; Radius: int }
let intersect v s =
let x0, y0, z0 = float(v.X), float(v.Y), float(v.Z)
let x1, y1, z1 = float(s.Center.X), float(s.Center.Y), float(s.Center.Z)
sqrt(pown(x0 - x1) 2 + pown(y0 - y1) 2 + pown(z0 - z1) 2) < float(s.Radius)
let sphere = { Center = { X = 127; Y = 127; Z = 127 }; Radius = 127 }
let bitmap = new Bitmap(256, 256)
for x in 0 .. 255 do
for y in 0 .. 255 do
for z in 0 .. 255 do
if intersect { X = x; Y = y; Z = z } sphere then
bitmap.SetPixel(x, y, Color.FromArgb(z, 0, 0, 255))
bitmap.Save(Path.Combine(__SOURCE_DIRECTORY__, "bitmap.png"))