Obliczyć punkt przecięcia prostej z okręgiem

Obiekty i przekształcenia geometryczne, opisane za pomocą układu (nie zawsze prostokątnego) współrzędnych.
michal_2
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 4 lis 2010, o 07:47
Płeć: Mężczyzna
Lokalizacja: Łódź

Obliczyć punkt przecięcia prostej z okręgiem

Post autor: michal_2 »

Mam funkcję:

\(\displaystyle{ y = ax + b}\)

Oraz równanie okręgu:

\(\displaystyle{ (x - x _{1}) ^{2} + (y - y _{1}) ^{2} = r ^ {2}}\)

Podstawiam równanie funkcji liniowej do równania okręgu i mam:

\(\displaystyle{ (x - x _{1}) ^{2} + (ax + b - y _{1}) ^{2} = r ^ {2}}\)

Tylko, że jak to wszystko obliczę, to wychodzą mi wyniki od czapy!
Moje dane:
\(\displaystyle{ r = 100

x _{1} = 25

y _{1} = 439}\)


a i b się zmieniają w zależności od położenia kursora myszki na ekranie. Wyliczam prostą przechodzącą przez punkty (x1, y1) oraz współrzędne kursora.

Mam taki wzór:
\(\displaystyle{ a = \frac{y _{2} - y _{1}}{x _{2} - x _{1} }

b = y _{1} + \frac{x _{1} y_{1} - x _{1} y _{2} }{x _{2} - x _{1} }}\)


czy dobrze policzyłem te współczynniki?
Czemu mi nie wychodzi?
Użytkownik
Użytkownik
Posty: 9833
Rejestracja: 18 gru 2007, o 03:54
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 90 razy
Pomógł: 2632 razy

Obliczyć punkt przecięcia prostej z okręgiem

Post autor: »

Pokaż swoje rachunki, to będzie można stwierdzić dlaczego coś Ci nie wychodzi.

Q.
michal_2
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 4 lis 2010, o 07:47
Płeć: Mężczyzna
Lokalizacja: Łódź

Obliczyć punkt przecięcia prostej z okręgiem

Post autor: michal_2 »

Kod: Zaznacz cały

			a = (y - punkt.y)/(x - punkt.x)
			b = punkt.y + (punkt.x * punkt.y - punkt.x * y)/(x - punkt.x)
			
			local A = 1 + a * a
			local B = 2 * a * b - 2 * punkt.x - 2 * a * punkt.y
			local C = punkt.x ^ 2 - b ^ 2 - 2 * b * punkt.y + punkt.y ^ 2 - r ^ 2
			
			delta = B * B - 4 * A * C
			sqrtDelta = math.sqrt(delta)
			
			posX = (-B + sqrtDelta) / (2 * A)
			posY = a * posX + b
\(\displaystyle{ (x - x _{1}) ^{2} + (y - y _{1}) ^{2} = r ^{2}

(x - x _{1}) ^{2} + (ax + b - y _{1}) ^{2} = r ^{2}}\)


po wykonaniu przekształceń mam taki wzór:

\(\displaystyle{ x ^{2} (1 + a ^{2}) + x (2ab - 2x _{1} - 2ay _{1}) + (x _{1}) ^{2} + b ^{2} - 2by _{1} + (y _{1}) ^{2} - r ^{2} = 0}\)

p.s. a wyniki dla różnych pozycji kursora są takie:

Kod: Zaznacz cały

