Kolmice k tečně – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kolmice k tečně – Python – Fórum – Programujte.comKolmice k tečně – Python – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Lolo240
Newbie
15. 1. 2021   #1
-
0
-

 Dobrý den, co je prosím špatně na tomto kódu (asi je chyba v poslední části # Perpendicular line), že není zelená přímka kolmá k oranžové tečně? Děkuji.

Připojen obrázek.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patches
fig, ax = plt.subplots(figsize=(10,3))
x_start = -2
x_end = 32
x = np.linspace(x_start, x_end, 1000)

def f(x):
   a = 1
   mu1 = 5 
   mu2 = 25
   sigma = 2.5
   y1 = a*np.exp(-(x-mu1)**2/(2*sigma**2))
   y2 = a*np.exp(-(x-mu2)**2/(2*sigma**2))
   return y1+y2
y=f(x)

def deriv(f,x):
    h = 0.000000001                 # step-size 
    return (f(x+h) - f(x))/h        # definition of derivative

def tangent_line(f, x_0, a, b):
    x = np.linspace(a, b, 1000)
    y = f(x) 
    y_0 = f(x_0)
    y_tan = deriv(f,x_0) * (x - x_0) + y_0 
    P = (x_0, y_0)
    return y_tan

plt.plot(x, y)
plt.xlim(15, x_end)
plt.ylim(-0.05, 1.8)

# Chose a point and plot a tangent
C = 270
l = 30 
y_tan = tangent_line(f,x[-C],-2,32)
cor = 0.02

# Tangent
plt.plot(x[-C-l:-C+l], y_tan[-C-l:-C+l])  

# Perpendicular line
P1 = (x[-C-l:-C+l][0], y_tan[-C-l:-C+l][0])
ax.scatter(x[-C-l:-C+l][0], y_tan[-C-l:-C+l][0])
b = (x[-C], y[-C])
ax.scatter(x[-C], y[-C])
u = [b[0] - P1[0], b[1] - P1[0]]
plt.scatter(b[0] - P1[0], b[1] - P1[1]) 
u_per = (u[1], u[0])
shorten = 0.45
P_per = (b[0] + shorten * u_per[0], b[1] + shorten * u_per[1])
plt.scatter(b[0] + shorten * u_per[0], b[1] + shorten * u_per[1])
plt.plot([b[0], P_per[0]], [b[1], P_per[1]])
plt.show()
Nahlásit jako SPAM
IP: 2a00:1028:9197:cbb6:d0ad:79c:9a72:b8a2...–
gna
~ Anonymní uživatel
1891 příspěvků
15. 1. 2021   #2
-
0
-

Je kolmá, ale zase máš "zmáčknuté" zobrazení. To sakra na těch hodnotách nevidíš?

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

#2 gna
Děkuji a šlo by to nějak "zdeformovat", aby to bylo kolmé při daném rozměru obrázku a nastavených mezí?

Nahlásit jako SPAM
IP: 2a00:1028:9197:cbb6:d0ad:79c:9a72:b8a2...–
Řešení
Pavel
~ Anonymní uživatel
383 příspěvků
15. 1. 2021   #4
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

Tak tak kolmice nemuze byt kolma, protoze je spatne spocitana. 

P1 = (x[-C-l], y_tan[-C-l])
ax.scatter(*P1)
b = (x[-C], y_tan[-C])  # druhy bod musis taky brat z tecny
ax.scatter(x[-C], y_tan[-C])
u = [b[0] - P1[0], b[1] - P1[1]]  # tady jsi odecital spatne
plt.scatter(*u) 
u_per = (-u[1], u[0]) # tady musis prehodit znamenko
shorten = 0.45
P_per = (b[0] + shorten * u_per[0], b[1] + shorten * u_per[1])
plt.scatter(*P_per)
plt.plot([b[0], P_per[0]], [b[1], P_per[1]])

ax.set_aspect('equal', 'box') # tohle ti zajisti stejny meritko
plt.show()

Jinak pocitat tecnu na 1000 bodu je trosku overkill. kdyz staci 2.

Nahlásit jako SPAM
IP: 46.13.186.–
Pavel
~ Anonymní uživatel
383 příspěvků
15. 1. 2021   #5
-
+1
-
Zajímavé
Nahlásit jako SPAM
IP: 46.13.186.–
Lolo240
Newbie
15. 1. 2021   #6
-
0
-

#4 Pavel
Moc děkuji

Nahlásit jako SPAM
IP: 2a00:1028:9197:cbb6:d0ad:79c:9a72:b8a2...–
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, 13 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ý