Group points of intersection
Find the contours
by spacorum
HTML
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script>
THREE.Vector3.prototype.equals = function(v, tolerance) {
if (tolerance === undefined) {
return ((v.x === this.x) && (v.y === this.y) && (v.z === this.z));
} else {
return ((Math.abs(v.x - this.x) < tolerance) && (Math.abs(v.y - this.y) < tolerance) && (Math.abs(v.z - this.z) < tolerance));
}
}
</script>
<button id="pressMe" style="position: absolute;">
PressMe
</button>
CSS
body {
overflow: hidden;
margin: 0;
}
JavaScript
var tolerance = 0.001;
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(0, 10, 50);
var renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var controls = new THREE.OrbitControls(camera, renderer.domElement);
//scene.add(new THREE.AxisHelper(2));
var planeGeom = new THREE.PlaneGeometry(30, 30);
planeGeom.rotateX(-Math.PI / 2);
var plane = new THREE.Mesh(planeGeom, new THREE.MeshBasicMaterial({
color: "lightgray",
transparent: true,
opacity: 0.125,
side: THREE.DoubleSide
}));
plane.position.y = -3.14;
plane.rotation.x = Math.PI / 5;
scene.add(plane);
var objGeom = new THREE.TorusKnotGeometry(10, 3);
//var objGeom = new THREE.DodecahedronGeometry(10, 0);
//var objGeom = new THREE.TetrahedronGeometry(10, 0);
//var objGeom = new THREE.BoxGeometry(20, 20, 20);
//var objGeom = new THREE.SphereGeometry(10, 5, 2);
var obj = new THREE.Mesh(objGeom, new THREE.MeshBasicMaterial({
color: "blue",
wireframe: true
}));
obj.material.color.multiplyScalar(.5);
obj.rotation.z = Math.PI / 10;
obj.position.set(0, 3.14, 0);
scene.add(obj);
pressMe.addEventListener("click", drawIntersectionPoints, false);
var pointsOfIntersection = new THREE.Geometry();
var a = new THREE.Vector3(),
b = new THREE.Vector3(),
c = new THREE.Vector3();
var planePointA = new THREE.Vector3(),
planePointB = new THREE.Vector3(),
planePointC = new THREE.Vector3();
var lineAB = new THREE.Line3(),
lineBC = new THREE.Line3(),
lineCA = new THREE.Line3();
var pointOfIntersection = new THREE.Vector3();
function drawIntersectionPoints() {
var mathPlane = new THREE.Plane();
plane.localToWorld(planePointA.copy(plane.geometry.vertices[plane.geometry.faces[0].a]));
plane.localToWorld(planePointB.copy(plane.geometry.vertices[plane.geometry.faces[0].b]));
...