Matematik fonksiyonlarını derece cinsinden nasıl elde ederim?

Başlatan DaisysFox, 20 Mart 2022, 18:47:53

DaisysFox

Bazı formülleri kullanarak bir sonuç elde etmek istiyorum fakat anladığım kadarıyla sin, cos, asin gibi ifadeler radyan cinsinden yazılması gerekiyor. Peki bu işlemlerin sonucunu nasıl derece cinsinden elde edebilirim veya radyan cinsinden olması gerekli kuralını dereceye ayarlayamaz mıyım?

fi=41;
dec=23.45*sin((360/365)*(284+d)); // Deklinasyon açısı
w=15*(saat-12); // Saat açısı

   ele=(sin(dec)*sin(fi)+cos(dec)*cos(fi)*cos(w));
e=asin(ele); // Altitude,elevasyon
   azi=(cos(dec)*sin(w)/cos(e));
a=asin(azi); // Azimuth

Veri türleri ve math.h kodun başında tanımlanmıştır. Sonuç olarak e ve a değerlerini derece olarak elde etmek istiyorum.

Yardımcı olabilirseniz çok sevinirim, iyi çalışmalar :)

Epsilon

Radyanı dereceye çevirmek için 180 ile çarpıp pi ye bölersiniz

DaisysFox

Bu çevirme işlemini e ve a sonuçlarını için mi yoksa sin(dec), sin(fi), cos(e) için ayrı ayrı mı yapmam gerekir?
Ayrı yapmam gerekiyorsa her formül için şu şekilde mi olur?

dec=23.45*sin((360/365)*(284+d)); // BU FORMÜL İÇİN İŞLEM SIRASI

dereceicinislem = (360/365)*(284+d); // Bunun sonucu dereceyi veriyor.

radyanicinislem = dereceicinislem*(PI/180); // Derece Radyana çevrildi.

dec=23.45*sin(radyanicinislem); // Radyan değeri yazılıp, radyan olarak sonuç alındı.

sonuc= dec*(180/PI); // Dec değişkeni radyandan dereceye çevrildi.

Bu şekilde yaparsam çok uzayacak gibi :/

Epsilon

Hesaplatmak istediğiniz konuyu açıklar ,örneğin, Güneş takip sistemimi yoksa başka bir konumu bunu ve referans bilgileri paylaşıranız daha fazla yardımcı olunur.

Epsilon

Eğer linkteki konuyu hesaplatmaya çalışıyorsanız
Güneş Geometrisi
Burada radyan kullanılmıyor

Deklinasyon açısının hesabında çıkması gereken sonuç tablo 1.1 deki en sağdaki sütun
Bunu hesaplatırabilmeniz için ,günün tarihindeki gün sayısını da buldurtmanız gerekiyor
Saat açısı hesabında ise saat bilgisinde öğleden önce ve öğleden sonra bilgisini de buldurmanız gerekiyor (Gündüz için + 12 den sonra - alınıyormuş ).
Formülü basit
ω=15derece x (LST-12) imiş

Son denklemdeki hesaptaki φ değeri hariç diğer değerler zaten yukarıdan hesaplanıyor
φ değeride bulunulan yerin enlem değeri olabilir

DaisysFox

Güneş takip sistemi yapmaya çalışıyorum da benim formülümde d olan(linkte n) değerini hesaplatabildim(Switch case ile). Motorum da sabit bir değer verdiğim zaman azimut değeri için hesaplamayı yapıyor fakat, şuan formülleri eklemeye çalışıyorum ve PIC kitabına(Serdar Çiçek) baktığımda matematik fonksiyonları kısmında trigonometrik ifadeler şu şekilde geçiyor:

değişken ismi=sin(rad);
değişken ismi=cos(rad);
değişken ismi=asin(val);

"Fonksiyonlardaki "rad" kısmına -2pi ile 2pi arasında istenen bir açı değeri radyan cinsinden(ondalıklı olabilir) yazılabilir. Fonksiyonlardaki "val" kısmına ise -1.0 ile 1.0 arasında ondalıklı bir değer yazılabilir. Fonksiyonlardaki "value" kısmına ondalıklı herhangi bir değer yazılabilir."

-Bu kısımda geçen radyan kafamı karıştırdı çünkü benim elimde olan değerler derece cinsinden olması gerekiyor ki dereceyi motorun adım açısına böldüğümde istediğim kadar adım atabilsin.
Örnek: Azimut açısı=60 derece ;
      b=Azimut/5.625= 10 // Yaklaşık olarak 10 adım atıp 56.25 derecede duruyor motorum bu da benim için yeterli.

Yaptığım denemelerde azimut açısı kendim bir değer olarak atadığımda motor dönüyor fakat azimut açısını formüllerden hesaplamam gerektiği için bu kısımda sorun yaşıyorum.

Sorum da kısaca şu olmuş oluyor; formülde sin, cos, asin içine radyan olarak mı yazmam gerekiyor fi, w, dec değerlerini yoksa direk 30-60 yazabilir miyim?

Not: Saat değerini vs. RTC modülü sağlayacak.
İlginiz için teşekkürler :)

Epsilon

Hesaplamalamızda radyan kullanmıyacaksınız
CCS deki fonksiyon/komutun söz dizilimide rad değerinin olması ister derece ister radyan olarak kullanabilisin anlamında olabilir (CCS bilmiyorum dolayısle syntaxınıda bilmiyorum)

Hesaplamalarda tabiki önceden hesaplanan açı değerleri ne ise o değerin sinüs (ve/veya cosinüs)lerini alacaksınız.

Eğer hesaplanan değerleri programınızda işleme girmeden evvel ekrana yazdırırsanız sonucun yanlış çıkmasına ne sebep oluyor görürsünüz.

DaisysFox

Hallettim, teşekkürler.
Son halinin bir kısmı bu şekilde:
fi=41; 
d=100;
saat=20;  
w=15*(saat-12); // Saat açısı
dec=23.45*sin((0.986*(284+d))*(PI/180)); // 7.48
e=(sin(dec*(PI/180))*sin(fi*(PI/180))+cos(dec*(PI/180))*cos(fi*(PI/180))*cos(w*(PI/180))); // -360 ile 360 
elev=asin(e);  //  -1 ile 1 
elev=(elev*180)/PI; // -16.77

foseydon

kullandığınız işlemcinin yanında gelen kütüphanelere bakın bence.trigonometrik işlem, pid kontrol vs. gibi işlemcinin kullanıma alanında işe yarayacak fonksiyonları assembly ile yazıp koyuyorlar. dolayısı ile sizin yazdığınızdan daha verimli oluyor.