Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Принцип наименьшего времени Ферма
''' Программа находит наибыстрый путь в двух средах с разными коэффициентами преломления. Используем принцип наименьшего времени Ферма. Алгоритм.Вычисляются и запоминаются два ближайших времени. Пока следующее время меньше предыдущего, увеличиваем координату x на 1. Как только след. время больше предыдущего — значит точка x найдена. ''' import turtle as t import math xa, ya, xb, yb = -200, 250, 200, -250 va, vb = 4, 1 x = xa # x — на границе раздела двух сред точка, которую мы ищем ta = math.sqrt((xa - x) * (xa - x) + ya*ya) / va tb = math.sqrt((xb - x) * (xb - x) + yb*yb) / vb win = t.Screen() win.setup(600,600) win.tracer(20) ln = t.Pen() ln.ht(); ln.pu(); ln.goto(-250,0); ln.pd(); ln.pensize(2); ln.forward(500) lu = t.Pen() lu.ht() lu.pu() lu.goto(xa, ya) lu.pencolor('green') lu.pensize(2) ld = t.Pen() ld.ht() ld.pu() ld.pencolor('blue') ld.goto(x, 0) ld.pensize(2) dt = -1 while dt < 0 and x < xb: win.update() ln.ht(); ln.pu(); ln.goto(-250,0); ln.pd(); ln.pensize(2); ln.forward(500) lu.clear() ld.clear() dt1 = ta + tb #print(ta+tb, dt, x) sa = math.sqrt((xa - x) * (xa - x) + ya*ya) sb = math.sqrt((xb - x) * (xb - x) + yb*yb) ta = sa / va tb = sb / vb dt2 = ta + tb if dt2 - dt1 > 0: # если нашли точку,то dt = 1 # конец цикла lu.pd(); lu.goto(x, 0); lu.pu(); lu.goto(xa, ya) ld.pd(); ld.goto(xb, yb); ld.pu(); ld.goto(x, 0) x += 1
run
|
edit
|
history
|
help
0
PYTHON 3 ÖDEV :)
0-1 Knapsack
Цифроразряды в разных системах счисления
PyRef
Well, this seems bad.
cod
gj2
inverse matrix gauss jordan
Kim
Подарки