提示コードの交点を算出関数部ですが線分と線分の交点が参考サイト通りやっても上手実装出来ません。以下のように方眼紙に点を配置して実験しましたが交点4,9と表示されてしまいます。参考サイトが間違えて居るのでしょうか?
A: 4,1
B: 4,9
C: 1,4
D: 12,3
交点: 4,4
参考サイト: https://qiita.com/kaityo256/items/988bf94bf7b674b8bfdc (2つ線分の交点)
cpp
1#include <iostream> 2#include "glm/glm.hpp" 3 4glm::ivec2 A; 5glm::ivec2 B; 6glm::ivec2 C; 7glm::ivec2 D; 8 9 10void inputValue(glm::ivec2 &pos) 11{ 12 int x; 13 int y; 14 15 printf("X: "); 16 scanf_s("%d", &x, sizeof(x)); 17 printf("Y: "); 18 scanf_s("%d", &y, sizeof(y)); 19 20 pos.x = x; 21 pos.y = y; 22} 23 24//交点を算出 25glm::ivec2 Intersection(glm::vec2 a, glm::vec2 b, glm::vec2 c, glm::vec2 d) 26{ 27 int det = (a.x - b.x) * (d.y - c.y) - (d.x - c.x) * (a.y - b.y); 28 int t = ((d.y - c.y) * (d.x - b.x) + (c.x - d.x) * (d.y - b.y)) / det; 29 int x = t * a.x + (1.0 - t) * b.x; 30 int y = t * a.y + (1.0 - t) * b.y; 31 32 return glm::ivec2(x,y); 33} 34 35int main() 36{ 37 38 printf("A 座標\n"); 39 inputValue(A); 40 41 printf("B 座標\n"); 42 inputValue(B); 43 44 printf("C 座標\n"); 45 inputValue(C); 46 47 printf("D 座標\n"); 48 inputValue(D); 49 50 printf("\n\n交点\n"); 51 glm::ivec2 pos = Intersection(A,B,C,D); 52 printf("X: %d\n", pos.x); 53 printf("Y: %d\n",pos.y); 54 55 56 57 58 59 60 61 62 63 64 65 return 0; 66}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/03/16 06:26
2021/03/16 06:31