<!DOCTYPE html>
<html lang="en">
<head>
    <title>3D circle sampler</title>
    <meta charset="UTF-8" />
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/jsxgraph/distrib/jsxgraph.css" />
    <script type="text/javascript" charset="UTF-8" src="https://cdn.jsdelivr.net/npm/jsxgraph/distrib/jsxgraphcore.js"></script>
</head>
<body>

<a href="../">↩ Index page</a>

<h1>3D circle sampler</h1>

<p>A <a href="https://jsxgraph.org/docs/symbols/Circle3D.html"><code>Circle3D</code></a> element is created from a center, a normal vector, and a radius. The center can be given either in coordinates or as a <a href="https://jsxgraph.org/docs/symbols/Point3D.html#constructor"><code>Point3D</code></a>. The normal vector is given in coordinates.</p>
<p>There’s another <a href="https://github.com/jsxgraph/jsxgraph/blob/main/examples/circle3d.html"><code>Circle3D</code> example</a> in the <a href="https://github.com/jsxgraph/jsxgraph/tree/main/examples">examples folder</a> included with the source code.</p>
<div id="circle-board" class="jxgbox" style="width:600px; height:600px"></div>

<script type="text/javascript">
    // create a JSXGraph board and draw a 3D view on it
    let board = JXG.JSXGraph.initBoard(
        'circle-board',
        {
            boundingbox: [-8, 8, 8,-8],
            axis: false,
            showCopyright: false,
            showNavigation: false
        }
    );
    let view = board.create(
        'view3d',
        [[-4.5, -4.5], [9, 9],
        [[0, 3], [0, 3], [0, 3]]],
        {
            xPlaneRear: {fillOpacity: 0.2, gradient: null},
            yPlaneRear: {fillOpacity: 0.2, gradient: null},
            zPlaneRear: {fillOpacity: 0.2, gradient: null}
        }
    );
    
    // create a point
    let center = view.create(
        'point3d',
        [1.5, 1.5, 1.5],
        {
            withLabel: false,
            strokeWidth: 1,
            size: 5,
            strokeColor: '#300060',
            fillColor: 'white',
            gradientSecondColor: '#5000a0',
            highlightStrokeColor: '#300060'
       }
    );
    
    // create some circles that share a center
    let normals = [
        [1, 1, 1],
        [1, -1, 1],
        [-1, 1, 1],
        [-1, -1, 1]
    ];
    let colors = [
        '#f08',
        '#f60',
        '#fb0',
        '#80f'
    ];
    for (i in normals) {
        view.create(
            'circle3d',
            [center, normals[i], 1],
            {strokeColor: colors[i]}
        );
    }
</script>

</body>
</html>