プロが教える店舗&オフィスのセキュリティ対策術

・やりたいこと:二点間を結ぶ直線からズレても良い距離を設定したときの、
「"大体"二点間に点があるかどうか」を確かめる方法を知りたいです。
一応、僕も考えてみたのですが、正しいのかわからないので、そこ(一番下)への指摘もお願いします。

・質問者の数学の知識は、中学前半レベルです。(今は高1)
わかりやすく教えていただけるとありがたいです。

https://qiita.com/tydesign/items/ab8a5ae52eb9c50 …
これを元に、JavaScriptで実装しました。

qiitaの記事の一番上の図を見た感じ、ノートの方眼を、二点上の点に合う形に引き伸ばしたようにするアイディア(伝われ)なので、こうなる理由は感覚的には理解しています。

・ズレても良い距離は、
二点間を結んでできる線分と常に同じ距離です。(角ばったりしない)

そレを踏まえて、僕が思いついた方法:
使う値>
ズレても良い距離:zure
二点:点a,b
点線上の点:点c
(この下の値は記事と同じ使い方をしているはず)
d*1: x,yそれぞれ 点c から 点aかbまでの距離
d*2:x,yそれぞれ点aとbの距離

((dx1*dy2 - dx2*dy1)**2)**0.5 < dx2*zure+dy2*zure
=>これがズレても良い距離が四角になってしまう気がする。

上でやろうとしてること>
2つの長い方の面積の差が、縦+横より小さいかどうかを確かめてる

※数式の書き方は、JavaScript(プログラミング言語)仕様になっています。
** => 乗算演算子
* => 掛け算演算子

質問者からの補足コメント

  • 乗算演算子ではなく、べき乗演算子でした。

      補足日時:2021/08/09 16:17
  • p5.js[検証用]
    const condition = (x,y)=> {
    return ((y*500 - 500*x)**2)**0.5 < (1000+1000)*10;
    }
    function setup() {
    createCanvas(400, 400);
    }

    function draw() {
    background(220,0);
    for(var mouseX=50; mouseX < width;mouseX+=10) {
    for(var mouseY=50; mouseY < height; mouseY+=10) {
    if(condition(mouseX,mouseY)) {
    fill(0);
    ellipse(mouseX,mouseY,10);
    }
    }
    }
    }

      補足日時:2021/08/09 16:48

A 回答 (2件)

線分Lと点Pとの「距離」を求めたいという話なら


点Pと線分L上の点との距離で最も小さいものを
線分と点との距離と定義すると

①線分Lを含む直線に点Pから垂線を下す。垂線の足をQとする。
②Qが線分L上なら PQの長さを距離とする。
③Qが線分L上ではないなら、PとLの両端との距離のうち
短い方を選ぶ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました。

お礼日時:2021/08/10 16:40

「乗算演算子」って、掛け算演算子の別名ですよ。


あなたが言いたいのは、 a**b で「a の b 乗」ってことですよね?
だとすると、 ((dx1*dy2 - dx2*dy1)**2)**0.5
     = (| dx1*dy2 - dx2*dy1 |**2)**0.5
     = | dx1*dy2 - dx2*dy1 |**(2*0.5)
     = | dx1*dy2 - dx2*dy1 |**1
     = | dx1*dy2 - dx2*dy1 |
ですが、そういう意図でよいのでしょうか?
2乗したり 0.5乗したりしているが、絶対値関数を実装するための
ギミックなのであれば、それでよいのかも知れませんが... 謎です。

あと、右辺もこれで意図どおりでしょうか?
dx2*zure + dy2*zure = (dx2 + dy2)*zure になってしまいますが。
せめて (|dx2| + |dy2|)*zure でないと、いろいろマズイような気がします。
    • good
    • 0
この回答へのお礼

>「乗算演算子」って、掛け算演算子の別名ですよ。
すみません。べき乗演算子でした。

>2乗したり 0.5乗したりしているが、絶対値関数を実装するための
>ギミックなのであれば、それでよいのかも知れませんが... 謎です。
おっしゃる通り、絶対値関数を実装するためです。

>dx2*zure + dy2*zure = (dx2 + dy2)*zure になってしまいますが。
それで大丈夫です。

お礼日時:2021/08/09 16:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング