In the realm of geometry, representing a circle can be tricky as its roundness is determined by the number of vertices it possesses, making it challenging to adjust parameters.
When it comes to texture presentation, there are clear limitations when zooming in or out.
For optimal results, consider using a shader. By creating a square surface and implementing a fragment shader, you can easily generate a circular image with the ability to customize colors and stroke parameters. With only 4 vertices, this method is efficient, especially when working with multiple circle-like objects.
Hopefully, this information proves helpful in your endeavors.
EDIT:
uniform vec3 innerCol;
uniform vec3 strokeCol;
uniform float radius;
uniform float stroke;
varying vec2 vUV;
void main() {
float border = (radius - stroke/2.)/(stroke/2.+radius);
float d = distance(vUV, vec2(.5, .5));
if(d<=border) gl_FragColor = vec4(innerCol, 1.);
else if(d>border && d<1.) gl_FragColor = vec4(strokeCol, 1.);
else discard;
}
This fragment shader may not be perfect, but it should give you a good understanding of its functionality.