• 締切済み

はじめまして。今回、大学でのjavaの課題の最後の方がわからなくって、

はじめまして。今回、大学でのjavaの課題の最後の方がわからなくって、皆さんにアドバイスをいただきたいと思い質問させていただきます。問題の文章が「2つの端点が(1,1) (8,8)であるLineSegment を1 つ作成し、順次、linearTransfer した線分を10 個作成し、10 個の線分の形状を画面表示するプログラムを作成しなさい。10 個の線分は、後に利用することを考慮し、配列に格納しなさい。」というもので、ソースが、 /*キーボード入力がありますが、すでに与えられており、字数の関係上省略させていただきます*/ class Point{ double x;//double xを定義 double y;//double xを定義 Point(){ this.x = 0;//xを0にする this.y = 0;//yを0にする } Point(double x, double y){//ポイント内のx,y を定義 this.x = x; this.y = y; } Point linearTransfer(){ double x = 6 * this.x + 4 * this.y; double y = -2 * this.x + 1 * this.y; Point p = new Point(x , y); return p; } } class LineSegment{ public static void main(String[] args){ Input in = new Input(); double x = in.inputDouble("Input Point :"); double y = in.inputDouble("Input Point :"); double x1 = in.inputDouble("Input Point :"); double y1 = in.inputDouble("Input Point :"); Point p = new Point(x, y); p = p.linearTransfer(); Point q = new Point(x1, y1); q = q.linearTransfer(); ここまでできたのですが、ここからができなくって困っております。皆さんアドバイス宜しくお願いいたします。

  • Java
  • 回答数3
  • ありがとう数8

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

座標の入力方法なんてどうでもいいのよ。 そんなところは最後に調整すればいいところよ。 考え方をいくつか書いていくわね。 ・mainメソッドを持つクラスはまったく別に用意するべきよ。 ・LineSegmentはプロパティとして二つの座標を持つオブジェクト。 ・linearTransferメソッドの引数はLineSegment。 ・linearTransferメソッドの戻り値もLineSegment。 ・linearTransferメソッドとは別にpointTransferメソッドを作るときれいよ。 ・pointTransferメソッドの引数と戻り値はPoint ・まず最初に、一つ目のLineSegmentを作成 あとはこんな感じ LineSegment[] result = new LineSegment[10]; Point p = new Point(x, y); Point q = new Point(x1, y1); LineSegment start = new LineSegment(p, q); result[0] = linearTransfer(start); for (int i = 1; i < 10 ;i++ ) { result[i + 1] = linearTransfer(result[i]); } あとはここに描画をつけるだけね。 そのくらいは自分でやってね。

12ponpon12345
質問者

補足

返信遅くなって申し訳ありません。 丁寧なアドバイスありがとうございます。アドバイスをもとに頑張って終わらせます。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

最後のほうというか ほとんどできていなんじゃないかしら? というか問題が理解できていなんじゃなくて? まず 2つの端点が(1,1)(8,8)であるLineSegment これを表現するところからはじめないとダメよ。

12ponpon12345
質問者

補足

そうなんですか!?正直問題をあんまり理解できてません。考えとしては、その2つの端点の値はキーボードから入力して、linearTransferした後、計算した値をまたlinearTransferで計算して、それを10回繰り返すと考えています。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

今の段階で「できていること」「できていないこと」を, それぞれ日本語で書いてみてください. 「できていないこと」について, なぜ「できていない」のか原因はわかりますか?

12ponpon12345
質問者

補足

今できているのが、キーボードから入力して格納後、その値をLinearTransferで計算して画面に出力するところまでできてます。できていないのが、順次、linearTransfer した線分を10 個作成するところで、配列をつくりfor文でループさせるのかなぁ、と考えたのですが、どのように書けばいいのかが良くわかっていません。

関連するQ&A

  • C言語の課題について

    何度も申し訳ありません。 http://okwave.jp/qa/q7877142.html や http://okwave.jp/qa/q7878947.html より、回答を受けてプログラムを作成しているのですが、 衝突時の時間と座標をどのように作成すれば良いか分からなく、 一秒後の点Pの位置を算出したのですが、合っているかどうかが分かりません。 非常に難しくて困っています。お助け下さい。 ソースコード #include <stdio.h> #include<math.h> int main(void) { float p,v,vx,vy,x,y,x1,y1,katamuki,gyaku,seiki_x,seiki_y,n,touei_x,touei_y,idoux,idouy,px,py; x=1.0; y=1.0; vx=1.0; //x方向の速さ vy=-2.0; //y方向の速さ y1=(1/y); //逆数 x1=(1/x); //逆数 seiki_x=x1/(sqrt(x1*x1+y1*y1)); seiki_y=y1/(sqrt(x1*x1+y1*y1)); n=-(vx*seiki_x)+(vy*seiki_y); //nは内積 touei_x=n*seiki_x; //touei_xは投影x軸 touei_y=n*seiki_y; //touei_yは投影y軸 idoux=vx+2*touei_x; //衝突後、点Pのxの移動方向 idouy=vy+2*touei_y; //衝突後、点Pのyの移動方向 px=-idoux; //点Pのx座標 py=-idouy; //点Pのy座標 printf("1秒後の位置は点P(x,y)=(%f,%f)",px,py); return 0; } 出力結果 1秒後の位置は点P(x,y)=(2.000000,5.000000) 何かおかしなところがあれば追加や修正等をしてくれれば幸いです。

  • Java 3Dで二次関数のグラフを描く

    Java3Dを使ってサーフボードを作ってみようと思っているのですが、初歩中の初歩からつまずいています。public BranchGroup createSceneGraph()の中に以下のようなコードを書いたのですが、load test can't be instantiatedと出ます(testはアプレットの名前です)。そもそもこのエラーがどのような物なのかも分からないのですが、以下のコードのどこがおかしいのか教えてください。お願いします。 //createSceneGraph()の一部 Point3d[] vertices = new Point3d[400]; double step = (1 - (-1)) / 400; int i = 0; for(double x= -1; x < 1; x += step){   // x座標が x と x+step の間を計算して線分で結   vertices[i] = new Point3d(x, f(x), 0.0);   vertices[1+1] = new Point3d(x + step, f(x+step), 0.0);   i += 2; } double f(double x){   return a*x*x + b*x + c; }

  • C言語の課題

    何度も申し訳ありません http://okwave.jp/qa/q7877142.html より、回答を受けてプログラムを作成したのですが、 衝突時の時間と座標をどのように作成すれば良いか分からなく、 一秒後の点Pの位置を算出したのですが、合っているかどうかが分かりません。 非常に難しくで困っています。お助け下さい。 ソースコード #include <stdio.h> #include<math.h> int main(void) { float p,v,vx,vy,x,y,x1,y1,katamuki,gyaku,seiki_x,seiki_y,n,touei_x,touei_y,idoux,idouy,px,py; /* p=(x,y); v=(vx,vy); */ x=1.0; y=1.0; vx=1.0; //x方向の速さ vy=-2.0; //y方向の速さ y1=-x; //逆数 x1=-y; //逆数 printf("逆数は(x1,y1)=(%f,%f)\n",x1,y1); seiki_x=x1/(sqrt(x1*x1+y1*y1)); seiki_y=y1/(sqrt(x1*x1+y1*y1)); printf("正規化、(x方向,y方向)=(%f,%f)\n",seiki_x,seiki_y); n=-(vx*seiki_x)+(vy*seiki_y); //nは内積 touei_x=n*seiki_x; //touei_xは投影x軸 touei_y=n*seiki_y; //touei_yは投影y軸 printf("投影ベクトル(x,y)=(%f,%f)\n",touei_x,touei_y); idoux=vx+2*touei_x; //衝突後、点Pのxの移動方向 idouy=vy+2*touei_y; //衝突後、点Pのyの移動方向 px=-idoux; //点Pのx座標 py=-idouy; //点Pのy座標 printf("1秒後の位置は点P(x,y)=(%f,%f)",px,py); return 0; } /* 逆数は(x1,y1)=(-1.000000,-1.000000) 正規化、(x方向,y方向)=(-0.707107,-0.707107) 投影ベクトル(x,y)=(-1.500000,-1.500000) 1秒後の位置は点P(x,y)=(2.000000,5.000000) */

  • 三角形の外接円の中心と半径を出力するcプログラム

    http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0010&lang=jp この問題で、sample inputのデータを入力すると問題なく出力されるのですが、コードを提出するとなぜかWrong Answer となってしまいます。 どこがおかしいのか教えてください。。 #include<stdio.h> #include<math.h> int main(){ double x1,x2,x3,y1,y2,y3,p,q,r; int i,n; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3); p = ((y1-y3)*(y1*y1-y2*y2+x1*x1-x2*x2)-(y1-y2)*(y1*y1-y3*y3+x1*x1-x3*x3))/(2*(y1-y3)*(x1-x2)-2*(y1-y2)*(x1-x3)); q = ((x1-x3)*(x1*x1-x2*x2+y1*x1-y2*x2)-(x1-x2)*(x1*x1-x3*x3+y1*y1-y3*y3))/(2*(x1-x3)*(y1-y2)-2*(x1-x2)*(y1-y3)); r = sqrt((x1-p)*(x1-p)+(y1-q)*(y1-q)); printf("%.3f %.3f %.3f\n",p,q,r); } return 0; }

  • 集合Sがディオファントス的の意味を教えて下さい。

    定義 自然数N個の組の集合Sが”ディオファントス的である”とは、 整数係数の多項式P (x1, x2, ..., xn, y1, y2, ..., ym) があって、 集合Sは (x1, x2, ..., xn) を含む <=> 自然数の組 (y1, y2, ..., ym) があり、P (x1, x2, ..., xn, y1, y2, ..., yn) =0となることである と定義する。 とありますが、 理解出来ません。 わかる方、 よりわかりやすく教えて下さい。

  • コンストラクタの中でメンバクラスをnewしてはだめなのですか?

    C#2008EXPRESS EDITIONです。 以下のようなソースで、★1ではT.aがちゃんと生成されてるのに、★2のようにすると、Tの各メンバがNULLになってしまいます。 こういうやり方は、だめなのでしょうか?デバッガでは、引数無しのコンストラクタの内容を実行しているようなのですが・・・ なお、当方はCは理解していますが、C++を随分前に落伍した程度の者で、今回C#に挑戦してみようとしています。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { public class point { public double x; public double y; public point(double a, double b) { x = a; y = b; } } public class Triangle { public point a; public point b; public point c; public Triangle() { point a = new point(0,0); point b = new point(0,0); point c = new point(0,0); } public Triangle(point a,point b,point c){ this.a = a; this.b = b; this.c = c; } } static void Main(string[] args) { ★1 Triangle T = new Triangle(new point(1,2),new point(3,4),new point(5,6)); ★2 Triangle T = new Triangle(); Console.WriteLine("T.a.x={0} T.a.y={1}",T.a.x,T.a.y); } } } すみません、インデントを付ける方法がわからなくて、見にくいソースになってしまって。

  • 演算子のオーバーロード

    座標を表すクラスとして class Point { public:  double *buf;  Point(double, double) {   printf("new :%p ", buf);   buf = new double[2];   buf[0] = x1;   buf[1] = x2;   printf("-\n");  }  ~Point() {   printf("delete :%p ", buf);   delete [] buf; // ※1   printf("- \n");  }  Point operator +(Point){   Point a(0.0, 0.0);   a.buf[0] = this->buf[0] + p.buf[0];   a.buf[1] = this->buf[1] + p.buf[1];   return a;  }  Point operator =(Point){   this->buf[0] = p.buf[0];   this->buf[1] = p.buf[1];   return *this; // ※2  } }; int main() {  {   Point a(1.0, 2.0);   Point b(3.0, 4.0);   a = a+b; //(1)   a = a+b+a+b; //(2)   a = (a=b) + (b+b); //(3)   printf("(%f, %f)\n", a.buf[0], a.buf[1]);  }  return 0;  } を作成し、(1),(2),(3)のいずれかを記述して実行したところ、 (1) 正常に動作(4,6) (2) セグメンテーションフォルト ※1 を削除すると(8,12) (3) セグメンテーションフォルト ※1 を削除すると(9,12) という結果になりました。 Deleteで(同じアドレスを開放しようとして)失敗しているようなのですが、思った動作をさせるためにはどうすればよいでしょうか。 標準出力を載せたいのですが、文字数制限により無理のようなので、後ほど補足致します。 環境 Windows XP SP2 Cygwin 1.5.19(0.150/4/2) GCC 3.4.4

  • 詳しい回答を m(_ _)m

    xy平面上の放物線A:y=x^2、B:y=ー(x-a)^2+b は異なる2点P(x1、y1)、Q(x2、y2)で交わるとする。(x1>x2) (1) x1-x2=2が成り立つとき、bをaで表せ。 (2) x1-x2=2を満たしながらa、bが変化するとき、直線PQの通過する領域を求め、図示せよ。 (3) 線分PQの長さが2を満たしながらa、bが変化するとき、線分PQの中点のy座標の最小値を求めよ。 なるべく細かく教えていただけるとありがたいです。

  • Javaの内積についてです

    今下記のようになっていてgetInnerProductが内積を求めるメソッドです。 public class MyVector { private double[] elements; static private int count = 0; public MyVector(){ elements = new double[2]; elements[0] = 0.0; elements[1] = 0.0; } public MyVector(double x, double y){ elements = new double[2]; elements[0] = x; elements[1] = y; } double getLength(){ return Math.sqrt(elements[0] * elements[0] + elements[1] * elements[1]); } int getInnerProduct(MyVector v){ return (this.elements[0] * v.elements[0] + this.elements[1] * v.elements[1]); } } このように作ったのですがエラーが出てくるので、何が違うか、どうなれば動くか教えてください

  • googlemap api での 座標の取得

    googlemap apiを使って地図上をクリックしたところに 吹き出しをつくり、その中のフォームに情報を入力するという ページを作成してます。 が、うまく座標がとれません。 GEvent.addListener(map, 'click', function(overlay, point) { if (point) { document.getElementById("show_x").innerHTML = point.x; document.getElementById("show_y").innerHTML = point.y; map.openInfoWindowHtml(point,"<form><tableborder=1><tr><td><input type=text id=\"show_x\"><input type=text id=\"show_y\"></td></tr>); としていますが、show_x show_y が <input type=text value=***> のところに 入りません。 <body> 緯度<p id="show_x"></p> 経度<p id="show_y"></p> </body> のところには表示されます。

専門家に質問してみよう