下記の2つのコードを組み合わせて見たいのですが,
jsonファイルを選択し,そのファイルの区切りごとに計算を行いたいのですが,可能でしょうか.
ご理解いただける方いましたら,よろしくお願いいたします.
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>html5 + js で json ファイルにアクセスしてデータを取得する</title> <script> function getJSON() { var req = new XMLHttpRequest(); // XMLHttpRequest オブジェクトを生成する req.onreadystatechange = function() { // XMLHttpRequest オブジェクトの状態が変化した際に呼び出されるイベントハンドラ if(req.readyState == 4 && req.status == 200){ // サーバーからのレスポンスが完了し、かつ、通信が正常に終了した場合 var data = JSON.parse(req.responseText); // 取得した JSON ファイルの中身を変数へ格納 var len = data.length; // JSON のデータ数を取得 // JSON のデータ数分処理 for(var i=0; i<len; i++) { console.log("id: " + data[i].id + ", name: " + data[i].name); } } }; req.open("GET", "sample.json", false); // HTTPメソッドとアクセスするサーバーのURLを指定 req.send(null); // 実際にサーバーへリクエストを送信 } </script> </head> <body> <input type="button" value="JSONファイルを取得し、内容をブラウザのコンソールへ出力" onclick="getJSON();"> </body> </html>
int main(void){ float x,y,angle; //座標の読み込み printf("x="); scanf("%f",&x); printf("y="); scanf("%f",&y); angle=acos(x/sqrt(x*x+y*y)); angle=angle*180.0/PI; if(y<0)angle=360.0-angle; printf("角度=%f",angle); return 0; }
jsonのサンプルになります.
{"version":1.3,"people":[{"person_id":[-1],"":[697.949,94.5086,0.94138,707.771,188.626,0.848754,650.953,186.622,0.811076,633.314,278.739,0.71239,633.262,353.129,0.488111,762.639,192.509,0.823329,776.307,286.508,0.759441,774.344,368.784,0.857891,682.34,376.676,0.637581,645.007,368.791,0.591105,558.818,468.779,0.699771,482.45,554.885,0.64443,725.383,382.537,0.603878,739.041,513.835,0.599071,760.679,621.513,0.671196,690.146,88.7003,0.88057,711.711,86.7748,0.952311,682.239,114.095,0.319907,733.239,114.094,0.925611,762.639,648.948,0.645668,778.303,645.02,0.677848,756.741,631.319,0.429501,494.209,586.314,0.559349,478.536,582.399,0.491725,472.6,558.846,0.350561],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]}
角度
package hm.orz.chaos114.android.kyouenchecker; import java.util.ArrayList; import java.util.List; public class GameModel { class Point { double x; double y; Point(double x, double y) { this.x = x; this.y = y; } double getAbs() { return Math.sqrt(x * x + y * y); } Point difference(Point p2) { return new Point(x - p2.x, y - p2.y); } Point sum(Point p2) { return new Point(x + p2.x, y + p2.y); } @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]"; } } /** * Ax+By+C=0を表現するクラス。 */ class Line { Point p1; Point p2; double a; double b; double c; Line(Point p1, Point p2) { this.p1 = p1; this.p2 = p2; a = p1.y - p2.y; b = p2.x - p1.x; c = p1.x * p2.y - p2.x * p1.y; } double getY(double x) { double y = -1 * (a * x + c) / b; return y; } @Override public String toString() { return "Line [p1=" + p1 + ", p2=" + p2 + ", a=" + a + ", b=" + b + ", c=" + c + "]"; } } /** * 共円情報を表現するクラス。 * * @author noboru */ class KyouenData { Point p1; Point p2; Point p3; Point p4; public KyouenData(Point p1, Point p2, Point p3, Point p4) { this.p1 = p1; this.p2 = p2; this.p3 = p3; this.p4 = p4; } } List<Point> points = new ArrayList<Point>(); public void add(int x, int y) { Point p = new Point(x, y); points.add(p); } public KyouenData isKyouen() { if (points.size() < 4) { return null; } Point p1 = points.get(points.size() - 1); for (int i = 0; i < points.size() - 1; i++) { Point p2 = points.get(i); for (int j = i + 1; j < points.size() - 1; j++) { Point p3 = points.get(j); for (int k = j + 1; k < points.size() - 1; k++) { Point p4 = points.get(k); boolean kyouen = isKyouen(p1, p2, p3, p4); if (kyouen) { return new KyouenData(p1, p2, p3, p4); } } } } return null; } public boolean isKyouen(Point p1, Point p2, Point p3, Point p4) { // p1,p2の垂直二等分線を求める Line l12 = getMidperpendicular(p1, p2); // p2,p3の垂直二等分線を求める Line l23 = getMidperpendicular(p2, p3); // 交点を求める Point intersection123 = getIntersection(l12, l23); if (intersection123 == null) { // p1,p2,p3が直線上に存在する場合 Line l34 = getMidperpendicular(p3, p4); Point intersection234 = getIntersection(l23, l34); if (intersection234 == null) { // p2,p3,p4が直線状に存在する場合 return true; } } else { double dist1 = getDistance(p1, intersection123); double dist2 = getDistance(p4, intersection123); if (Math.abs(dist1 - dist2) < 0.0000001) { return true; } } return false; } /** * 2点間の距離を求める。 * * @param p1 座標1 * @param p2 座標2 * @return 距離 */ public double getDistance(Point p1, Point p2) { Point dist = p1.difference(p2); return dist.getAbs(); } /** * 2直線の交点を求める。 * * @param l1 直線1 * @param l2 直線2 * @return 交点座標(交点が存在しない場合、null) */ public Point getIntersection(Line l1, Line l2) { double f1 = l1.p2.x - l1.p1.x; double g1 = l1.p2.y - l1.p1.y; double f2 = l2.p2.x - l2.p1.x; double g2 = l2.p2.y - l2.p1.y; double det = f2 * g1 - f1 * g2; if (det == 0) { return null; } double dx = l2.p1.x - l1.p1.x; double dy = l2.p1.y - l1.p1.y; double t1 = (f2 * dy - g2 * dx) / det; return new Point(l1.p1.x + f1 * t1, l1.p1.y + g1 * t1); } /** * 2点の垂直二等分線を求める。 * * @param p1 座標1 * @param p2 座標2 * @return 垂直二等分線 */ public Line getMidperpendicular(Point p1, Point p2) { Point midpoint = getMidpoint(p1, p2); Point dif = p1.difference(p2); Point gradient = new Point(dif.y, -1 * dif.x); Line midperpendicular = new Line(midpoint, midpoint.sum(gradient)); return midperpendicular; } /** * 中点を求める。 * * @param p1 座標1 * @param p2 座標2 * @return 中点座標 */ public Point getMidpoint(Point p1, Point p2) { Point midpoint = new Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2); return midpoint; } }
回答2件
あなたの回答
tips
プレビュー