ネットが遅くてイライラしてない!?

こんばんは、タイトルの通りなのですが、二点の座標から直線の方程式を求める方法がイマイチ理解できず困っています。

ax+b=yを変形して求めたほうが楽だとは思うのですが、プログラムに組み込むために座標から直接、直線の方程式を求めたいのです。
2つの点の座標から 直接ax+by+c=0を作りたいのですが、a,b,cを求める式は以下の式で合っているでしょうか・・・?

a = (y0-y1)
b = -(x0-x1)
c = -{(y0-y1)*x1 + (x0-x1)*y1)}

A 回答 (3件)

2点(x0,y0),(x1,y1)を通る直線の式は



y-y0=(y1-y0)(x-x0)/(X1-x0)

ax+by+c=0

に変形したいのであれば

a=(y1-y0)

b=-(x1-x0)

c=y0(x1-x0)-x0(y1-y0)
    • good
    • 2

x0,y0を通るのだから,


y-y0=a*(x-x0)と書ける。
x1,y1を通るのだから
y1-y0=a*(x1-x0)
aを消して,
(y1-y0)(x-x0)=(y-y0)(x1-x0)
が欲しい式です。
    • good
    • 0

たとえば


x0=0
y0=0
x1=1
y1=1
であればこの2点をとおる直線は-x+y=0となるはずだけど、あなたの式では
a=-1
b=1
c=2
になるよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q2点の座標を直線の式にするには。

2点の座標(x, y)(x', y')があります。
これをax+by+c = 0の直線の式に直したいのですが、どのような方法で計算すればよいのでしょうか

Aベストアンサー

2点を(x1,y1),(x2,y2)とすると2点を通る式は
(x-x1)(y2-y1)=(x2-x1)(y-y2)で表現できます


これを展開すると
(y2-y1)x-(x2-x1)y+y2(x2-x1)-x2(y2-y1)=0です

したがって
a=(y2-y1)
b=-(x2-x1)
c=y2(x2-x1)-x2(y2-y1)

Qエクセルの関数を使って、2座標を通る1次関数等を求めたいです

皆様、はじめまして!

オタッキーな質問で恐縮ですが、どうぞよろしくお願いいたします。

では、さっそく参ります。

エクセル2003の関数を使って、2点(2つの座標)を通る1次関数を求め、任意のX軸の値を代入し、Yの値を求めたいと思っております。

株のシステムトレードで、エクセルを使って、投資システムの検証をするために、このような事をしようとしています。

理想を言えば、2点(2つの座標)から直接Yの値まで1発で求める関数があればよいのですが、エクセル関数の事典で調べてもなさそうでした。

皆様、どうぞよろしくお願いいたします。

Aベストアンサー

エクセルであればFORECAST関数で求めることが可能です
A列にxの値、B列にyの値を入力します(これが2点の座標です)
A1 1、B1 5
A2 3、B2 11

任意のセルに
=FORECAST(5,B1:B2,A1:A2)
と入力すればx=5の時のyの値(=17)を得ます。

反対にyの値からxを求めたいなら
=FORECAST(17,A1:A2,B1:B2)
でy=17にたいするx(=5)を求めることができます。

QC++でscanfは使えない?

お盆休みを利用してC言語の勉強をしようと思っています。
さわり程度にはわかるのですが、ポインタなどを本気で理解してみようと思っています。

PCにvisual studio2013が入っているので、2013のC++のプロジェクトを使って勉強していこうと思っているのですが、下記のように入力すると、scanfでエラーが出てしまいます。

#include "stdafx.h"
#include <stdio.h>

void main()
{
int n;
scanf("%d",&n);
}

C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?

Aベストアンサー

scanfはC言語の「文法」ではありません。
「標準ライブラリ」と呼ばれる、ライブラリに含まれる関数の一つでしかありません。


あと、具体的にどんなエラーメッセージが出たのですか?
メッセージの内容を読んで理解することも、プログラミング技術向上に大事なことです。

http://ja.wikipedia.org/wiki/Scanf#scanf.E3.81.AE.E5.95.8F.E9.A1.8C.E7.82.B9.E3.81.A8.E5.9B.9E.E9.81.BF.E6.96.B9.E6.B3.95
にあるように、scanfは使い方を間違えるととても「危険」な関数です。
そこで
http://msdn.microsoft.com/ja-jp/library/9y6s16x1%28v=vs.100%29.aspx
> セキュリティに関するメモ
とあるように、Microsoftとしてはセキュリティ強化版を使うことを推奨しています。
# 根本対策にはなってないという説もありますが。

そのため、設定次第では、scanfを使っただけで警告、またはエラーになります。

scanfはC言語の「文法」ではありません。
「標準ライブラリ」と呼ばれる、ライブラリに含まれる関数の一つでしかありません。


あと、具体的にどんなエラーメッセージが出たのですか?
メッセージの内容を読んで理解することも、プログラミング技術向上に大事なことです。

http://ja.wikipedia.org/wiki/Scanf#scanf.E3.81.AE.E5.95.8F.E9.A1.8C.E7.82.B9.E3.81.A8.E5.9B.9E.E9.81.BF.E6.96.B9.E6.B3.95
にあるように、scanfは使い方を間違えるととても「危険」な関数です。
そこで
http://msdn.microsoft.com/ja...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング