https://en.wikipedia.org/wiki/Trefoil_knot
No i jak narysować takie coś?
Ogólnie chodzi mi o rysowanie rury wzdłuż dowolnej - zadanej krzywej: r = r(s,t) = (x(s,t), ...);
Wątek zablokowany 2017-10-30 23:54 przez furious programming.
https://en.wikipedia.org/wiki/Trefoil_knot
No i jak narysować takie coś?
Ogólnie chodzi mi o rysowanie rury wzdłuż dowolnej - zadanej krzywej: r = r(s,t) = (x(s,t), ...);
Takie coś wystarczy?
https://stemkoski.github.io/Three.js/
pod Shapes jest słowo klucz "torus knots"
Spine napisał(a):
Takie coś wystarczy?
https://stemkoski.github.io/Three.js/
pod Shapes jest słowo klucz "torus knots"
Nie widzę tam koniecznych wzorów, o które mi chodzi.
Przykładowo:
ta rura dla okręgu to torus, czyli tu masz krzywą typu okrąg:
x = cos(t), y = sin(t), z = 0
i to jest cienka linia zaledwie, ale ja chcę grubą rurę, czyli torus, który jest tak opisany:
x,y,z = (R+r*cos(s))cos(t), (R+rcos(s))sin(t), rsin(s);
gdzie: R = 1 w tym przypadku (promień okręgu);
a pod r możemy wsadzić np.: r = 0.2 jako promień tej rury, która biegnie wzdłuż okręgu.
A właściwie to jest ta postać o którą ci chodzi, tylko zamiast s i t jest u i v. - jarekczek dziś, 20:38
Pewnie że to jest ten sam wzór na torusa, czyli na rurę wzdłuż okręgu.
Tylko że mi chodzi o generalny wzór, czy na dowolną rurę, która biegnie wzdłuż zadanej krzywej:
x(t), y(t), z(t) -> rura o promieniu r > 0;
w szczególności dla r=0 otrzymamy z powrotem tą krzywą, co łatwo sobie uzmysłowić: krzywa to rura, ale o grubości zerowej.
Konkretnie:
mamy ten knot, czyli krzywą: r(t) = sint+2sin2t, cost-2cos2t, -sin3t
no i jakie jest teraz równanie poszukiwanej rury dla tej krzywej?
r(s,t) = ?
To jest problem matematyczny. Trzeba wyliczyć pochodną, prostopadłą i okrąg. Na pewno ktoś już to zrobił, ale wzór będzie skomplikowany.
Jeżeli nie ma gotowca, to możesz dorobić w javascripcie algorytm i podpiąć się do tego Three.js.
To już jest prosta geometria 3d.
jarekczek napisał(a):
To jest problem matematyczny. Trzeba wyliczyć pochodną, prostopadłą i okrąg. Na pewno ktoś już to zrobił, ale wzór będzie skomplikowany.
Na pewno to ktoś był już na Marsie, w związku tym nie ma już po co tam lecieć. :)
Jeżeli nie ma gotowca, to możesz dorobić w javascripcie algorytm i podpiąć się do tego Three.js.
- wyliczenie prostej k z 2 ostatnich punktów (P,Q) krzywej r(s, t)
- wyliczenie prostej m prostopadłej do k pod kątem u od jakiejś bazy
- wyliczenie punktu S w odległości r od punktu Q wzdłuż prostej m
Punkt S jest punktem powierzchni rury.To już jest prosta geometria 3d.
Skoro to tylko taka 'prosta geometria 3d' no to podaj tej wzór.
Równania tej rury:
x = sin(t)+2sin(2t)+((sin(t)-4sin(2t))cos(s)+3cos(3t)(cos(t)+4cos(2t))sin(s)/sqrt(9cos(3t)^2+8cos(3t)+17))*0.2/sqrt(8cos(3t)+17)
y = cos(t)-2cos(2t)+((cos(t)+4cos(2t))cos(s)-3cos(3t)(sin(t)-4sin(2t))sin(s)/sqrt(9cos(3t)^2+8cos(3t)+17))*0.2/sqrt(8cos(3t)+17)
z = -sin(3t) + (17 + 8cos(3t))sin(s)*0.2/sqrt((8cos(3t)+17)(9cos(3t)^2+8cos(3t)+17))