Skip to content

Commit

Permalink
Add max tack angle to tack analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
RCgmbh committed Feb 3, 2025
1 parent c7ea1d7 commit 88e84ef
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 7 deletions.
3 changes: 3 additions & 0 deletions PiLotModel/Analyze/TackAnalyzerOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,8 @@ public class TackAnalyzerOptions {

[JsonPropertyName("minTurnAngle")]
public Int32 MinTurnAngle { get; set; }

[JsonPropertyName("maxTurnAngle")]
public Int32 MaxTurnAngle { get; set; }
}
}
13 changes: 8 additions & 5 deletions PiLotWeb/js/Model/Analyze.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ PiLot.Model.Analyze = (function () {
* @param {Number} pMinLeg2Length - minimal length of the outgoing leg in meters
* @param {Number} pMaxTurnDistance - maximal distance of the two legs in meters
* @param {Number} pMinTurnAngle - minimal angle between lets in deg to be considered a turn
* @param {Number} pMaxTurnAngle - maximal angle between lets in deg to be considered a turn
* @param {Boolen} pMaxTacks - if not null, only the last x tacks will be returned
* @returns {Object[]} - Array of objects with {leg1, leg2, angle, windDirection}
*/
findTacks: function (pMinSampleLength, pMaxSampleAngle, pMinLeg1Length, pMinLeg2Length, pMaxTurnDistance, pMinTurnAngle, pMaxTacks = null) {
findTacks: function (pMinSampleLength, pMaxSampleAngle, pMinLeg1Length, pMinLeg2Length, pMaxTurnDistance, pMinTurnAngle, pMaxTurnAngle, pMaxTacks = null) {
if (this.minSampleLength !== pMinSampleLength) {
this.minSampleLength = pMinSampleLength;
this.sampleTrack();
Expand Down Expand Up @@ -72,10 +73,12 @@ PiLot.Model.Analyze = (function () {
leg1Bearing = this.getLegBearing(leg1);
leg2Bearing = this.getLegBearing(leg2);
angle = PiLot.Utils.Nav.getAngle(leg1Bearing, leg2Bearing);
if (Math.abs(angle) > pMinTurnAngle) {
result.push(this.createTackInfo(leg1, leg2, leg1Bearing, leg2Bearing, angle));
if(pMaxTacks !== null && pMaxTacks === result.length){
break;
if (Math.abs(angle) >= pMinTurnAngle) {
if(Math.abs(angle) <= pMaxTurnAngle){
result.push(this.createTackInfo(leg1, leg2, leg1Bearing, leg2Bearing, angle));
if(pMaxTacks !== null && pMaxTacks === result.length){
break;
}
}
leg1 = leg2;
leg2 = null;
Expand Down
7 changes: 7 additions & 0 deletions PiLotWeb/js/Templates/Analyze.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,13 @@ PiLot.Templates.Analyze = {
<input type="range" class="rngMinTurnAngle input8 marginRightSmall" min="0" max="180" step="1" />
<span class="lblMinTurnAngle"></span>°
</div>
</div>
<div class="flexRowWrap paddingBottomSmall">
<span class="col6 marginRight" data-text="maximalTackAngle"></span>
<div class="col10 flex">
<input type="range" class="rngMaxTurnAngle input8 marginRightSmall" min="0" max="180" step="1" />
<span class="lblMaxTurnAngle"></span>°
</div>
</div>
<div class="flexRowWrap paddingBottomSmall">
<span class="col6 marginRight" data-text="maximalTackDistance"></span>
Expand Down
Binary file modified PiLotWeb/js/Texts/de.js
Binary file not shown.
Binary file modified PiLotWeb/js/Texts/en.js
Binary file not shown.
25 changes: 23 additions & 2 deletions PiLotWeb/js/View/Analyze.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ PiLot.View.Analyze = (function () {
},

tackAnalyzerOptions_change: function (pSender, pOptions) {
this.showTrackAnalysis(false);
if(!this.control.hidden){
this.showTrackAnalysis(false);
}
},

draw: function(){
Expand Down Expand Up @@ -225,6 +227,7 @@ PiLot.View.Analyze = (function () {
options.minLeg2Length,
options.maxTurnDistance,
options.minTurnAngle,
options.maxTurnAngle,
);
this.mapTacks.showTacks(tacks);
}
Expand Down Expand Up @@ -274,6 +277,7 @@ PiLot.View.Analyze = (function () {
this.gpsObserver = new PiLot.Model.Nav.GPSObserver({intervalMs: 1000, calculationRange: 2, autoStart: false});
this.gpsObserver.on('recieveGpsData', this.gpsObserver_recieveGpsData.bind(this));
this.gpsObserver.on('outdatedGpsData', this.gpsObserver_outdatedGpsData.bind(this));
this.tackAnalyzerOptions.on('change', this.tackAnalyzerOptions_change.bind(this));
this.trackObserver = new PiLot.Model.Nav.TrackObserver(null, this.gpsObserver);
this.trackObserver.setTrackSeconds(this.maxLengthSeconds);
this.draw();
Expand All @@ -293,6 +297,10 @@ PiLot.View.Analyze = (function () {
gpsObserver_outdatedGpsData: function(){
this.setTrackAsync(null);
},

tackAnalyzerOptions_change: function (pSender, pOptions) {
this.showTackInfoAsync()
},

draw: function(){
this.control = PiLot.Utils.Common.createNode(PiLot.Templates.Analyze.liveTackInfo);
Expand Down Expand Up @@ -392,6 +400,7 @@ PiLot.View.Analyze = (function () {
options.minLeg2Length,
options.maxTurnDistance,
options.minTurnAngle,
options.maxTurnAngle,
2
);
} else {
Expand Down Expand Up @@ -464,6 +473,8 @@ PiLot.View.Analyze = (function () {
this.lblMaxSampleAngle = null;
this.rngMinTurnAngle = null;
this.lblMinTurnAngle = null;
this.rngMaxTurnAngle = null;
this.lblMaxTurnAngle = null;
this.rngMaxTurnDistance = null;
this.lblMaxTurnDistance = null;
this.rngMinLeg1Length = null;
Expand Down Expand Up @@ -519,6 +530,10 @@ PiLot.View.Analyze = (function () {
this.changeOption('minTurnAngle', pEvent.target.value, this.lblMinTurnAngle, false);
},

rngMaxTurnAngle_change: function (pEvent) {
this.changeOption('maxTurnAngle', pEvent.target.value, this.lblMaxTurnAngle, false);
},

rngMaxTurnDistance_change: function (pEvent) {
this.changeOption('maxTurnDistance', pEvent.target.value, this.lblMaxTurnDistance, true);
},
Expand Down Expand Up @@ -550,6 +565,9 @@ PiLot.View.Analyze = (function () {
this.rngMinTurnAngle = this.control.querySelector('.rngMinTurnAngle');
this.rngMinTurnAngle.addEventListener('input', this.rngMinTurnAngle_change.bind(this));
this.lblMinTurnAngle = this.control.querySelector('.lblMinTurnAngle');
this.rngMaxTurnAngle = this.control.querySelector('.rngMaxTurnAngle');
this.rngMaxTurnAngle.addEventListener('input', this.rngMaxTurnAngle_change.bind(this));
this.lblMaxTurnAngle = this.control.querySelector('.lblMaxTurnAngle');
this.rngMaxTurnDistance = this.control.querySelector('.rngMaxTurnDistance');
this.rngMaxTurnDistance.addEventListener('input', this.rngMaxTurnDistance_change.bind(this));
this.lblMaxTurnDistance = this.control.querySelector('.lblMaxTurnDistance');
Expand Down Expand Up @@ -622,6 +640,8 @@ PiLot.View.Analyze = (function () {
this.lblMaxSampleAngle.innerText = this.options.maxSampleAngle;
this.rngMinTurnAngle.value = this.options.minTurnAngle;
this.lblMinTurnAngle.innerText = this.options.minTurnAngle;
this.rngMaxTurnAngle.value = this.options.maxTurnAngle;
this.lblMaxTurnAngle.innerText = this.options.maxTurnAngle;
this.setScaledRangeValue(this.rngMaxTurnDistance, this.options.maxTurnDistance);
this.lblMaxTurnDistance.innerText = this.options.maxTurnDistance;
this.setScaledRangeValue(this.rngMinLeg1Length, this.options.minLeg1Length);
Expand Down Expand Up @@ -654,7 +674,8 @@ PiLot.View.Analyze = (function () {
minLeg1Length: 100,
minLeg2Length: 100,
maxTurnDistance: 30,
minTurnAngle: 70
minTurnAngle: 70,
maxTurnAngle: 140
};
},

Expand Down

0 comments on commit 88e84ef

Please sign in to comment.