Program liczacy odległość i kąty w C

0

Witam!
Coby nie śmiecić na forum edytuję i proszę o kolejne porady. Niby program działa i liczy azymut ale liczy poprawnie tylko gdy współrzędne są w I ćwiartce czwartaka. W geodezji używamy ukladu prawoskrętnego dlatego tez zamieniłem współrzędne na początku. Zapewne źle jest coś z if'ami ale nie wiem co.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
	float x1,y1,x2,y2,x,y,A12,A13,alfa,d12,d13,dx2,dy2,dx,dy,A12st,A13st,alfast;
	float PI=(3.14159265);
	int i = 3;
	
	/*Wpisywanie wspolrzednych*/
	printf("Podaj wspolrzedne x1, y1, x2, y2:\n");
	scanf ("%f", &x1);
	scanf ("%f", &y1);
	scanf ("%f", &x2);
	scanf ("%f", &y2);
	
	/*Zamiana miejscami wspolrzednych*/
	/*float ex1 = x1, ex2 = x2;
	x1=y1;
	y1=ex1;
	x2=y2;
	y2=ex2;
	float ex = x;
	x=y;
	y=ex;*/
	
	while(1)
	{
		printf("Podaj wspolrzedne pkt %d\n", i);
		scanf ("%f", &x);
		scanf ("%f", &y);
		i++;
		
		/*Przyrosty*/
		dx2=x2-x1;
		dy2=y2-y1;
		dx=x-x1;
		dy=y-y1;
	
		/*Azymut 12*/
		if ((dx2==0) & (dy2>0)) A12=PI/2; /*Warunki na azymuty pelne*/
		else A12=atan2(dy2,dx2);
		if ((dx2>0) & (dy2==0)) A12=0;
		else A12==atan2(dy2,dx2);
		if ((dx2==0) & (dy2<0)) A12=PI+PI/2;
		else A12==atan2(dy2,dx2);
		if ((dx2<0) & (dy2==0)) A12=PI;
		else A12==atan2(dy2,dx2);
		
		/*if ((dx2<0) & (dy2>0)) A12=A12+PI/2; Warunki na azymuty +180 itd
		else A12=atan(dy2/dx2);*/
		if ((dx2<0) & (dy2<0)) A12=atan2(dy2,dx2)+PI+PI;
		else A12=atan2(dy2,dx2);
		/*if ((dx2>0) & (dy2<0)) A12=A12+2*PI;
		else A12=atan(dy2/dx2);*/
		
		/*Azymut 13*/
		
		if ((dx==0) & (dy>0)) A13=PI/2; /*Warunki na azymuty pelne*/
		else A13=atan2(dy,dx);
		if ((dx>0) & (dy==0)) A13=0;
		else A13==atan2(dy,dx);
		if ((dx==0) & (dy<0)) A13=PI+PI/2;
		else A13==atan2(dy,dx);
		if ((dx<0) & (dy==0)) A13=PI;
		else A13=atan2(dy,dx);
		
		
		/*if ((dx<0) & (dy>0)) A13=A13+PI/2; Warunki na azymuty +180 itd
		else A13=atan(dy/dx);*/
		if ((dx<0) & (dy<0)) A13=atan2(dy,dx)+PI+PI;
		else A13=atan2(dy,dx);
		/*if ((dx>0) & (dy<0)) A13=A13+2*PI;
		else A13=atan(dy/dx);*/
		
		A12st=A12*180/PI;
		A13st=A13*180/PI;
		
		/*if (A12st>360) A12st=A12st-360;
		else A12st=A12*180/PI;
		
		if (A13st>360) A13st=A13st-360;
		else A13st=A13*180/PI;*/
		
		/*Kat*/
		alfa=A13-A12;
		
		if (alfa<0) alfa=A12-A13;
		else alfa=A13-A12;
		
		alfast=alfa*180/PI;
		
		/*Dlugosci*/
		d12=sqrt(dx2*dx2+dy2*dy2);
		d13=sqrt(dx*dx+dy*dy);
		
		/*Wyniki*/
		printf("Wyniki: \n");
		printf("Kat = %f\n", alfast);
		printf("Odleglosc 12= %f\n", d12);
		printf("Odleglosc 13= %f\n", d13);
		printf("Azymut 12= %f\n", A12st);
		printf("Azymut 13= %f\n", A13st);
	}
	return 0;
	
}
2

Pozjadałeś %f w tych printf'ach - to na początek...

0

Tak zrozumialem, dziekuję, ale szukam co jeszcze nie tak.

1

Proponuję zacząć poszukiwania od wrócenia się do kursu c++, konkretnie do działu operatory.
Następnie bacznie przypatrz się coś tam w if'ach else'ach powypisywał.

0

Możliwe, nie znam się za bardzo na programowaniu, dopiero się uczę, a kursu żadnego nie przechodzilem jak do tej pory, moze gdy będzie więcej czasu przeczytam jakąś książkę.

0

Ma być właściwa kolejność, najpierw się uczysz później piszesz.
Wyobraź sobie lekarza z twoim podejściem, najpierw operuje a później moze gdy będzie więcej czasu przeczyta jakąś książkę. :D

0

Wiem że tak powinno być, ale cóż praca domowa sama się nie zrobi :)

up

0

Edytowalem kod. Nie wklejalem nowego żeby nie smiecic. Wiem że pisaliscie że ify ale nie wiem co zmienić. A konkretnie dodałem kilka warunków aby liczony azylu wynosił 0,180,90 lub 270 stopni i sa w miarę ok. pisalem też warunki na kąty gdy przyrosty wynoszą np x=-40 y=40 ale nie działają.

edit
Dobra, zrobiłem, działa w każdej ćwiartce - poprawiłem if'y już wiem co było źle, po prostu pisałem if'a za if'em zamiast wpisywać if else i potem w to else znowu if itd. Dzięki za cierpliwość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1