package shape

import (
	

	
	
)

type shapeCircle struct {
	*baseShape
}

func ( *geo.Box) Shape {
	 := shapeCircle{
		baseShape: &baseShape{
			Type: CIRCLE_TYPE,
			Box:  ,
		},
	}
	.FullShape = go2.Pointer(Shape())
	return 
}

func ( shapeCircle) () *geo.Box {
	 := .Box.Width
	 := .Box.Height
	 := .GetInsidePlacement(, , 0, 0)
	 := .Box.TopLeft.Copy()
	 -= 2 * (.X - .X)
	 -= 2 * (.Y - .Y)
	return geo.NewBox(&, , )
}

func ( shapeCircle) () bool {
	return true
}

func ( shapeCircle) (, , ,  float64) (float64, float64) {
	 := math.Max(+, +)
	 := math.Ceil(math.Sqrt2 * )
	return , 
}

func ( shapeCircle) (, , ,  float64) geo.Point {
	 := .GetBox().Width / 2
	 :=  * math.Sqrt2 / 2.
	 := geo.Point{
		X: .GetBox().TopLeft.X + math.Ceil(-+/2.),
		Y: .GetBox().TopLeft.Y + math.Ceil(-+/2.),
	}
	return 
}

func ( shapeCircle) () []geo.Intersectable {
	return []geo.Intersectable{geo.NewEllipse(.Box.Center(), .Box.Width/2, .Box.Height/2)}
}

func ( shapeCircle) () (,  float64) {
	return defaultPadding / math.Sqrt2, defaultPadding / math.Sqrt2
}