javaアプレットでy=x^2のグラフを描写する方法

このQ&Aのポイント
  • javaアプレットを使用してy=x^2のグラフを描写する方法について教えてください。
  • 現在の状態ではグラフの右側しか画面に現れません。軸の移動をすればよいと思うのですが、どのように修正すればよいのでしょうか?
  • コードの修正方法もお教えいただけると幸いです。
回答を見る
  • ベストアンサー

javaアプレットでのy=x^2のグラフ

javaアプレットでy=x^2のグラフを描写したいのですが、現在の状態ではグラフの右側しか画面に現れません。軸の移動をすればよいと思うのですが、どのように修正すればよいのでしょうか? import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class test1 extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); int x,yp=100,xp=0; for(x=0;x<200;x++){ int y=(int)(x*x)*(-1)+100; g.drawLine(xp,yp,x,y); xp = x; yp = y; } } }

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

for(x=0;x<200;x++) で、0≦x<200の範囲でxが変化して、 y=-x^2+100の計算をしているのですから、その範囲しか表示されない(=放物線の半分しか表示されない)のは当り前です。 数学のグラフを書くときは、 1) 数学での座標(x,y)で計算する 2) 1)で求めた座標(x,y)を画面上の座標(x',y')に変換する という手順を踏むのがよいでしょう。 x' = x方向の縮小拡大率 * x + 数学での(0,0)に対応する画面上の座標でのx'の値 y' = -1 * y方向の縮小拡大率 * y + 数学での(0,0)に対応する画面上の座標でのy'の値 ※ 数学のyと画面のy'は大小と上下の関係が逆になっているので、-1倍します このプログラムでも、実際に変数yには x^2ではなく、 int y=(int)(x*x)*(-1)+100 と ・y方向の縮小拡大率 = 1 ・数学での(0,0)に対応する画面上の座標でのy'の値 = +100 で変換した値が使われています。

