Spirála kolem křivky zadané listem bodů – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spirála kolem křivky zadané listem bodů – Python – Fórum – Programujte.comSpirála kolem křivky zadané listem bodů – Python – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Lolo240
Newbie
28. 1. 2021   #1
-
0
-

 Dobrý den, jak prosím nasměrovat tu spirálu, aby byla kolem oranžové křivky? Děkuji

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from numpy import sin, cos

A = [-0.1646169553829357, -0.18045534297929358, -0.19607272004818602, -0.211354488132617, -0.22616904489940454, -0.24036624624003963, -0.25377639986609546, -0.26621030641288784, -0.27746107555189253, -0.287309176814374, -0.2955313683720342, -0.3019143406048014, -0.3062726740423563]
B = [0.13385167110565344, 0.13161004556697875, 0.12815132761818687, 0.1234273074581178, 0.11739746666382476, 0.11003213593352616, 0.10131707253912245, 0.09125949610772532, 0.07989522181968708, 0.06729724452652447, 0.053583847907859236, 0.038924841462667246, 0.023542804704085943]

# Plot figure with size
figsize=(10,5)
fig = plt.figure(figsize=figsize)

# Axes 
ax = fig.gca(projection = '3d')
azimuth=90
elevation=90
ax.azim = azimuth    # y rotation (default=270)
ax.elev = elevation  # x rotation (default=0)

r = 0.1
c = 0.5
t = np.linspace(0, 5000, 100)

# parametric equation of a helix
x = r*cos(t)
y = r*sin(t)
z = c*t
ax.plot(x, y, z, zdir='z', lw=2)
ax.plot(A, B)
plt.show()

Připojen obrázek.

Připojen obrázek.

Nahlásit jako SPAM
IP: 2a00:1028:9197:cbb6:1d82:2bd7:26d8:9dd5...–
gna
~ Anonymní uživatel
1851 příspěvků
28. 1. 2021   #2
-
0
-

Asi střed té spirály posuneš na tu křivku :-)

Nahlásit jako SPAM
IP: 213.211.51.–
Lolo240
Newbie
28. 1. 2021   #3
-
0
-

#2 gna
Jenže ta křivka není rovná, zatímco ta spirála ano.

Nahlásit jako SPAM
IP: 2a00:1028:9197:cbb6:1d82:2bd7:26d8:9dd5...–
gna
~ Anonymní uživatel
1851 příspěvků
28. 1. 2021   #4
-
+1
-
Zajímavé

Ta spirála jsou body na několikrát obkreslené kružnici, jejíž střed se posunuje. A může se posunovat jakkoliv. 

A = [-0.1646169553829357, -0.18045534297929358, -0.19607272004818602, -0.211354488132617, -0.22616904489940454, -0.24036624624003963, -0.25377639986609546, -0.26621030641288784, -0.27746107555189253, -0.287309176814374, -0.2955313683720342, -0.3019143406048014, -0.3062726740423563]
B = [0.13385167110565344, 0.13161004556697875, 0.12815132761818687, 0.1234273074581178, 0.11739746666382476, 0.11003213593352616, 0.10131707253912245, 0.09125949610772532, 0.07989522181968708, 0.06729724452652447, 0.053583847907859236, 0.038924841462667246, 0.023542804704085943]
# mene dementni cisla
A = [a * 1000 for a in A]
B = [b * 1000 for b in B]

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.azim = 90
ax.elev = 90


ax.plot(A, B)


r = 50
t = np.linspace(0, 100, 1000)
x = r * cos(t)
y = r * sin(t)
z = t
ax.plot(x, y, z)


count = 10  # pocet kruznic
detail = 40  # pocet bodu na kruznici
# puvodni krivku prolozim at ma dost bodu pro spiralu
aa = scipy.ndimage.zoom(A, count * detail / len(A))
bb = scipy.ndimage.zoom(B, count * detail / len(A))
# a pak kolem ni udelam spiralu
angles = np.linspace(0, count * 2 * np.pi, len(aa))
# s prohozenym X a Z at se otoci a jakoby navlekne na tu krivku
x = np.zeros(len(angles)) + aa
y = r * sin(angles) + bb
z = r * cos(angles)
ax.plot(x, y, z)


plt.show()

Připojen obrázek.

Připojen obrázek.

Nahlásit jako SPAM
IP: 213.211.51.–
Lolo240
Newbie
28. 1. 2021   #5
-
0
-

#4 gna
Moc děkuji

Nahlásit jako SPAM
IP: 2a00:1028:9197:cbb6:1d82:2bd7:26d8:9dd5...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý