JavsScriptを用いた画像中の2点間距離測定
27555 ワード
それは複雑な天体物理学についてではありませんが、我々はすべての空が好きですか?また、星、星雲、銀河などの画像が好きです.
だから、私はこのアイデアを思いついたのです:私たちは、画像に表示される2つの星の間の距離(楽しいだけ)を測定することができますか?
さて、それはイメージの星についてではないかもしれませんが、地図上の2つの都市のような何かかもしれません.
私の意見では、HTML、CSS、JavaScriptの基礎知識を実践するのにこのプロジェクトを使用するのは良い考えです.最も重要なことは、ここでHTMLキャンバスを使いたくないです.
さて、このプロジェクトは何をするのですか?
そこに星の夜空のイメージがあるので、ユーザーは、それらをクリックして画像に表示される2つ以上の星の間の距離を測定することができます.
それで、このプロジェクトをより小さな部分に分解しましょう.
1 . HTML :
クリエイト イメージコンテナ 結果コンテナに計算された距離を表示します.
2 . CSS : 星の夜空画像を設定します
作成とスタイル メイクする
あなたの好みとして追加のスタイリングを追加します.
JavaScript :
( 1 )変数を作成する 絹篩で篩うたよう ユーザーのクリックポイントのx座標とy座標を格納する2つの配列を持つオブジェクトを作成します. 作成する2つの配列を作成する
コンテナへのaddeventlistel () ストアxとy座標 関数の呼び出し
( 3 ) createPoint ()関数 クリエイトア クリエイトア 設定する 左と上の座標 それを
createlines ()関数
さて、我々はこのプロジェクトのより重要な部分に達する.ここではいくつかの数学を使用する必要があります!私はあなたの数学の先生ではないと思いますが、これらは私たちがフォローするステップです. つのポイント間の距離を取得します.
つのポイントの中間点を見つける.
中点を横切ってその距離の水平線を描画します.
計算の角度は、実際の2つのポイントに合わせて中央点の周りに回転させる.
行を回転します.
getdistange ()関数
今、我々はピクセルの距離を持っているので、我々はセンチメートルに変換する必要があります. 1ピクセル=0.0264583333 cm センチメートルの距離=ピクセル×距離×26264583333
注意:
上で説明したこのプロジェクトは、実践目的のために使用することができますので、実際のWebプロジェクト、応答性、ブラウザの互換性などの付属のすべてのケースをカバーしていない可能性があります.
結論
おめでとう!我々は、プロジェクトを終えている、今だけの残りの星の間の距離を測定することです!
だから星を数え、距離を測定し、楽しい.
PS:この記事を楽しむ場合は、私をサポートすることができますko-fi . 私はいつもあなたのサポートに感謝します.
ハッピーコーディング!
だから、私はこのアイデアを思いついたのです:私たちは、画像に表示される2つの星の間の距離(楽しいだけ)を測定することができますか?
さて、それはイメージの星についてではないかもしれませんが、地図上の2つの都市のような何かかもしれません.
私の意見では、HTML、CSS、JavaScriptの基礎知識を実践するのにこのプロジェクトを使用するのは良い考えです.最も重要なことは、ここでHTMLキャンバスを使いたくないです.
さて、このプロジェクトは何をするのですか?
そこに星の夜空のイメージがあるので、ユーザーは、それらをクリックして画像に表示される2つ以上の星の間の距離を測定することができます.
それで、このプロジェクトをより小さな部分に分解しましょう.
1 . HTML :
クリエイト
div
要素、<div id="container">
<div id="results">
<body>
<h1>Measure Distance</h1>
<div id="container"></div>
<h3>Results</h3>
<div id="results">
<div id="current-result"></div>
<div id="total-result"></div>
</div>
<input id="reset" type="button" value="Reset" onclick="document.location.reload()">
</body>
2 . CSS :
background-image
イメージコンテナの.
#container {
width: 500px;
height: 400px;
border: 2px solid BurlyWood;
background-image: url(https://images.unsplash.com/photo-1629898145005-5f0ff3ee4eed?crop=entropy&cs=srgb&fm=jpg&ixid=MnwxNDU4OXwwfDF8cmFuZG9tfHx8fHx8fHx8MTYzOTk5NzM3MQ&ixlib=rb-1.2.1&q=85);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
.points
and .lines
JavaScriptで作成します.position: absolute;
両方の.points
and .lines
.
.points {
position: absolute;
border: 2px solid red;
border-radius: 50%;
opacity: 1;
}
.lines {
position: absolute;
border: 1px solid white;
height: 0;
opacity: 1;
}
JavaScript :
( 1 )変数を作成する
#container
and #results
DOMの使用div
元素points
and lines
.
let container = document.querySelector("#container");
let results = document.querySelector("#results");
let currentResult = document.querySelector("#current-result");
let totalResult = document.querySelector("#total-result");
let coordinates = {
coordX: [],
coordY: []
};
let points = [];
let lines = [];
コンテナへのaddeventlistel ()
coordinates
オブジェクト.createPoints()
then createLines()
コールバック関数内で.
container.addEventListener("click", (e) => {
coordinates.coordX.push(e.x);
coordinates.coordY.push(e.y);
createPoints(e.x, e.y);
let prevX = coordinates.coordX[coordinates.coordX.length - 2];
let prevY = coordinates.coordY[coordinates.coordY.length - 2];
if (coordinates.coordX.length > 1) {
createLines(prevX, prevY, e.x, e.y);
}
});
( 3 ) createPoint ()関数
for-loop
それは0からクリックポイントの数まで走ります.div
ループ内の各反復で.className
ASpoints
. div
( e.x
and e.y
) #container
function createPoints(posX, posY) {
for (let i = 0; i < coordinates.coordX.length; i++) {
points[i] = document.createElement("div");
points[i].className = "points";
points[i].style.left = `${coordinates.coordX[i]}px`;
points[i].style.top = `${coordinates.coordY[i]}px`;
container.appendChild(points[i]);
}
}
createlines ()関数
さて、我々はこのプロジェクトのより重要な部分に達する.ここではいくつかの数学を使用する必要があります!私はあなたの数学の先生ではないと思いますが、これらは私たちがフォローするステップです.
let distance = Math.sqrt(((x2-x1) * (x2-x1)) + ((y2-y1) * (y2-y1)));
// X and Y coordinates of the middle point
let midX = (x1+x2)/2;
let midY = (y1+y2)/2;
lines[i].style.width = `${distance}px`;
lines[i].style.left = `${(midX - (distance/2))}px`;
lines[i].style.top = `${midY}px`;
/* get the inclination in radian unit and then convert it into degree */
let inclinationInRadian = Math.atan2(y1-y2, x1-x2);
let inclinationInDegree = (inclinationInRadian * 180)/ Math.PI;
lines[i].style.transform = 'rotate('+inclinationInDegree +'deg)';
ここが完全createLines()
関数.
function createLines(x1, y1, x2, y2) {
let distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
let midX = (x1 + x2) / 2;
let midY = (y1 + y2) / 2;
let inclinationInRadian = Math.atan2(y1 - y2, x1 - x2);
let inclinationInDegree = (inclinationInRadian * 180) / Math.PI;
for (let i = 0; i < coordinates.coordX.length; i++) {
lines[i] = document.createElement("div");
lines[i].className = "lines";
lines[i].style.width = `${distance}px`;
lines[i].style.left = `${midX - distance / 2}px`;
lines[i].style.top = `${midY}px`;
lines[i].style.transform = "rotate(" + inclinationInDegree + "deg)";
container.appendChild(lines[i]);
}
currentResult.innerHTML = `<strong>Current Result:-</strong> <br>`;
totalResult.innerHTML = `<strong>Total Result:-</strong> <br>`;
getDistance(distance);
}
getdistange ()関数
今、我々はピクセルの距離を持っているので、我々はセンチメートルに変換する必要があります.
function getDistance(distance) {
let pixelToCm = distance * 0.0264583333;
pixelToCm = Number(pixelToCm.toFixed(2));
totalDistance += pixelToCm;
totalDistance = Number(totalDistance.toFixed(2));
currentPath += `Line ${++lineCounter}:- ${pixelToCm}cm<br>`;
totalPath += `${totalDistance}cm<br>`;
currentResult.innerHTML += currentPath;
totalResult.innerHTML += totalPath;
results.scrollTop = results.scrollHeight;
}
以下はライブデモ@ codepenです.注意:
上で説明したこのプロジェクトは、実践目的のために使用することができますので、実際のWebプロジェクト、応答性、ブラウザの互換性などの付属のすべてのケースをカバーしていない可能性があります.
結論
おめでとう!我々は、プロジェクトを終えている、今だけの残りの星の間の距離を測定することです!
だから星を数え、距離を測定し、楽しい.
PS:この記事を楽しむ場合は、私をサポートすることができますko-fi . 私はいつもあなたのサポートに感謝します.
ハッピーコーディング!
Reference
この問題について(JavsScriptを用いた画像中の2点間距離測定), 我々は、より多くの情報をここで見つけました https://dev.to/mkday/measure-distance-between-two-points-in-an-image-using-javsscript-4jj5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol