コンソール画面に正三角形をランダムに生成しようとしています。時には正三角形で時には正三角形ではありませんか?
三角形の中心点をランダムに配置し、中心点を原点(0,0)に移動して中心から3点を作成する方法です(半径(乱数)を追加する)三角形の各点のY軸への距離)。次に、2つの点を120度に回転させ、もう1つを240で回転させて、正三角形を作り、点の間に線を描きます。その後、重心に関連する元のプロットにポイントを戻します。
これは時間の仕事のほとんどの過去と私は正三角形を得るが、私はかなり正三角形を取得しないと私はなぜ完全な損失になっています。
私はポイント間の線を描画するためにBrensenhamの線アルゴリズムを使用しています。作業三角形の
画像:壊れた三角形のhttp://imgur.com/GpF406O
画像:あなたの2の画像を見ると
void Triangle::createVertex(Vertex cent)
{
// angle of 120 in radians
double s120 = sin(2.0943951024);
double c120 = cos(2.0943951024);
// angle of 240 in radians
double s240 = sin(4.1887902048);
double c240 = cos(4.1887902048);
// bringing centroid to the origin and saving old pos to move later on
int x = cent.getX();
int y = cent.getY();
cent.setX(0);
cent.setY(0);
// creating the points all equal distance from the centroid
Vertex v1(cent.getX(), cent.getY() + radius);
Vertex v2(cent.getX(), cent.getY() + radius);
Vertex v3(cent.getX(), cent.getY() + radius);
// rotate points
double newx = v1.getX() * c120 - v1.getY() * s120;
double newy = v1.getY() * c120 + v1.getX() * s120;
double xnew = v2.getX() * c240 - v2.getY() * s240;
double ynew = v2.getY() * c240 + v2.getX() * s240;
// giving the points the actual location in relation the the old pos of the centroid
v1.setX(newx + x);
v1.setY(newy + y);
v2.setX(xnew + x);
v2.setY(ynew + y);
v3.setX(x);
v3.setY(y + radius);
// adding the to a list (list is used in a function to draw the lines)
vertices.push_back(v1);
vertices.push_back(v2);
vertices.push_back(v3);
}
2つの三角形の画像を見ると、ピクセル(テキスト文字で表される)で三角形を描いているように見えます。これにより、慎重な許容位置が各頂点(このピクセルの行または次のピクセルのいずれか) )私の推測では、線を描画するためのアルゴリズムは何らかの呼び出し(行aまたは行bでこのピクセルを描画)しなければならず、同じ行が両方の頂点に対して選択されていません。ライン描画アルゴリズムのために、一方通行か他方通行かを言うのは難しいでしょう。 – Tuffwer
頂点を印刷する行の選択の不一致は、計算する必要がある高さの値が2つの行の境界の高さにある(または非常に近い)場合に発生し、浮動小数点エラーは真ちょうど下に。ほとんどの場合、ソフトウェアでそれが起きたときにフロアが呼び出されるので、すぐ下にあるものが次の行で終了します。 – Tuffwer