 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 07 05, 19:12. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Programavimas » c programa
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 00:00 |
|
|
|
Duotos atkarpų galų taškų koordinatės plokštumoje (x1, y1) ir (x2, y2). Kiek atkarpų kertasi su
pirmąja?
Paaiškinimai:
Atkarpų galų koordinates x1, y1, x2 ir y2 (atkarpų gali būti daug) įveskite klaviatūra ir
išsaugokite masyvuose.
Dviejų atkarpų kirtimuisi nustatyti sudarykite funkciją.
Štai tokią programą reik parašyt, atrodo gan nesunkiai, bet man kosmosas Gal galėtumėt kas užvest ant kelio ? |
|
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 08:30 |
|
|
|
imi pirmaja atkarpa ir atzvilgiu jos tikrini visas likusias, jai atkarou galai skirtingose pusese - kertasi, kitaip - nesikerta arba tik lieciasi.
kad nebutu viskas uz tave sukramtyta, pasikartok kazkur 6-7 klasiu geometrijos pamokas. |
|
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 16:10 |
|
|
|
na siaip tai jam reikia tik dvieju atkarpu susikirtimo patikrinimo funkcija sukurti.
AlgisL, tavo metodas kazkoks baisiai nekonkretus ir abejoju ar bent jau teisingas.
manau cia bus 99% matematikos ir 1% programavimo: is esmes reikia skurti matematini metoda nautatyti ar atkarpos susikerta.
manau kad cia reikies pagal turimus duomenis sukurti abieju atkarpu matematines lygtis, tada ispresti ta lygciu sistema ir patikrinti ar susikirtimo taskas itelpa i abieju atkarpu intervalus (x1;x2) ir (y1;y2) |
|
|
|
|
 |
 |
Re: c programa |
Parašytas: 2012 10 11, 16:40 |
|
|
|
monarch rašo: |
Duotos atkarpų galų taškų koordinatės plokštumoje (x1, y1) ir (x2, y2). Kiek atkarpų kertasi su
pirmąja?
Paaiškinimai:
Atkarpų galų koordinates x1, y1, x2 ir y2 (atkarpų gali būti daug) įveskite klaviatūra ir
išsaugokite masyvuose.
Dviejų atkarpų kirtimuisi nustatyti sudarykite funkciją.
Štai tokią programą reik parašyt, atrodo gan nesunkiai, bet man kosmosas Gal galėtumėt kas užvest ant kelio ? |
Nesikerta tik lygegrecios tieses (kalbant apie plostuma), taigi issiaiskinti ar dvi tieses yra lygegrecios galima tikrinant ar vienodos x1 ir x2 arba y1 ir y2, jei taip td jos lygegrecios. Tikiuosi uzvedziau ant kelio bent matematiskai |
|
_________________ Have a nice day! |
|
|
|
 |
 |
c programa |
Parašytas: 2012 10 11, 16:50 |
|
|
|
nasas, nemulkink zmogaus, jam reikia ne tieses, o atkarpas patikrinti.
galiu imest gatava sprendima, bet ar jus noretumet, kad pirkes diploma paskui jums statytu nama, jungtu laidus ar auto taisytu?
net zmonos nenoreciau, kad dulkintu mulkis. |
|
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 16:54 |
|
|
|
nu jo sumaisiau terminijoje, dekui uz pastaba |
|
_________________ Have a nice day! |
|
|
|
 |
Re: c programa |
Parašytas: 2012 10 11, 17:03 |
|
|
|
Nasas rašo: |
issiaiskinti ar dvi tieses yra lygegrecios galima tikrinant ar vienodos x1 ir x2 arba y1 ir y2, jei taip td jos lygegrecios. Tikiuosi uzvedziau ant kelio bent matematiskai |
nors tai ir ne itema betlabai idomu kaip tu tokiu budu patikrinsi ar tieses lygeriecios?
jug net jei tos koordinates ir nera vienodos tieses vistiek gali buti lygerecios |
|
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 17:11 |
|
|
|
jo teisingai, as cia pagalvojau apie tieses istikruju  |
|
_________________ Have a nice day! |
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 17:27 |
|
|
|
nasharnas sufflis:
konvertuoji atkarpas i vektorius (tieses), randi ju susikirtimo taska, jei tas taskas priklauso nors vienai is atkarpu - jos susikerta ar bent lieciasi. jei salyga 100% tenkiname - tikriname ar taskas nera atkarpu galuose, t.y. jei jis priklauso atkarpoms, bet nera ju galai, tai atkarpos tikrai kertasi.
o su matematika, vaikeli, padirbek nors biski, jei suklysi - padesim. |
|
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 19:49 |
|
|
|
pakartojai ta pati ka as rasiau.
manau kad ar lieciasi ar ketasi nera jokio skirtumo jei lieciasi viename taske tai kertasi. |
|
|
|
|
 |
c programa |
Parašytas: 2012 10 11, 20:05 |
|
|
|
Digix rašo: |
pakartojai ta pati ka as rasiau.
manau kad ar lieciasi ar ketasi nera jokio skirtumo jei lieciasi viename taske tai kertasi. |
kertasi ar lieciasi yra didelis skirtumas, jei netiki, insuk i suola is apacios keleta medvarsciu, vienus tik kad neiskristu, kitus kiaurai lenta, kad islystu ir paciuozinek, suprasi apie ka as. |
|
|
|
|
 |
 |
