Первая проблема, с которой я столкнулся, была при принятии расчетов невозможных вещи. (как деление на ноль, квадратный корень от -1, 0 ^ Неположительный номер). Если что -то подобное произойдет, я бы не выведет ни одного, и что Pixel не будет добавлен в список точек, которые будут графики. < /P>
* Я показал все Различные попытки, которые я предпринял в этом, чтобы помочь вам понять, откуда я. Если вы хотите увидеть только мой самый текущий код и метод, спрыгните туда, где он говорит «ток». Br />
Мой первый метод был после того, как я приобрел все свои значения пикселей, я бы нарисовал их, используя функцию Pygame Aalines. Это сработало, за исключением того, что это не сработало, когда между фактическими моментами не хватало точек, потому что это просто протягивает линию через точки. (1 /x не сработает, но что -то вроде 0^x) < /p>
это то, что 1 /x выглядит как использование метода Aalines
Метод 1.1
Следующей идеей было разделить линию на две линии каждый раз, когда никто не был напечатан обратно. Это сработало для 1/x, но я быстро понял, что это будет работать только в том случае, если одно из поступлений в X значения точно приземлится на y -значении. 1 /x может работать, но 1 /(x+0,0001) не сработает. < /P>
Метод 2 < /h2>
Мой следующий метод состоял в том, чтобы преобразовать значение каждого пикселя X в соответствующее значение x точки в окне (например, (0,0) в окне графика фактически будет Pixel (249 249) в окне программы 500x500). Затем я бы рассчитывал каждое значение y со значениями x, которые я только что создал. Это будет работать для любой линии, у которой нет склона> 1 или
current < /h2>
Мой самый текущий метод должен быть Усовершенствованная рабочая версия метода 2.
Это трудно объяснить. В основном я бы взял значение x между каждым столбцом в окне отображения. Для каждого пикселя я бы сделал это только слева и справа от него. Затем я бы подключил эти два значения к выражению, чтобы получить два значения Y. Затем я бы пробежал каждое значение y в этом столбце и проверил ли текущее значение между обоими значениями Y, рассчитанными ранее. < /P>
[*]
Код: Выделить всё
size
[*]
Код: Выделить всё
xWin
[*]
Код: Выделить всё
yWin
pixelToPoint< /code> - это функция, которая принимает скалярное значение пикселя (только x или просто Y) и преобразует ее в соответствующее значение в окне графика < /li>
< /ul>
pixels = []
for x in range(size[0]):
leftX = pixelToPoint(x,size[0]+1, xWin, False)
rightX = pixelToPoint(x+1, size[0]+1, xWin, False)
leftY = calcPostfix(postfix, leftX)
rightY = calcPostfix(postfix, rightX)
for y in range(size[1]):
if leftY != None and rightY != None:
yPoint = pixelToPoint(y,size[1],yWin, True)
if (rightY = leftY):
pixels.append((x,y))
for p in pixels:
screen.fill(BLACK, (p, (1, 1)))
< /code>
Это исправило проблему в методе 2, чтобы пиксели не были подключены к непрерывной линии. Тем не менее, это не решит проблему метода 1 и при графике 1 /x, он выглядел точно так же, как метод Aalines. < /P>
--- ------------------------------------------------------ ------------------------------------------------------ ------------------------ < /strong> < /p>
Я застрял и не могу Подумайте о решении. Единственный способ придумать это, используя целую кучу значений x. Но этот способ кажется действительно неэффективным. Кроме того размер окна графика. График калькулятора для возможности графика любой функции (точно так же, как мой фактический графический калькулятор). < /p>
edit 1 < /h2>
Я только что попробовал использовать столько значений x, сколько и пикселей (окно отображения 500x500 вычисляет 250 000 y значения). < /p>
Это работало для каждой функции, которую я пробовал с ней, но она действительно медленная. Для расчета требуется около 4 секунд (он колеблется в зависимости от уравнения). Я осмотрел онлайн и нашел графические калькуляторы, которые практически мгновенно в их графике, но я не могу понять, как они это делают. быстро и эффективно. Должен быть какой -то алгоритм, кроме как использовать кучу значений x, чем можно достичь того, что я хочу, потому что этот сайт делает это ..
Подробнее здесь: https://stackoverflow.com/questions/290 ... python-2-7