関連するQ&A

  • javaアプレットの課題について

    大学の授業の課題についてなんですが、 javaアプレットを使って 「徐々に大きな四角形を表示させ、ある程度の大きさの四角形になったらまた最初に戻り、さらにボタンを表示させ、ボタンを押す度に四角形の拡大をストップ、スタートさせるプログラムを作れ。また、マウスでクリックした部分を中心に、徐々に大きな四角形を表示させるようにもするように。」 という、自分でも書いていて分からなくなりそうな内容の課題が出されまして、先生などのアドバイスを頼りに import java.applet; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Color; import java.awt.Button; public class Report1 extends Applet implements ActionListener,Runnable { int x = 10; int y = 10; Button bt; public void init() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } }); { bt.setLabel("pause"); } while{ } if() repaint(); public void paint(Graphics g) { g.setColor(Color, white); g.fillRect(0, 0, 400, 400); } public void update(Graphics g){ paint(); 何とか上のような感じにまではこぎつけたのですが、 ここからは正直どうすればいいのか検討がつかず お手上げ状態なんです... どなたか解答又は参考になるサイトがあれば 教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • JAVAのアプレットのアニメーションの質問

    javaのアプレットに関する質問なんですが、今次の条件でアニメーションを作っているんですが、どうしても解決できない問題があります。 赤い長方形が左から右に動いていくプログラムを作成する。 ・ 長方形が描画領域 の右端に消えると左端から再 度出現するようにせよ。 ・ Reverseと書かれたボタンを押すと長方形の進行方 向が左右反対になる。 ・ このとき、左右どちらの端に長方形が消えた場合も 反対端から長方形は出現する。 ・ 長方形をクリック(ボタン押下)すると長方形の色が 変化する。 ・ 赤い長方形であれば青に、青い長方形であれば赤 に変化する。 この条件でつくろうと思っているのですが、長方形をクリックしたときに、色の変化がどうしてもできません。どこに問題があるか分かりません。御教授お願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.Button; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseListener; public class Report2 extends Applet implements Runnable,ActionListener,MouseListener{ int x=100; int y=50; int width=80; int height=120; int dir=-2; int w; int z; Button bt; boolean direction; boolean colorRed; public void actionPerformed(ActionEvent ae){ if(direction==true){ direction=false; } else{ direction=true; } } public void init(){ bt=new Button("Reverse"); add(bt); bt.addActionListener(this); Thread th; th =new Thread(this); th.start(); addMouseListener(this); } public void mouseClicked(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mousePressed(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void run() { while(true){ x++; if(x==400){ x=-80; } if(direction==true){ x=x+dir; } else{ } repaint(); try{ Thread.sleep(30); } catch(InterruptedException e){} } } public void paint(Graphics g){ g.setColor(Color.white); g.fillRect(0,0,400,200); g.setColor(Color.red); g.fillRect(x,y,80,120); if(colorRed=true){ g.setColor(Color.red); } if(colorRed=false){ g.setColor(Color.blue); } g.fillRect(x,y,width,height); g.setColor(Color.black); g.fillRect(x,y,10,10); } }

    • ベストアンサー
    • Java
  • アプレットの配列をテキスト形式で保存する

    ある画像の上をマウスクリックするとそこに赤いマーカーが表示され、さらにそのマーカーの座標をテキスト形式で保存できるプログラムを組みたいと考えています。マーカー表示はできましたが、保存方法がまったくわかりません。35箇所のマーカー座標を保存したいのですが…。 どなたか教えていただけませんでしょうか。 ブラウザ上で動作させたいので、JavaAppletにて組んでいます。 import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class sample extends Applet{ private int[] xpos = new int[35]; private int[] ypos = new int[35]; private int num = 0; Image imgs; public sample(){ addMouseListener(new MyMouseAdapter()); } public void init(){ imgs = getImage(getDocumentBase(),"sample.gif"); } public void paint(Graphics g){ g.drawImage(imgs,0,0,this); g.setColor(Color.red); for(int i = 0; i < num; i++){ g.fillOval(xpos[i]-2, ypos[i]-2, 4, 4); } } class MyMouseAdapter extends MouseAdapter { public void mouseClicked(MouseEvent e){ if(num >= 35){ return; } int x,y; x = e.getX(); y = e.getY(); xpos[num] = x; ypos[num] = y; num++; Graphics g = getGraphics(); g.setColor(Color.red); g.fillOval(x-2, y-2, 4, 4); } } }

  • f(x)=xのf'(x)と∫f(x)dxのグラフ化

    f(x)=xのf'(x)と∫f(x)dxのグラフ化したいのですがここからどうすればいいのか分からず足踏みしてます。ご教授ください。 積分区間は0~xです。 import java.awt.*; import java.awt.event.*; public class graphics0 extends Frame { // コンストラクタ public graphics0(){ setSize(500, 500); setVisible(true); setTitle("graphics0"); // メッセージ処理 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } // メインメソッド public static void main(String[] args){ new graphics0(); } // ペイントメソッド public void paint(Graphics g){ //ここに絵をかくコードを書く // 中心座標 int ox = 250; int oy = 250; // グラフの幅 int width = 200; int height = 200; //直線描画のための2点(x0,y0), (x1, y1) double x0, y0; double x1, y1; // 刻み幅 double d = 0.001; double n = (int) (1.0 / d); // 軸の描画 g.drawLine(50, 250, 450, 250); g.drawLine(250, 50, 250, 450); x0 = 0; y0 = 0; x1 = d; for(int i = 0; i < n; i++){ y1 = x1 * x1; g.drawLine( (int) (x0 * width) + ox, -((int)(y0 * height) -oy), (int) (x1 * width) + ox, -((int) (y1 * height) - oy)); x0 += d; x1 += d; y0 = y1; } } } よろしくお願いいたします。

  • アプレットについて

    appletviewerで実行したところ アプレットの枠しか出てきません。中身が現れないのです。どうしたらよろしいでしょうか? import java.applet.Applet; import java.awt.*; /* <APPLET CODE="JFont2.class"WIDTH=500 HEIGHT=100> </APPLET> */ public class JFont2 extends Applet{  public void pait(Graphics g){   String ss="Djia@go",s1;   int baseline1=60,baseline2;   int x1=30,y1;    Font ft=new Font("Serif",Font.PLAIN,48);  g.setFont(ft);  g.drawString(ss,x1,baseline1);     FontMetrics fm=getFontMetrics(ft);   //アクセント上部に線を引く         y1=baseline1-fm.getAscent();     g.drawLine(10,y1,220,y1); } }

    • ベストアンサー
    • Java
  • Javaのアプレットについて

     Javaのアプレットでゲームを作ろうとしているのですが、フリー音楽制作ソフトの「Domino」を起動したままアプレットを使うと処理速度が速くなってしまうことがわかりました。  一応自分なりに原因を考えたのですが確証がないので、原因をご存知の方がいらっしゃれば教えていただきたいです。また、そうでなくても、何か参考になることや、皆さんなりの考え、どのようなパソコン・ソフトで同じ症状が出るのか、など、些細なことでもいいので教えていただきたいです。  わからないなりに僕が考えたのは、Dominoが使っているシステム時間とアプレットのシステム時間にはつながりがあって、Domino側がそこをいじってしまうせいでアプレットがおかしくなっているのではないか、というものです。そもそもアプレットの書き方がおかしいのかもしれませんが・・・(「考えた」ってほどよく考えてない・・・)  一応確認している範囲では、「Domino」、「Music Studio Producer」、「RPGツクールXP」などのDirectX使用ソフト、「YouTube」などの動画サイト、などなどを同時に起動していると処理が速くなることを確認しています。  問題が解決できないものであったとしても、説明書に対処法を書きたいので、よろしくお願いします。  一応、適当に作った実験用のプログラムを書いておきます。 ---------------------------------------------------- import java.applet.Applet; import java.awt.*; public class Test extends Applet implements Runnable{ Thread thread; Image bufferImage; Graphics bufG; int to_x,to_y,to_x2,to_y2,count,time; long preTime, nowTime; final int fps = 60; final double frameTime = 1000 / fps; public void init(){ to_x=to_y=to_x2=to_y2=0; count=0; time=0; preTime = 0; nowTime = 0; requestFocus(); thread = new Thread(this); thread.start(); } public void run(){ while(true){ count++; if(count>=60) { count=0; time++; if(time>=60) { time=0; } } to_x = (int)(200 * Math.cos(Math.PI*(time-15)/60*2)) + 400; to_y = (int)(200 * Math.sin(Math.PI*(time-15)/60*2)) + 240; to_x2 = (int)(100 * Math.cos(Math.PI*(count-15)/60*2)) + 130; to_y2 = (int)(100 * Math.sin(Math.PI*(count-15)/60*2)) + 350; while(nowTime-preTime < frameTime){ nowTime = System.currentTimeMillis(); } preTime = nowTime; repaint(); } } public void paint(Graphics g){ bufferImage = createImage(640,480); bufG = bufferImage.getGraphics(); bufG.setColor(Color.black); bufG.fillRect(0, 0, 640, 480); bufG.setColor(Color.white); bufG.drawLine(400,240,to_x,to_y); bufG.drawLine(130,350,to_x2,to_y2); bufG.setFont(new Font("Serif",Font.BOLD + Font.ITALIC,14)); bufG.drawString("time = " + time,20,30); bufG.drawString("milli_second = " + 1000*count/60,20,60); g.drawImage(bufferImage, 0, 0, this); } public void update(Graphics g){ paint(g); } }

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • javaのsetColor、setBackgroundについて

    プログラミング初心者で、困っています。教えてください。Javaで g.setColor(Color.red); というサンプルに良くあるコードをコンパイルしてもエラーになってしまいます。 import java.applet.Applet; import java.awt.Graphics; public class First2 extends Applet{ public void init() { setBackground(Color.yellow); } } をコンパイルすると C:\myJ\test1>javac First2.java .\Color.java:7: ')' がありません。 g.setColor(Color red); ^ First2.java:6: シンボルを見つけられません。 シンボル: 変数 yellow 場所 : Color の クラス setBackground(Color.yellow); ^ .\Color.java:6: java.awt.Graphics は abstract です。インスタンスを生成することは できません。 Graphics g = new Graphics(); ^ .\Color.java:7: シンボルを見つけられません。 シンボル: 変数 Color 場所 : Color の クラス g.setColor(Color red); ^ エラー 4 個 となってしまうんです。 ネット上のいろんなサイトでは問題なく動作するように 書かれていますが、なぜエラーになるんでしょう? どうしたら解決できますか?ご指南下さい。 ちなみにjavaのversion は 1.6 です。

    • ベストアンサー
    • Java
  • 画面のちらつきの原因が知りたいです

    JAVAの初心者です、宜しくお願いします。 下のようなプログラムを書きました。 「public void paint(Graphics g){ ~ repaint();」とすると、画像がちらつきます、しかし、「repaint();」を消すとちらつかなくなります、この原因が分かりません。 一体何故このような現象が起こるのでしょうか、宜しくお願いします。 ========================================================== import java.applet.Applet; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Oval_Rec_1_071128 extends Applet implements MouseListener , ActionListener { int x1 ; int y1 ; int xh = 50 ; int yv = 50 ; Button bt1 ; Button bt2 ; public void actionPerformed(ActionEvent ae){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void init() { setBackground(Color.yellow); addMouseListener(this); bt1 = new Button("push"); bt1.setFont(new Font("SansSerif", Font.BOLD, 20)); bt1.setBackground(Color.black); bt1.setForeground(Color.lightGray); add(bt1); bt1.addActionListener(this); bt2 = new Button("change_circle"); add(bt2); bt2.addActionListener(this); } public void mousePressed(MouseEvent e) { x1 = e.getX(); y1 = e.getY(); xh = e.getX(); yv = e.getY(); // repaint(); //comment out } public void paint(Graphics g) { g.setColor(Color.red); g.setFont(new Font("Serif",Font.BOLD,24)); g.drawString("Hello Applet World ! !" , 50 , 50); g.setColor(Color.blue); g.drawLine( 100 , 100 , 500 , 500); g.setColor(Color.cyan); g.fillOval( x1 , y1 , xh , yv); g.setColor(Color.magenta); g.fillRect( xh , yv, x1/10 , y1/10 ); repaint(); } }

    • ベストアンサー
    • Java

専門家に質問してみよう