c programa |
Parašytas: 2012 10 17, 19:51 |
|
|
|
Nu kažką parašiau, tik kažkur klaida yra, nes tarkim vienos atkarpos galu koordinates (3;3) ir (0;0), o kitos atkarpos (-1;-1) (1;1)
tai jos turi susikirsti nes guli vienoj tiesej
o rodo kad nesikerta
----------------------------------------
#include <cstdlib>
#include <iostream>
using namespace std;
/** Gavus dviejų atkarpų koordinates, randa, ar jos kertasi */
bool arKertasi(double x1, double y1, double x2, double y2,
double x3, double y3, double x4, double y4)
{
// Determinantai koordinatei apskaičiuoti
// Paremta: http://mathworld.wolfram.com/Line-LineIntersection.html
double d1 = (x1 * y2) - (y1 * x2);
double d2 = (x3 * y4) - (y3 * x4);
double d3 = ((x1 - x2) * (y3 - y4)) - ((y1 - y2) * (x3 - x4));
// Jeigu determinantas-daliklis yra lygus 0, tai turime dvi linijas, kurios
// yra paralelios, todėl naudojame skirtingas funkcijas
if (d3 == 0) {
// Surandame pirmos atkarpos funciją
// (x,y) = (x1,y1) + t(xSkirtumas, ySkirtumas)
double xSkirtumas = x2 - x1;
double ySkirtumas = y2 - y1;
// Randame t, taip kad x3 ir pirma atkarpa būtų toje pačioje X koordinatėje
double t = (x3 - x1) / xSkirtumas;
// Jeigu su šiuo t, Y koordinatė taip pat atitinką x3 tašką, tada abi
// šios atkarpos priklauso vienai tiesei
if (y1 + t*ySkirtumas == y3) {
// Surušiuojame x koordinates didėjimo tvarka, kad būtų lengviau skaičiuoti
if (x1 > x2) {
double s = x1;
x1 = x2;
x2 = s;
}
if (x3 > x4) {
double s = x3;
x3 = x4;
x4 = s;
}
// Variantas 1: --x3--x1--x4--x2-- arba --x3--x1--x2--x4--
if (x3 <= x1 && x4 >= x1)
return true;
// Variantas 2: --x1--x3--x4--x2-- arba --x1--x3--x2--x4
else if (x3 > x1 && x3 <= x2)
return true;
// Variantas 3: --x1--x2--x3--x4
else
return false;
} else
return false;
}
// Jeigu linijos ne paralelios, randame susikirtimo taško x koordinatę
double x = (d1 * (x3 - x4) - d2 * (x1 - x2)) / d3;
// Ar taškas priklauso pirmai atkarpai
bool arPriklauso1 = false;
if (x1 > x2) {
if (x >= x2 && x <= x1)
arPriklauso1 = true;
} else {
if (x >= x1 && x <= x2)
arPriklauso1 = true;
}
// Ar taškas priklauso antrai atkarpai
bool arPriklauso2 = false;
if (x3 > x4) {
if (x >= x4 && x <= x3)
arPriklauso2 = true;
} else {
if (x >= x3 && x <= x4)
arPriklauso2 = true;
}
// Kertasi, tik jeigu taskas priklauso abiejoms atkarpoms
return arPriklauso1 && arPriklauso2;
}
/** Programos iniciatorius */
int main(int argc, char *argv[])
{
int n;
double x1[1000], x2[1000], y1[1000],y2[1000];
cout << "Kiek bus atkarpu?\n";
cin >> n;
for (int j = 0; j < n; j++) {
cout << "Iveskite " << j + 1 << " atkarpos koordinates\n";
cout << "x1: ";
cin >> x1[j];
cout << "y1: ";
cin >> y1[j];
cout << "x2: ";
cin >> x2[j];
cout << "y2: ";
cin >> y2[j];
}
// lyginame su pirmaja atkarpa
if (n > 1) {
int suma = 0;
for (int i = 1; i < n; i++)
if (arKertasi(x1[0], y1[0], x2[0], y2[0], x1[i], y1[i], x2[i], y2[i]))
suma++;
cout << "Su pirmaja kertasi " << suma << " atkarpos";
}
system("PAUSE");
return 0;
}
----------------------------- |
|
|
|
|
 |
 |
c programa |
Parašytas: 2012 10 17, 20:13 |
|
|
|
jokiu determinatu tau nereikejo skaiciuoti nes pakanka suzinoti susikirtimo taska jei tokio tasko nera gausi begalybe ar dalyba is nulio. o tiesiu finkciju vistiek reikes tai neapsimoka dviem metodais daryti to paties
kazkokios keistos tavo atkarpu funkcijos gavosi:
"(x,y) = (x1,y1) + t(xSkirtumas, ySkirtumas) "
normali tieses funkcija yra Y=y0+kX.
tau reikia suskaiciuoti y0 ir k
k bus susakiciuojamas kaip dy/dx
y0 bus randamas kaip skirtumas tarp y1 - k*x1 |
|
|
|
|
 |
c programa |
Parašytas: 2012 10 17, 20:35 |
|
|
|
Citata: |
Nu kažką parašiau, tik kažkur klaida yra, nes tarkim vienos atkarpos galu koordinates (3;3) ir (0;0), o kitos atkarpos (-1;-1) (1;1)
tai jos turi susikirsti nes guli vienoj tiesej
o rodo kad nesikerta
---------------------------------------- |
jos ir nesikerta, tik turi bendra atkarpa arba kitaip - turi bendru tasku. |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|

|
 |