質問の趣旨が理解できません。(1)から(6)まで何度も読んでみたんですが。
質問は他人が読んで明確に意味が分かるような表現でお願いします。
とりあえず、「鉛筆型の5角形を作成」という言葉だけを手がかりにサンプルを示します。勘違いしてるようならご勘弁。その際は補足で詳細を明示してください。
2点の座標と鉛筆の太さは決め打ちしてます。また先端(芯の出ている方)の角度は90度としてます。
マウス操作で2点の座標を取得する方法は開発者ガイドの第10章に詳しいサンプルがあるのでそちらを参照してください。
#include <math.h>
TPoint bottom( 10, 10 ), top( 100, 100 );
int width = 20; //鉛筆の太さ
double length = sqrt( //2点間の距離 これを鉛筆の長さにする
pow( top.x - bottom.x, 2 ) + pow( top.y - bottom.y, 2 )
);
if ( length <= width ) return; //鉛筆型が書けないときは処理を中断
//2点の座標から線分の傾き(ラジアン)を取得
double rad = atan2( top.y - bottom.y, top.x - bottom.x );
//x軸上に置いた場合の鉛筆の座標 先端から左回り
TPoint points[] = {
TPoint( length, 0 ),
TPoint( length - width, width/2 ),
TPoint( 0, width/2 ),
TPoint( 0, -width/2 ),
TPoint( length - width, -width/2 )
};
//座標の変換
for ( int n=0; n<5; ++n ) {
//座標を回転移動
points[n] = TPoint(
points[n].x*cos(rad) - points[n].y*sin(rad),
points[n].x*sin(rad) + points[n].y*cos(rad)
);
//bottomを始点とする位置に移動
points[n].x += bottom.x;
points[n].y += bottom.y;
}
//描画
Image1->Canvas->Polygon( points, 4 );
以上、とりあえず処理の流れを示すサンプルですから、かなり大雑把なもので精度は良くないです。
また、言うまでもないですが、これはあくまで私が思いついたサンプルコードです。
これ以外にももっとスマートなコードが考えられるでしょう。
ご自分で色々と研究してください。
補足
確かに読み返して見るとよくわからない手順になってました。 申し訳ございません。 再度手順を記載します。 手順1:マウスにて始点となる座標をクリック 手順2:マウスにて終点となる座標をクリック 手順3:終点になった座標から左右に30度開いた線を長さ20で線を引く (ここで矢印の<が作成される) 手順4:矢印を書いた左右それぞれの終点の座標と手順1、手順2で結んだ 線と平行に始点と垂直になる箇所まで線を引く 手順5:手順4で引かれた線の終点同士をせんで結ぶ (こうすると鉛筆型の5角形が出来ると考えております) 少しは理解して頂けたでしょうか。 説明が上手くなくご迷惑おかけします。 参考に質問にいたった経緯としては、 始点と終点をを指定したら5角形を作成出来るようにして欲しいと言われ、どうしたらいいのかわからずここでいろいろみて調べていたら 『QNo.57865で矢印を描画するには』という質問に haru-pさんがサンプルを作成しているプログラムを見て、これを参考にしたら言われた事が出来るのでは??と思ったのですが出来なかったので質問させて頂いた次第です。 参考にしたURLは以下の通りです。 http://kikitai.teacup.com/kotaeru.php3?q=57865