質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

Q&A

解決済

1回答

743閲覧

四角形の2つの辺の延長線を結んで三角形を作りたい

supereater712

総合スコア29

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

0グッド

0クリップ

投稿2021/09/08 09:04

編集2021/09/08 09:06

前提・実現したいこと

四角形の2つの辺の延長線を結んで三角形を作りたいです。
しかし求めたものは位置が歪んだものになってしまい、正しい三角形にならずにいるのが現状です。
これを実現するためにどんな式を使って座標を求めるのが好ましいか、
どうかご教授をお願い致します。

イメージ説明

該当のソースコード/試したこと

Lua

1local function tipPos(x1,y1,x2,y2,x3,y3,x4,y4) --p1={x1,y1}, p2={x2,y2}, p3={x3,y3}, p4={x4,y4} 2 local vx2,vy2=(x2-x1),(y2-y1) 3 local vx3,vy3=(x3-x4),(y3-y4) 4 5 local deg2=math.deg(math.atan2(vy2,vx2)) 6 local deg3=math.deg(math.atan2(vy3,vx3)) 7 8 local vectorX2=math.cos(math.rad(deg2)) 9 local vectorY2=math.sin(math.rad(deg2)) 10 local vectorX3=math.cos(math.rad(deg3)) 11 local vectorY3=math.sin(math.rad(deg3)) 12 13 local t=(x2-x3-y2+y3)/(vectorX3-vectorX2+vectorY2-vectorY3) 14 -- tを出すための方程式 (x2+(vectorX2*t))-(x3+(vectorX3*t)=(y2+(vectorY2*t))-(y3+(vectorY3*t)) 15 16 local px=x2+(vectorX2*t) 17 local py=y2+(vectorY2*t) 18 19 return px,py 20end

この関数は、任意の4点のうちp2,p3を結ぶ点の座標を求めるものです。
式は、p2、p3の座標に、(ベクトル*距離t)を足して求めるという考えです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2021/09/08 09:15

これはなにかの課題でしょうか?
supereater712

2021/09/09 08:36

いいえ、自主制作です。 今手元に環状に並んだ座標があって、 座標同士をこのような頂点で補完して、多角形のように見せようとしたのでした。
guest

回答1

0

ベストアンサー

(x1,y1), (x2,y2) を通る直線の方程式は

(y2-y1)x - (x2-x1)y - (y2-y1)x1 + (x2-x1)y1 = 0

なので、直線2つの交点を求める場合は連立方程式を解けばよいです。

投稿2021/09/08 09:55

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

supereater712

2021/09/09 08:32

座標2つを直線とみなす方法が簡単だと理解しました。 できたものは直線の式2つの2つの連立方程式を解く方法とは異なるものになってしまいましたけれども、 お陰様で求めていた式を作ることができました。 ``` local function ab(x1,y1,x2,y2) local a= (y2-y1)/(x2-x1) local b= y1-(a*x1) return a,b end function tipPos(x1,y1,x2,y2,x3,y3,x4,y4) local a,b=ab(x1,y1,x2,y2) local c,d=ab(x3,y3,x4,y4) local x=(d-b)/(a-c) local y=((a*d)-(b*c))/(a-c) return x,y end ``` 座標を演算した関数を作ることは、これが初めてでしたが、 お陰様で実現できました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問