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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4495閲覧

Pythonを使ったCSVデータ(X,Y,Z)の座標変換(2次元移動)

yagi_shu

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/28 18:22

前提・実現したいこと

現在、点群データを任意の角度で平行移動・回転ができるようなシステムを作っています。
具体的には、直線部の路面の点群データを座北を基準としてY軸が並ぶように変換を行いたいと考えています。(Yの値はすべて等しくなるはず)
申し訳ございませんが、プログラミング自体独学で進めているため、コードの書き方はかなり不自然な点があるかもしれません。半年ほど勉強して、始めてコードを書き始めているのですが、これ以上は厳しいと感じ、友人に勧められたこのサイトで質問させていただきます。

発生している問題・エラーメッセージ

現在、CSVデータをVS Code内に入力し、計算を行うことはできているのですが、出力したデータが上記のように変換されておらず、またXとYの値が間違って出力されてしまいます。出力されたCSVデータを3Dの解析ソフトで確認すると平面(XY)が線のような形になっていました。

該当のソースコード

import pandas as pd import csv import numpy as np pd.read_csv("######") df=pd.read_csv("######",names=("X","Y","Z")) X=df["X"] Y=df["Y"] Z=df["Z"] myarray = np.array myarray2 = np.array myarray = X.values myarray2 = Y.values Xmax = (max(X)) Ymax = (max(Y)) Xmin = (min(X)) Ymin = (min(Y)) w = ((Xmax - Xmin)/2) h = ((Ymax - Ymin)/2) tochuu = (myarray - w) tochuu2 = (myarray2 - h) deg30 = np.deg2rad(30) cos = np.cos(deg30) sin = np.sin(deg30) x_dash = [] y_dash = [] result = (tochuu * cos) - (tochuu2 * sin) result2 = (tochuu * sin) + (tochuu2 * cos) saishuu = (result + w) saishuu2 = (result + h) list1 = [saishuu] list2 = [saishuu2] list3 = [Z] with open('######', 'w') as f: writer = csv.writer(f) for kekka in zip(saishuu,saishuu2,Z): writer.writerow(kekka)

試したこと

入力する点群データの中心を基準として回転をさせようとは試みたのですが、うまくいきませんでした。

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

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

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

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

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

1T2R3M4

2021/04/28 19:40

result2 は使用していないのですか。
yagi_shu

2021/04/29 01:11

result2を記入ミスしていました。 修正した結果、XYが平面で表示されました。 ありがとうございます。
guest

回答1

0

ベストアンサー

saishuu = (result + w) saishuu2 = (result + h)

ここの2行目が、saishuu2 = (result2 + h)となればいいのではないでしょうか。

コード中の変数名は、できるだけその内容を説明する名前にするといいです。
今回のような入力ミスを防ぐことができます。

投稿2021/04/28 21:22

sasakaman

総合スコア53

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

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

yagi_shu

2021/04/29 01:13

変数名のアドバイスいただきありがとうございました。 無事、表示することができたのですが、座北を基準として点群を並べるためには、何か工夫等アドバイスがあればいただきたいです。
sasakaman

2021/04/29 03:38

修正した結果、発生している問題のどこまでが解決したのか、最終的にどのような表示にしたいのかがわからないため、回答しかねます。 csvは何のデータなのかも、上の質問ではわかりません… 詳細を質問に記載するか、一度この質問を閉じて、新規の質問として投稿してください。
yagi_shu

2021/04/29 03:59

ご対応いただきありがとうございました。 改めて、状況を整理し質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問