x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 148.6116499364, y: -426.28154955483
x: 231.38935543709, y: -283.3627440298
x: 231.38935543709, y: -283.3627440298
x: 231.38935543709, y: -283.3627440298
x: 418.93716058083, y: -112.51202481316
x: 460.76790908491, y: -69.395893932396
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 494.3570069787, y: -30.357006978696
x: 460.76790908491, y: -69.395893932396
x: 460.76790908491, y: -69.395893932396
x: 367.334114797, y: -160.08470089475
x: 367.334114797, y: -160.08470089475
x: 367.334114797, y: -160.08470089475
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 304.84379879522, y: -213.96886385551
x: 231.38935543709, y: -283.3627440298
x: 231.38935543709, y: -283.3627440298
x: 231.38935543709, y: -283.3627440298
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 1.#QNAN, y: 1.#QNAN
x: 167.24363386861, y: -378.9008947445
x: 141.7755173106, y: -448.49393156057
x: 166.74597603995, y: -379.97675045306
x: 162.92301025121, y: -388.53806150729
x: 161.28953162387, y: -392.36614290561
x: 161.28953162387, y: -392.36614290561
x: 161.28953162387, y: -392.36614290561
x: 161.28953162387, y: -392.36614290561
x: 161.28953162387, y: -392.36614290561
x: 161.28953162387, y: -392.36614290561
x: 159.7065023857, y: -396.18031479137
x: 166.03018948683, y: -381.53928428703
x: 166.03018948683, y: -381.53928428703
x: 177.4658560553, y: -358.51370859694
x: 168.29199162099, y: -376.66210615026
x: 164.21537144218, y: -385.58335392679
x: 173.92986974008, y: -365.22129659641
x: 168.76444193576, y: -375.66517096931
x: 164.04120845248, y: -385.97783681803
x: 160.75636463814, y: -393.63903644724
x: 158.67805059839, y: -398.71578374994
x: 158.67805059839, y: -398.71578374994
x: 158.67805059839, y: -398.71578374994
x: 163.97061878105, y: -386.13804901247
x: 196.25975674221, y: -327.59129208417
x: 239.78119895901, y: -274.38041082814
x: 262.85492523038, y: -251.54655712047
x: 310.47868031422, y: -209.11376071336
x: 412.79074073362, y: -118.44918980457
x: 467.97655005241, y: -61.399436170319
x: 494.3570069787, y: -30.357006978696
x: 516.53166368078, y: -1.683560541385
x: 545.30166332018, y: 40.102058121197
x: 560.1939371252, y: 64.364244012361
x: 580.77575158609, y: 101.89011789041
x: 593.16639252951, y: 127.42488151607
x: 607.76846129697, y: 161.4912089062
x: 617.96408020597, y: 188.84327866311
x: 628.59508209986, y: 222.08301737036
x: 635.63062321433, y: 248.17793024552
x: 637.77333161169, y: 257.08291717778
x: 637.77333161169, y: 257.08291717778
x: 639.80752092245, y: 266.08538474056
x: 639.80752092245, y: 266.08538474056
x: 645.21707161464, y: 293.63662384032
x: 648.20626201731, y: 312.41122802773
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.50463992113, y: 321.90538001479
x: 649.26766197326, y: 320.09187390986
x: 649.26766197326, y: 320.09187390986
x: 650.05550654095, y: 326.28507259098
x: 649.82815697259, y: 324.44817122169
x: 649.82815697259, y: 324.44817122169
x: 649.58780455344, y: 322.5514262697
x: 649.06431038915, y: 318.56653659157
x: 648.7790683142, y: 316.471968724
x: 649.94340223735, y: 325.37392686594
x: 649.94340223735, y: 325.37392686594
x: 649.68556334399, y: 323.31748826963
x: 649.41132896082, y: 321.18654170551
x: 650.33987537302, y: 328.64590434594
x: 650.0800026286, y: 326.48559952685
x: 649.50463992113, y: 321.90538001479
x: 648.47660495248, y: 314.3046790095
x: 648.08163179555, y: 311.55148440545
x: 649.26766197326, y: 320.09187390986
x: 649.26766197326, y: 320.09187390986
x: 648.47660495248, y: 314.3046790095
x: 648.03018646709, y: 311.19893610932
x: 647.54496497984, y: 307.93790210951
x: 648.94409362559, y: 317.67753735058
x: 648.94409362559, y: 317.67753735058
x: 647.96333853753, y: 310.7428420658
x: 647.39862000109, y: 306.9760503028
x: 649.50463992113, y: 321.90538001479
x: 649.01791406274, y: 318.22233921366
x: 649.01791406274, y: 318.22233921366
x: 648.47660495248, y: 314.3046790095
x: 648.47660495248, y: 314.3046790095
x: 648.47660495248, y: 314.3046790095
x: 648.47660495248, y: 314.3046790095
x: 648.47660495248, y: 314.3046790095
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 647.8729570615, y: 310.12973302176
x: 650.62991074548, y: 331.1327740094
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 652.45849265111, y: 349.36307247841
x: 503.00180433317, y: -19.491526605289

Copyright (C) 2009-2011  A n s c a ,  I n c .
        Version: 2.0.0
        Build: 2011.704
