Stap 2: 3D curve
Nu moeten we nemen de knoop-raster en zet hem in de 3D-curven. Laten we beginnen door een lokale coördinaatruimte voor onze knoop raster toe te wijzen.Dus nu we hebben een (u, v) coördinaat voor elk punt in onze raster. Houd in gedachten dat de knoop terugloopt, zodat een u voor 0 hetzelfde als een u van 1 zullen.
Nu, laten we definiëren een cilinder met een diameter D en hoogte H:
Als we de z-as ingesteld op de hoofdas van de cilinder en zet de oorsprong in het midden van de cilinder, wij kunnen koppelen onze (u, v) coördinaten naar een 3D punt met de volgende vergelijkingen:
x = D/2*cos(360*u)
y = D/2*sin(360*u)
z -H/2 = *(1-v) + H/2 * v
Nu we lopen via onze raster, zoals wij in de eerste stap deden en een 3D punt neerzetten op elk punt van de grid met behulp van de bovenstaande vergelijkingen. We kunnen vervolgens verbinden van de punten als een curve met behulp van Catmull-Rom interpolatie. Merk op dat in de afbeelding hieronder H is ingesteld op een kleinere waarde dan de werkelijke hoogte van de cilinder, dat is waarom de curve niet helemaal naar de boven- en onderkant gaat.
Nu moeten we ter compensatie van de punten aan rekening voor wanneer we aan de curve, alsmede de overs en unders dikte geven. We moeten de punten naar buiten van de cilinder op elk rasterpunt verschoven. We gebruiken voor het berekenen van de richting die we moeten gecompenseerd vergelijkingen zeer gelijkaardig aan hierboven, behalve z zal altijd 0 en D irrelevent is aangezien wij een eenheidsvector lengte willen:
NX = cos(360*u);
NY = sin(360*u);
NZ = 0;
Na verrekening van de curve krijgen we het volgende: