お世話になります。
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を掛け、さらに円周率まで掛けるのかが
どうしても理解できません。
どなたか、ご教授願えませんでしょうか。
あるいは、参考になるサイトを教えていただければ助かります。
どうぞよろしくお願いいたします。
No.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型の変数に格納するためキャストしています。
この結果、小数部分が切り捨てられます。
2回も回答ありがとうございます!
キャストとは、型変換のことなのですね!URLもありがとうございます。
なぜ2や円周率を掛けるかも、円周を求めるためだということが
やっとわかりました(←もう算数なんてすっかり忘れているもので…)
お陰さまでスッキリしました。本当にありがとうございました。
No.1
- 回答日時:
>これで、赤と青の曲線が描かれるわけですが、
>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を掛け、さらに円周率まで掛けるのかが
>どうしても理解できません。
このへんを理解する必要はないんじゃないかな。
曲線を引くための計算程度に思えばいいんじゃないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- 数学 数学直線の方程式とベクトル方程式について 直線の方程式で 点(x1,y1)を通り、直線ax+by+c 1 2022/08/12 12:13
- 数学 写真の図は中心(a,b)半径rの円とその円周上の(x1,y1)における接線lと円の中心とlを結ぶ任意 4 2023/08/08 16:20
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- 数学 数学(ベクトル) 単位ベクトルの一次結合で一般の空間ベクトルは表せる という式なのですがなぜ 「x1 3 2023/04/10 01:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のボタンを配置し、それぞ...
-
式の型は配列型で int に解決済...
-
java spring でエラーが出て困...
-
(Swing)JTextFieldを半角のみ入...
-
c# デリゲート関連の命名について
-
Javaでポインタ的なことはでき...
-
C#で実行時にメソッドの返り値...
-
sin曲線とcos曲線を描くプログ...
-
javaで次のような図の絵を描く...
-
行の途中から読み込む方法
-
初心者ですが、今javaで簡単な...
-
「配列定数は、イニシャライザ...
-
javaのエラーの意味がわかりま...
-
【C#】フォームをなめらかに移動
-
C++からC#のdllを参照する際、...
-
6桁の数字を重複なしでランダム...
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
三目並べ(Tick-Tack-Toe)をJav...
-
C#2005 Imagelistの余白の除去...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
DataSet(DataTable)の使い方
-
「配列定数は、イニシャライザ...
-
JUnit4のアノテーションについて
-
C#で実行時にメソッドの返り値...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
c# デリゲート関連の命名について
-
java streamでenum配列への変換
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
-
アンマネージDLLで、ダイアログ...
-
【C#】フォームをなめらかに移動
-
(Swing)JTextFieldを半角のみ入...
-
Javaで簡単なアニメーションを...
-
javaのエラーの意味がわかりま...
-
C#で判断文(三択)の省略形は...
-
共有メモリについて
おすすめ情報