Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2012, 11:06   #1
Djek-vrn
Новичок
Джуниор
 
Регистрация: 02.06.2009
Сообщений: 1
По умолчанию Создать апплет, осуществляющий построение графика функции

Всем доброго времени суток. Есть задание:

Создать апплет, осуществляющий построение графика функции y=10sin(2x+1), пределы изменения оргументов задаются в соответствующих полях. Реализовать кнопки «Чертить» и «Очистить». Показать оси координат и деления со шкалой на них.

Есть код:
Код:
 
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
 
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;
 
import sun.security.util.PendingException;
 
public class PainterApplet extends java.applet.Applet {
    Button PaintButton = null;
    Button ClearButton = null;
    TextField StartField = null;
    TextField EndField = null;
    int width = 600;
    int height = 600;
    int step = 2;
 
    public PainterApplet() {
        super(); 
    } 
 
    public void init() {
        setSize(new Dimension(width, height));
        StartField = new TextField();
        EndField = new TextField();
        StartField.setColumns(10);
        EndField.setColumns(10);
        PaintButton = new Button("Чертить");
        PaintButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) { 
                repaint(); 
            } 
        }
        );
        ClearButton = new Button("Очистить");
        ClearButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) { 
                clear(); 
            } 
        }
        );
        add(PaintButton);
        add(ClearButton);
        add(StartField); 
        add(EndField); 
    } 
 
    public void paint(Graphics g)
    {
        g.setColor(Color.red);
        drawAxies(g);
        drawSin(g);
    }
    private void drawAxies(Graphics g)
    {
        int y;
        int j=0; int k=0;
        g.setColor(Color.WHITE);
        g.fillRect(0,0,width,height/2);
        g.setColor(Color.lightGray);
        while (j<height) {
            g.drawLine(j,height/2+12,j,height/2-12);
            j+=30;
        }
        while (k<width){
            g.drawLine(width/2+12,k,width/2-12,k);
            k+=30;
        }
        g.setColor(Color.BLACK);
        g.drawLine(width/2,0,width/2,height);
        g.drawLine(0,height/2,width,height/2);
        g.drawString("0",width/2,height/2);
        g.drawString("-"+"\u03c0",width/2-120,height/2+12);
        g.drawString("\u03c0",width/2+120,height/2+12); 
    }
    private void clear()
    {
        Graphics g = getGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, width, height);
        drawAxies(g);
    }
 
    private void drawSin(Graphics g)
    {
        String start = StartField.getText();
        String end = EndField.getText();
        double s = 0.0;
        double e = 0.0;
        try
        {
            s = Integer.parseInt(start);
            e = Integer.parseInt(end);
            
        }
            catch (ParseException exeption) 
            {
                s = 0.0;
                e = 0.0;
            }   
        for (int x = (int)s; x <= e; x += step)
        {
            g.drawLine((int)(x + width/2), f(x), (int)(x + step + width/2), f(x+step));
        }
    }
 
    private int f(int x)
    {
        return (int)((10.0*Math.sin(2*x+1)) + height/2);
    }
}
А проблема в том, что этот апплет строит график как то не так=( (см. рис1)
А должен быть такой график (см. рис2)

Скажите пожалуйста, что не так?
Заранее спасибо за помощь
Изображения
Тип файла: jpg рис 1.jpg (19.3 Кб, 142 просмотров)
Тип файла: jpg рис 2.jpg (23.0 Кб, 120 просмотров)
Djek-vrn вне форума Ответить с цитированием
Старый 03.06.2012, 02:14   #2
Genco
Пользователь
 
Аватар для Genco
 
Регистрация: 16.11.2010
Сообщений: 46
По умолчанию

Потому что на первом рисунке синус считается в пикселях и от пикселей, а потом аккуратно рисуется в центре, на втором же результат работы программы, где хоть как-то учтен пересчет единиц.
Бложегов не имею, но найти меня можно в уютном междусобойчике тут: http://coverduck.ru
"Форум программистов, анархистов, анонимусов и просто любителей с интересом пообщаться"
Genco вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графика функции, мигание(затухание) шарика в минимумах функции kas1m_rus Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2012 20:28
построение графика функции Никита. Visual C++ 0 24.05.2012 21:46
Построение графика функции Bounty Hunter Общие вопросы C/C++ 1 18.05.2012 19:54
Построение графика функции f(x) ZVEREX Помощь студентам 0 26.05.2010 13:12
Графика. Построение функции AngelOfDeath Общие вопросы Delphi 2 14.10.2008 13:44