アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

Javaのプログラミングを習い始めたものです。
標記の件ですが、プログラムを見てもどうしてそうなるかが
さっぱりわからない部分があります。

import java.awt.*;
import java.applet.*;

public class Example2 extends Applet{
public void paint(Graphics g){

// 座標軸を描く
g.drawLine(20, 10, 20, 130);
g.drawLine(20, 70, 230, 70);

// sinカーブを描く(20->220)
g.setColor( Color.blue);
int x0, y0, x1, y1;
x1 = 20; y1 = 70;
for (int i = 1; i <= 20; i++){
x0 = x1; y0 = y1;
x1 = 20+(int)(i/20.0*200);
y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI));
g.drawLine(x0, y0, x1, y1);
}

// cosカーブを描く(20->220)
g.setColor( Color.red);
x1 = 20; y1 = 20;
for (int i = 1; i <= 20; i++){
x0 = x1; y0 = y1;
x1 = 20+(int)(i/20.0*200);
y1 = 70-(int)(50.0*Math.cos(i/20.0*2*Math.PI));
g.drawLine(x0, y0, x1, y1);
}
}

これで、赤と青の曲線が描かれるわけですが、
x1 = 20+(int)(i/20.0*200);
y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI));
の部分がさっぱりわかりません。
今まで、"int"は変数宣言でしか用いられなかったのに、
今回突然この式の中に組み込まれており困惑しています。
また、iが回数を表すのはわかりますが、それを全回数で割ったり、
x1の式の中でなぜ200を掛けるのか、
y1の式の中でなぜ2を掛け、さらに円周率まで掛けるのかが
どうしても理解できません。

どなたか、ご教授願えませんでしょうか。
あるいは、参考になるサイトを教えていただければ助かります。

どうぞよろしくお願いいたします。

A 回答 (2件)

>x1 = 20+(int)(i/20.0*200);


>y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI));

ちと正確ではなかったので補足、どちらの計算も

(i/20.0*200)
(50.0*Math.sin(i/20.0*2*Math.PI))

↑部分の結果が整数ではなく、小数値を持つ結果が返るため
int型の変数に格納するためキャストしています。

この結果、小数部分が切り捨てられます。
    • good
    • 0
この回答へのお礼

2回も回答ありがとうございます!

キャストとは、型変換のことなのですね!URLもありがとうございます。
なぜ2や円周率を掛けるかも、円周を求めるためだということが
やっとわかりました(←もう算数なんてすっかり忘れているもので…)

お陰さまでスッキリしました。本当にありがとうございました。

お礼日時:2009/06/09 18:16

>これで、赤と青の曲線が描かれるわけですが、


>x1 = 20+(int)(i/20.0*200);
>y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI));
>の部分がさっぱりわかりません。
>今まで、"int"は変数宣言でしか用いられなかったのに、
>今回突然この式の中に組み込まれており困惑しています。

Math.sinの戻り値がdouble型でx1,y1がint型なのでキャストしてるだけです。

http://www.javaroad.jp/java_variable2.htm

>また、iが回数を表すのはわかりますが、それを全回数で割ったり、
>x1の式の中でなぜ200を掛けるのか、
>y1の式の中でなぜ2を掛け、さらに円周率まで掛けるのかが
>どうしても理解できません。

このへんを理解する必要はないんじゃないかな。
曲線を引くための計算程度に思えばいいんじゃないでしょうか。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!