x: 522.88879620928, y: 7.0567397124831
x: 514.60164255174, y: -4.2879736617115
x: 495.83791167295, y: -28.522151731595
x: 483.82980198772, y: -43.103777450869
x: 470.16866210184, y: -58.929392425025
x: 455.86723502854, y: -74.726318687871
x: 447.98868025501, y: -83.126652189778
x: 439.67271026725, y: -91.781069142082
x: 434.96080472745, y: -96.593954563288
x: 429.78065471139, y: -101.81349768817
x: 426.45742631908, y: -105.12411501098
x: 421.71936810695, y: -109.79512588128
x: 416.99200475508, y: -114.40047730129
x: 411.6696367702, y: -119.52280866807
x: 401.53507418948, y: -129.1055505315
x: 398.14065872281, y: -132.26844211545
x: 398.14065872281, y: -132.26844211545
x: 392.08876951751, y: -137.85378067038
x: 385.3046754667, y: -144.03847484612
x: 375.96222902424, y: -152.43634891121
x: 357.79805999221, y: -168.43723571393
x: 349.85475400427, y: -175.32928727541
x: 322.90760496913, y: -198.45820848234
x: 310.53408435756, y: -209.06612404751
x: 304.84379879522, y: -213.96886385551
x: 296.20499040892, y: -221.46391781937
x: 283.55380341574, y: -232.6092698482
x: 268.92783702413, y: -245.87431164467
x: 253.15136468266, y: -260.86972679681
x: 239.43049316423, y: -274.74721296094
x: 230.07870159848, y: -284.80718211228
x: 224.20858801382, y: -291.43148938402
x: 220.6786184142, y: -295.54742912407
x: 220.6786184142, y: -295.54742912407
x: 218.3849463908, y: -298.28010811491
x: 217.18854401715, y: -299.72471606593

Copyright (C) 2009-2011  A n s c a ,  I n c .
        Version: 2.0.0
        Build: 2011.704
x: 533.59759920195, y: 22.382817675
x: 522.60215724138, y: 6.6571420689684
x: 514.56895708395, y: -4.3318889149138
x: 496.77645510175, y: -27.353737227017
x: 475.99985529537, y: -52.267699518174
x: 464.87786538973, y: -64.860100355505
x: 457.2210894501, y: -73.262031940858
x: 450.89144138246, y: -80.055194184873
x: 444.53503034975, y: -86.746430438289
x: 438.15670070261, y: -93.336518212977
x: 426.87349759403, y: -104.71120262722
x: 420.48102509116, y: -111.00672363672
x: 418.93716058083, y: -112.51202481316
x: 417.83300498239, y: -113.58509367523
x: 417.83300498239, y: -113.58509367523
x: 417.83300498239, y: -113.58509367523
x: 416.27790151137, y: -115.09152495906
x: 456.32929877865, y: -74.227266901172
x: 495.62352345647, y: -28.788441989862
x: 524.44917079477, y: 9.2414111765941
x: 542.96085567939, y: 36.470420729162
x: 558.95563158127, y: 62.26463771766
x: 560.1939371252, y: 64.364244012361
x: 560.1939371252, y: 64.364244012361
x: 560.1939371252, y: 64.364244012361

dodam, że aby można było zobaczyć celownik, x powinny być z zakresu: 0, 320; a y: 0, 480
Użytkownik
Użytkownik
Posty: 9833
Rejestracja: 18 gru 2007, o 03:54
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 90 razy
Pomógł: 2632 razy

Obliczyć punkt przecięcia prostej z okręgiem

Post autor: »

Wybrałeś jeden z dwóch pierwiastków równania kwadratowego, ale nie zawsze w ten sposób wybierasz ten dobry. Szukany punkt musi leżeć między środkiem okręgu a pozycją kursora.

A prościej zrobić to bez równania kwadratowego - jeśli \(\displaystyle{ O}\) jest środkiem okręgu, a \(\displaystyle{ A}\) jest pozycją kursora, to szukany punkt to:
\(\displaystyle{ X= O+r\cdot \frac{\vec{OA}}{|\vec{OA}|}}\)
(przesunięcie środka okręgu w stosownym kierunku o odległość \(\displaystyle{ r}\)).

Q.
ODPOWIEDZ