Shuffle the dots on the sphere and assign each one a unique identifier

I am currently working on creating a spherical design using three.js. My goal is to have clickable dots and meshes embedded within this sphere. To achieve this, I believe that assigning names to each dot on the sphere will be essential. I have two specific questions: 1. How can I randomize the positions of the dots on the sphere? 2. What is the best approach for naming the dots and meshes?

THREE.IcosahedronGeometry = function(radius, detail) {
  // Geometry code here
};

// Implementing the geometry parameters and constructor

// Setting up the scene with camera and renderer

// Creating the vertex points using an Icosahedron Geometry

// Configuring the BufferGeometry for the points

// Adding material and color to the Points

// Creating an Object3D container for our points and mesh

// Adjusting camera position and setting up rendering loop

You can view the complete code and visual representation at http://codepen.io/anon/pen/ZLpPxB.

Answer №1

Check out this example demonstrating how to randomize the points: http://codepen.io/usefulthink/pen/WRoboo?editors=0010

The key concept here is:

var v3 = new THREE.Vector3();
var spherical = new THREE.Spherical();

for (var j = 0; j < vertices.length; j += 3) {
    v3.fromArray(vertices, j);
    spherical.setFromVector3(v3);

    spherical.phi += rnd(variation, -variation);
    spherical.theta += rnd(variation, -variation);

    v3.setFromSpherical(spherical);
    v3.toArray(vertices, j);
}

In essence, using spherical coordinates (phi/theta/r instead of x/y/z, similar to latitude/longitude) is an effective method for manipulating points on a sphere's surface. Here, each vertex is converted into spherical form, theta/phi values are adjusted slightly (with the radius unchanged), and the altered values are written back to the vertices array.

If you're thinking about assigning names to these points, would it be something like this?

var pointNames = {
  frank: 12, 
  maria: 7, 
  steve: 3, 
  melissa: 4
};

function getPointByName(name) {
  const start = pointNames[name] * 3;
  return new THREE.Vector3().fromArray(vertices, start);
}

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

What are the steps to update your profile picture using Angular?

In my Angular 6 application, I am implementing an image upload feature with the following code: Html: <img [src]="url ? url : 'https://www.w3schools.com/howto/img_avatar.png'"> <br/> <input type='file' (change)="onSelec ...

The beta version of Angular 2.0 introduces the BrowserDomAdapter for easy access to the DOM

I have a Component in Angular 2.0 that is attempting to utilize the DOM Adapter API from Angular's BrowserDomAdapter documentation. The initialization of this DomAdapter can be found here. However, I am uncertain about whether the Dom Adapter needs t ...

Docusaurus font loading specifically optimized for body text, excluding headings

I've added the following CSS code to my Docusaurus custom stylesheet: @import url("https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"); :root { --ifm-color- ...

With a GroupAvatar, my Avatar named "max" likes to dance to the beat of its own drum rather than following the rules of my

I am currently working on creating an AvatarGroup using MaterialUi. I have successfully applied a style to all my avatars, except for the avatar that is automatically generated by AvatarGroup when the "max" parameter is defined. const styles = makeStyl ...

Retrieve the bounding rectangle of a div that has the CSS style `display: contents` using the getBoundingClientRect

My objective is to apply styling and obtain the bounding box of an entire "row" within a CSS grid, including features like highlighting when hovering over it. To achieve the styling aspect, I make use of the display: contents property, so that the styles ...

Guide to importing the Slider Component in React using Material-UI

I am trying to incorporate the Slider Component from @material-ui/core into my React project. However, when I attempt to import the Slider using this code: import Slider from '@material-ui/lab/Slider';, it gives me an error stating Module not fou ...

Moving the words from textArea to each 'ol' element using JavaScript

When a word is entered in the textarea, it should be assigned to a specific class within an 'ol' tag. Each subsequent word will be placed in the next class sequentially. If there are no more words, the remaining classes should remain empty. <! ...

Exploring Checkbox Limiting with jQuery

Is there a more efficient approach to restrict the selection of checkboxes? I want the script to be adaptable depending on the applied class, which will always indicate the maximum allowed value (e.g., "limit_1" or "limit_2"). Currently, I'm creatin ...

Struggling to Implement Middleware on Router in ExpressJS?

In my application, I have both public and authenticated routes. The isAuthenticated function is used, for example, in a news controller. globalRouter: function (app) { app.use((req, res, next) => { logger.log("Endpoint: ", req.originalUrl); n ...

JavaScript error: Cannot use `.splice()` on [array] ("Uncaught TypeError: collisions.splice is not a function")

Struggling to remove specific items from an array in javascript, the [array].splice function seems to be causing issues. This piece of code is designed to detect collisions between SVG objects (for a game). The goal is to eliminate 3 objects that the pl ...

What is the best approach to managing a Symfony form that contains TWO CollectionType child forms?

I have been referring to the Symfony guide here which explains how to generate and save a collection of associated entities within a form. Following the example provided in the guide, I have successfully implemented the functionality for adding and removi ...

What is the best way to automatically select a checkbox when using ng-repeat on page

I'm looking to automatically check an input checkbox when the page loads, and if it's checked, subtract its value from the total. How can I tackle this issue? Here's the HTML snippet: <p>{{vm.TOTAL VALUE}}</p> <tr ng-repeat= ...

Changing Page Content with Ajax Post-Redirect Pattern

Just had a quick question. Can the redirected page be affected by ajax's success function? The code will provide a better explanation. $.ajax({ type: "POST", url: "/admin/done", data: { ...

What is the best method to set variables to zero using this array in JavaScript?

I am looking to extract strings from an array and set them all to zero. The original array consists of: var myArray = ["apple", "banana", "cherry", "date"]; The expected outcome should be: var apple = 0; var banana = 0; var cherry = 0; var date = 0; I ...

Which one is better: JSON in PHP or JSON in Javascript?

In my current project, I am working on a website that utilizes a PHP function to retrieve JSON data and present it on the webpage. However, I have noticed that when the page loads, it freezes until the response is successfully fetched, creating a visual di ...

Adding shadows to a ShaderMaterial in three.js: A step-by-step guide

My current challenge involves using a customized shader to incorporate gradient colors onto a model. However, I have noticed that the shader lacks clarity when it comes to displaying shadows with well-defined edges (as shown in the first image). It seems t ...

It is not possible to trigger an input click programmatically on iOS versions older than 12

Encountering a challenge in triggering the opening of a file dialogue on older iOS devices, particularly those running iOS 12. The approach involves utilizing the React-Dropzone package to establish a dropzone for files with an added functionality to tap ...

Utilize a method in Vue.js to filter an array within a computed property

I have a question regarding my computed property setup. I want to filter the list of courses displayed when a user clicks a button that triggers the courseFilters() method, showing only non-archived courses. Below is my current computed property implement ...

Unable to differentiate between .jsx and .js files

Here is the content of my JavaScript file: var React = require('react'); export default class AmortizationChart extends React.Component { render() { var items = this.props.data.map(function (year, index) { ret ...

Deactivate CS:GO Dedicated Server using Node.js child_process

I've been attempting to manage multiple Counter Strike: Global Offensive dedicated servers programmatically. The process is running smoothly, however, I am facing a challenge in shutting it down completely. Upon starting the server, two processes are ...