HOME > ホーム > ホーム Swift3で座標から角度を得る方法 2017年5月29日 Twitter Share Pocket Hatena LINE コピーする 画面をタップしたままドラッグすると現在自分がドラッグしてる座標の角度を割り出せるようにしてみます。時計をクルクル回したり、車のハンドルを回したり、金庫の鍵を回したりするのに使えそうです。 目次1 xとyを保持しておくstructを定義する2 座標を引数に与えると角度を返してくれる関数3 ドラッグ時に呼ばれるメソッド4 全ソース5 参考 xとyを保持しておくstructを定義する struct Point { var x:Double = 0 var y:Double = 0 } 座標を引数に与えると角度を返してくれる関数 func angle(a:Point, b:Point) -> Double { var r = atan2(b.y - a.y, b.x - a.x) if r < 0 { r = r + 2 * M_PI } return floor(r * 360 / (2 * M_PI)) } ドラッグ時に呼ばれるメソッド // ドラッグ時に呼ばれる override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { //タッチイベントを感知 let touchEvent = touches.first! //ドラッグ前の座標 let preDx = touchEvent.previousLocation(in: self.view).x let preDy = touchEvent.previousLocation(in: self.view).y //ドラッグ後の座標 let newDx = touchEvent.location(in: self.view).x let newDy = touchEvent.location(in: self.view).y //ドラッグ後の座標からドラッグ前の座標を引けば現在の座標の位置が割り出せる let dx = newDx - preDx let dy = newDy - preDy //引数に現在の座標を入れてさっきの関数を呼ぶ print(angle(a: Point(x: 0, y: 0), b: Point(x: Double(dx), y: Double(dy)))) } 全ソース import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } struct Point { var x:Double = 0 var y:Double = 0 } func angle(a:Point, b:Point) -> Double { var r = atan2(b.y - a.y, b.x - a.x) if r < 0 { r = r + 2 * M_PI } return floor(r * 360 / (2 * M_PI)) } // ドラッグ時に呼ばれる override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { let touchEvent = touches.first! let preDx = touchEvent.previousLocation(in: self.view).x let preDy = touchEvent.previousLocation(in: self.view).y let newDx = touchEvent.location(in: self.view).x let newDy = touchEvent.location(in: self.view).y let dx = newDx - preDx let dy = newDy - preDy print(angle(a: Point(x: 0, y: 0), b: Point(x: Double(dx), y: Double(dy)))) } } 参考 2つの座標から角度や距離を求める Tweet Pocket Share on Tumblr エンジニアにおすすめできる本 リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック Amazon.comで見る Webを支える技術 HTTP,URI,HTML,そしてREST Amazon.comで見る 誰でもPythonで作れる 儲かるAIとソフトウェアの作り方 Amazon.comで見る プログラマが知るべき97のこと 現場で使える実践哲学のマスターピース Amazon.comで見る 情熱プログラマー 時代を超えて。ソフトウェア開発者の幸せな生き方 Amazon.comで見る アジャイルサムライ プログラミング達人開発者への道 Amazon.comで見る Rubyを作った男 まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法 Amazon.comで見る ご提供 sponsor Meee!(ミー)は、ビジネスからプライベート利用まで、個人のスキルを気軽に売り買いできるスキルマーケットです。カテゴリや居住地から、検索することが可能です。 スキルシェアならMeee!でパートナー探しを始めませんか? ランゲージエクスチェンジは、ネイティブスピーカーと気軽にマッチングできる言語交換プラットフォームです。あなたの地元に住む外国人を探したり、留学や海外移住の前に、現地のネイティブスピーカーと繋がることもできます! 言語交換ならランエクで外国人パートナー探しを始めませんか? 宣伝 りょすけトークchは、仕事や私生活をより豊にするYouTubeチャンネルです。文献(本、映画、論文)から役に立つ情報をまとめ、生涯にわたり役に立つ哲学をお届けしています。是非、チャンネル登録してみてね ビジネスユーチューブで無料で学ぶなら、りょすけトークchに無料チャンネル登録してみませんか? 【経験談】プログラミングとアフィリエイト極めると無敵になる件【2021】 Twitter Share Pocket Hatena LINE コピーする -ホーム